Fix some `CMAKE_REQUIRED_FLAGS` stuff (#811)
Summary: This fixes two issues related to CMAKE_REQUIRED_FLAGS ---- CMAKE_REQUIRED_FLAGS, unlike the other CMAKE_REQUIRED_* variables, is a string, not a list. A list with more than one item in CMAKE_REQUIRED_FLAGS results in a semicolon showing up in the middle of the command line for at least check_symbol_exists and check_type_size calls, prematurely terminating the compilation command and resulting in potentially incorrect CMake test failures. For example, CMake fails to determine the size of __int128 on macOS 10.13.3, with Apple Clang 9 (clang-900.0.39.2), even though __int128 is supported for this platform, as the following C program int main() { __int128 i; } compiles successfully with the command "clang test.c". CMake fails to compile a program with __int128 for an entirely different reason: Building CXX object CMakeFiles/cmTC_d7e3f.dir/INT128_SIZE.cpp.o /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DGFLAGS_IS_A_DLL=0 -isystem /usr/local/include -I/usr/local/opt/openssl@1.1/include -fsanitize=address,undefined -std=gnu++14;-Werror=unknown-warning-option -o CMakeFiles/cmTC_d7e3f.dir/INT128_SIZE.cpp.o -c /Users/awang/code/CRES/scc-analysis/build-debug/CMakeFiles/CheckTypeSize/INT128_SIZE.cpp clang: error: no input files /bin/sh: -Werror=unknown-warning-option: command not found make[1]: *** [CMakeFiles/cmTC_d7e3f.dir/INT128_SIZE.cpp.o] Error 127 make: *** [cmTC_d7e3f/fast] Error 2 Using set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} <new_flag>") avoids this problem. ---- CMAKE_REQUIRED_FLAGS is given to both C and C++ compiler invocations. The C++-specific flag -std=gnu++14 causes compilation to fail on Apple LLVM 9.1.0 (clang-902.0.39.2) with errors along the lines of: Building C object CMakeFiles/cmTC_af532.dir/CheckSymbolExists.c.o /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -DGFLAGS_IS_A_DLL=0 -isystem /usr/local/include -I/usr/local/opt/openssl@1.1/include -std=gnu++14 -o CMakeFiles/cmTC_af532.dir/CheckSymbolExists.c.o -c /Users/awang/code/CRES/scc-analysis/build-debug/CMakeFiles/CMakeTmp/CheckSymbolExists.c error: invalid argument '-std=gnu++14' not allowed with 'C/ObjC' make[1]: *** [CMakeFiles/cmTC_af532.dir/CheckSymbolExists.c.o] Error 1 make: *** [cmTC_af532/fast] Error 2 The affected functions are: - pthread_atfork - memrchr - preadv - pwritev - clock_gettime - cplus_demangle_v3_callback - malloc_usable_size Of these, only pthread_atfork and clock_gettime were detected as being absent when they were actually present. The failure to correctly identify the presence of pthread_atfork, at least, can cause Folly to fail to build on macOS because Folly requires pthread_atfork for macOS but thinks it is absent due to the failed test. Closes https://github.com/facebook/folly/pull/811 Reviewed By: simpkins Differential Revision: D7502576 Pulled By: yfeldblum fbshipit-source-id: a508e432e460cf5492e5c74da7c8b1190ec923a3
Showing
Please register or sign in to comment