1*58b9f456SAndroid Build Coastguard Workerfunction(find_compiler_rt_library name dest) 2*58b9f456SAndroid Build Coastguard Worker if (NOT DEFINED LIBCXX_COMPILE_FLAGS) 3*58b9f456SAndroid Build Coastguard Worker message(FATAL_ERROR "LIBCXX_COMPILE_FLAGS must be defined when using this function") 4*58b9f456SAndroid Build Coastguard Worker endif() 5*58b9f456SAndroid Build Coastguard Worker set(dest "" PARENT_SCOPE) 6*58b9f456SAndroid Build Coastguard Worker set(CLANG_COMMAND ${CMAKE_CXX_COMPILER} ${LIBCXX_COMPILE_FLAGS} 7*58b9f456SAndroid Build Coastguard Worker "--rtlib=compiler-rt" "--print-libgcc-file-name") 8*58b9f456SAndroid Build Coastguard Worker if (CMAKE_CXX_COMPILER_ID MATCHES Clang AND CMAKE_CXX_COMPILER_TARGET) 9*58b9f456SAndroid Build Coastguard Worker list(APPEND CLANG_COMMAND "--target=${CMAKE_CXX_COMPILER_TARGET}") 10*58b9f456SAndroid Build Coastguard Worker endif() 11*58b9f456SAndroid Build Coastguard Worker get_property(LIBCXX_CXX_FLAGS CACHE CMAKE_CXX_FLAGS PROPERTY VALUE) 12*58b9f456SAndroid Build Coastguard Worker string(REPLACE " " ";" LIBCXX_CXX_FLAGS "${LIBCXX_CXX_FLAGS}") 13*58b9f456SAndroid Build Coastguard Worker list(APPEND CLANG_COMMAND ${LIBCXX_CXX_FLAGS}) 14*58b9f456SAndroid Build Coastguard Worker execute_process( 15*58b9f456SAndroid Build Coastguard Worker COMMAND ${CLANG_COMMAND} 16*58b9f456SAndroid Build Coastguard Worker RESULT_VARIABLE HAD_ERROR 17*58b9f456SAndroid Build Coastguard Worker OUTPUT_VARIABLE LIBRARY_FILE 18*58b9f456SAndroid Build Coastguard Worker ) 19*58b9f456SAndroid Build Coastguard Worker string(STRIP "${LIBRARY_FILE}" LIBRARY_FILE) 20*58b9f456SAndroid Build Coastguard Worker file(TO_CMAKE_PATH "${LIBRARY_FILE}" LIBRARY_FILE) 21*58b9f456SAndroid Build Coastguard Worker string(REPLACE "builtins" "${name}" LIBRARY_FILE "${LIBRARY_FILE}") 22*58b9f456SAndroid Build Coastguard Worker if (NOT HAD_ERROR AND EXISTS "${LIBRARY_FILE}") 23*58b9f456SAndroid Build Coastguard Worker message(STATUS "Found compiler-rt library: ${LIBRARY_FILE}") 24*58b9f456SAndroid Build Coastguard Worker set(${dest} "${LIBRARY_FILE}" PARENT_SCOPE) 25*58b9f456SAndroid Build Coastguard Worker else() 26*58b9f456SAndroid Build Coastguard Worker message(STATUS "Failed to find compiler-rt library") 27*58b9f456SAndroid Build Coastguard Worker endif() 28*58b9f456SAndroid Build Coastguard Workerendfunction() 29*58b9f456SAndroid Build Coastguard Worker 30*58b9f456SAndroid Build Coastguard Workerfunction(find_compiler_rt_dir dest) 31*58b9f456SAndroid Build Coastguard Worker if (NOT DEFINED LIBCXX_COMPILE_FLAGS) 32*58b9f456SAndroid Build Coastguard Worker message(FATAL_ERROR "LIBCXX_COMPILE_FLAGS must be defined when using this function") 33*58b9f456SAndroid Build Coastguard Worker endif() 34*58b9f456SAndroid Build Coastguard Worker set(dest "" PARENT_SCOPE) 35*58b9f456SAndroid Build Coastguard Worker if (APPLE) 36*58b9f456SAndroid Build Coastguard Worker set(CLANG_COMMAND ${CMAKE_CXX_COMPILER} ${LIBCXX_COMPILE_FLAGS} 37*58b9f456SAndroid Build Coastguard Worker "-print-file-name=lib") 38*58b9f456SAndroid Build Coastguard Worker execute_process( 39*58b9f456SAndroid Build Coastguard Worker COMMAND ${CLANG_COMMAND} 40*58b9f456SAndroid Build Coastguard Worker RESULT_VARIABLE HAD_ERROR 41*58b9f456SAndroid Build Coastguard Worker OUTPUT_VARIABLE LIBRARY_DIR 42*58b9f456SAndroid Build Coastguard Worker ) 43*58b9f456SAndroid Build Coastguard Worker string(STRIP "${LIBRARY_DIR}" LIBRARY_DIR) 44*58b9f456SAndroid Build Coastguard Worker file(TO_CMAKE_PATH "${LIBRARY_DIR}" LIBRARY_DIR) 45*58b9f456SAndroid Build Coastguard Worker set(LIBRARY_DIR "${LIBRARY_DIR}/darwin") 46*58b9f456SAndroid Build Coastguard Worker else() 47*58b9f456SAndroid Build Coastguard Worker set(CLANG_COMMAND ${CMAKE_CXX_COMPILER} ${LIBCXX_COMPILE_FLAGS} 48*58b9f456SAndroid Build Coastguard Worker "--rtlib=compiler-rt" "--print-libgcc-file-name") 49*58b9f456SAndroid Build Coastguard Worker execute_process( 50*58b9f456SAndroid Build Coastguard Worker COMMAND ${CLANG_COMMAND} 51*58b9f456SAndroid Build Coastguard Worker RESULT_VARIABLE HAD_ERROR 52*58b9f456SAndroid Build Coastguard Worker OUTPUT_VARIABLE LIBRARY_FILE 53*58b9f456SAndroid Build Coastguard Worker ) 54*58b9f456SAndroid Build Coastguard Worker string(STRIP "${LIBRARY_FILE}" LIBRARY_FILE) 55*58b9f456SAndroid Build Coastguard Worker file(TO_CMAKE_PATH "${LIBRARY_FILE}" LIBRARY_FILE) 56*58b9f456SAndroid Build Coastguard Worker get_filename_component(LIBRARY_DIR "${LIBRARY_FILE}" DIRECTORY) 57*58b9f456SAndroid Build Coastguard Worker endif() 58*58b9f456SAndroid Build Coastguard Worker if (NOT HAD_ERROR AND EXISTS "${LIBRARY_DIR}") 59*58b9f456SAndroid Build Coastguard Worker message(STATUS "Found compiler-rt directory: ${LIBRARY_DIR}") 60*58b9f456SAndroid Build Coastguard Worker set(${dest} "${LIBRARY_DIR}" PARENT_SCOPE) 61*58b9f456SAndroid Build Coastguard Worker else() 62*58b9f456SAndroid Build Coastguard Worker message(STATUS "Failed to find compiler-rt directory") 63*58b9f456SAndroid Build Coastguard Worker endif() 64*58b9f456SAndroid Build Coastguard Workerendfunction() 65