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