diff options
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/Modules/CompilerRTUtils.cmake | 17 | ||||
-rw-r--r-- | cmake/config-ix.cmake | 7 |
2 files changed, 8 insertions, 16 deletions
diff --git a/cmake/Modules/CompilerRTUtils.cmake b/cmake/Modules/CompilerRTUtils.cmake index ee1644ba6..f567202fa 100644 --- a/cmake/Modules/CompilerRTUtils.cmake +++ b/cmake/Modules/CompilerRTUtils.cmake @@ -125,19 +125,6 @@ endfunction() # 2) simple file can be successfully built. # If successful, saves target flags for this architecture. macro(test_target_arch arch def) - string(RANDOM TARGET_${arch}_NAME) - set(TARGET_${arch}_NAME "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cmTC_${TARGET_${arch}_NAME}.dir") - file(MAKE_DIRECTORY ${TARGET_${arch}_NAME}) - if(SANITIZER_CXX_ABI_INTREE) - # We're using in tree C++ ABI, only test the C compiler for now. - set(TARGET_${arch}_FILENAME "${TARGET_${arch}_NAME}/CheckTarget.c") - file(WRITE "${TARGET_${arch}_FILENAME}" "#include <stdlib.h>\nint main() { (void)malloc(sizeof(int)); return 0; }\n") - else() - # We're using the system C++ ABI, test that we can build C++ programs. - set(TARGET_${arch}_FILENAME "${TARGET_${arch}_NAME}/CheckTarget.cpp") - file(WRITE "${TARGET_${arch}_FILENAME}" "#include <new>\nint main() { (void) new int; return 0; }\n") - endif() - set(TARGET_${arch}_CFLAGS ${ARGN}) set(TARGET_${arch}_LINK_FLAGS ${ARGN}) set(argstring "") @@ -157,7 +144,7 @@ macro(test_target_arch arch def) endif() set(SAVED_CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS}) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${argstring}") - try_compile(CAN_TARGET_${arch} ${CMAKE_BINARY_DIR} ${TARGET_${arch}_FILENAME} + try_compile(CAN_TARGET_${arch} ${CMAKE_BINARY_DIR} ${SIMPLE_SOURCE} COMPILE_DEFINITIONS "${TARGET_${arch}_CFLAGS} ${FLAG_NO_EXCEPTIONS}" OUTPUT_VARIABLE TARGET_${arch}_OUTPUT) set(CMAKE_EXE_LINKER_FLAGS ${SAVED_CMAKE_EXE_LINKER_FLAGS}) @@ -170,8 +157,6 @@ macro(test_target_arch arch def) # Bail out if we cannot target the architecture we plan to test. message(FATAL_ERROR "Cannot compile for ${arch}:\n${TARGET_${arch}_OUTPUT}") endif() - - file(REMOVE_RECURSE ${TARGET_${arch}_NAME}) endmacro() macro(detect_target_arch) diff --git a/cmake/config-ix.cmake b/cmake/config-ix.cmake index d7e830f8d..e6b775d59 100644 --- a/cmake/config-ix.cmake +++ b/cmake/config-ix.cmake @@ -123,6 +123,13 @@ endif() # List of all architectures we can target. set(COMPILER_RT_SUPPORTED_ARCH) +# Try to compile a very simple source file to ensure we can target the given +# platform. We use the results of these tests to build only the various target +# runtime libraries supported by our current compilers cross-compiling +# abilities. +set(SIMPLE_SOURCE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/simple.cc) +file(WRITE ${SIMPLE_SOURCE} "#include <stdlib.h>\n#include <stdio.h>\nint main() { printf(\"hello, world\"); }\n") + # Detect whether the current target platform is 32-bit or 64-bit, and setup # the correct commandline flags needed to attempt to target 32-bit and 64-bit. if (NOT CMAKE_SIZEOF_VOID_P EQUAL 4 AND |