On Sat, May 5, 2012 at 2:16 PM, Jared Boone <ja...@sharebrained.com> wrote:
> I spent some time last night getting the the development branch of GNU Radio 
> to compile on MacOS X 10.7. In the process, I saw some people having issues 
> with compiler/assembler AVX support, Apple's ancient GPLv2 "as", and Xcode's 
> LLVM. I succeeded in building and running GNU Radio using Xcode 4.3.2's tools 
> (no MacPorts gcc, llvm, or cctools). I'm posting what I learned, in hopes 
> somebody knows how to fix this from the GNU Radio source side (instead of 
> patching CMake, as I did).
>
> The problem I saw, having to do with Clang compiler flag detection for ORC 
> during cmake:
>
>    -- Performing Test have_maltivec
>    -- Performing Test have_maltivec - Success
>    -- Performing Test have_mfpu_neon
>    -- Performing Test have_mfpu_neon - Success
>    -- Performing Test have_mfloat_abi_softfp
>    -- Performing Test have_mfloat_abi_softfp - Success
>    -- Performing Test have_funsafe_math_optimizations
>    -- Performing Test have_funsafe_math_optimizations - Success
>    ...
>    -- Performing Test have_mpopcnt
>    -- Performing Test have_mpopcnt - Success
>
> Note that I'm compiling on a Sandy Bridge Intel processor, so Altivec (PPC), 
> NEON (ARM), and float-ABI (ARM?) aren't available. Also, LLVM 3.0 doesn't 
> support -mpopcnt, and apparently doesn't support -munsafe_math_optimizations. 
> And yet, the detections are showing "Success". Sure enough, when I "make", 
> volk bombs out with:
>
>    cc1: error: unrecognized command line option "-mfpu=neon"
>    cc1: error: unrecognized command line option "-mfloat-abi=softfp"
>
> Examining build/volk/CMakeFiles/CMakeOutput.log, the command line executed 
> for detecting the Altivec flag is:
>
>    /usr/bin/c++    -Dhave_maltivec   -maltivec -o 
> CMakeFiles/cmTryCompileExec.dir/src.cxx.o -c 
> /Users/jboone/tmp/gnuradio/build/volk/CMakeFiles/CMakeTmp/src.cxx
>
> Creating my own src.cxx ("int main() { return 0; }") and trying this out 
> yields:
>
>    clang: warning: argument unused during compilation: '-maltivec'
>
> Clang warns about the unrecognized flag, but CMake doesn't consider it an 
> error. Why? Examining volk/lib/CMakeLists.txt, I see that CMake's 
> CheckCXXCompilerFlag is included, and CHECK_CXX_COMPILER_FLAG is called with 
> each flag to test.
>
> Looking at CMake's CHECK_CXX_COMPILER_FLAG, I see it tests the compiler's 
> stdout (or stderr?) against these regular expressions:
>
>     # Some compilers do not fail with a bad flag
>     FAIL_REGEX "unrecognized .*option"                     # GNU
>     FAIL_REGEX "unknown .*option"                          # Clang
>     FAIL_REGEX "ignoring unknown option"                   # MSVC
>     FAIL_REGEX "warning D9002"                             # MSVC, any lang
>     FAIL_REGEX "[Uu]nknown option"                         # HP
>     FAIL_REGEX "[Ww]arning: [Oo]ption"                     # SunPro
>     FAIL_REGEX "command option .* is not recognized"       # XL
>     FAIL_REGEX "not supported in this configuration; ignored"       # AIX
>     FAIL_REGEX "File with unknown suffix passed to linker" # PGI
>
> None of these regex tests will catch the Clang warning above.
>
> My first inclination was to see if I could set a Clang flag (like "-Werror") 
> to cause unused arguments to produce an error. But I can't tell how to do 
> that with CMake. If somebody knows how to do this from within the GNU Radio 
> sources, that would be ideal. Instead, I patched CMake as follows:
>
> --- /opt/local/share/cmake-2.8/Modules/CheckCXXCompilerFlag.cmake.orig  
> 2012-05-04 23:41:16.000000000 -0700
> +++ /opt/local/share/cmake-2.8/Modules/CheckCXXCompilerFlag.cmake       
> 2012-05-04 23:43:19.000000000 -0700
> @@ -29,6 +29,7 @@
>      # Some compilers do not fail with a bad flag
>      FAIL_REGEX "unrecognized .*option"                     # GNU
>      FAIL_REGEX "unknown .*option"                          # Clang
> +     FAIL_REGEX "argument unused during compilation"        # Clang
>      FAIL_REGEX "ignoring unknown option"                   # MSVC
>      FAIL_REGEX "warning D9002"                             # MSVC, any lang
>      FAIL_REGEX "[Uu]nknown option"                         # HP
>
> This results in more sensible flag detection for ORC during cmake:
>
>    -- Performing Test have_maltivec
>    -- Performing Test have_maltivec - Failed
>    -- Performing Test have_mfpu_neon
>    -- Performing Test have_mfpu_neon - Failed
>    -- Performing Test have_mfloat_abi_softfp
>    -- Performing Test have_mfloat_abi_softfp - Failed
>    -- Performing Test have_funsafe_math_optimizations
>    -- Performing Test have_funsafe_math_optimizations - Failed
>    ...
>    -- Performing Test have_mpopcnt
>    -- Performing Test have_mpopcnt - Failed
>    ...
>    -- GCC missing xgetbv, Overruled arch avx
>    -- Check size of void*[8]
>    -- Check size of void*[8] - done
>    -- CPU width is 64 bits, Overruled arch 32
>    -- Available architectures: 
> generic;64;3dnow;abm;mmx;sse;sse2;orc;norc;sse3;ssse3;sse4_a;sse4_1;sse4_2
>    -- Available machines: 
> generic_orc;sse2_64_orc;sse3_64_orc;ssse3_64_orc;sse4_1_64_orc
>
> ...and more importantly, I can compile GNU Radio and run gnuradio-companion.
>
> I see some similar patch history for CMake that suggests my fix is a good one:
>
>    http://public.kitware.com/Bug/view.php?id=12394
>
> I looked at the CMake repository, and it looks like they haven't yet 
> identified or fixed this problem:
>
>    
> http://cmake.org/gitweb?p=cmake.git;a=blob;f=Modules/CheckCXXCompilerFlag.cmake;hb=HEAD
>
> So I'll submit a patch to CMake. Of course, until a new CMake is released, 
> MacOS builders will run into this problem. So if anybody familiar with CMake 
> knows a way to fix this from GNU Radio, that would be splendid!
>
>        - Jared

Hi Jared,
Thanks for the information and reporting this. Obviously, this would
be a cmake patch issue, not ours, but hopefully helpful for people
working with GNU Radio in the same environment. Glad to hear you got
things working, though!

Tom

_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to