Index: compiler-rt/cmake/Modules/AddCompilerRT.cmake =================================================================== --- compiler-rt/cmake/Modules/AddCompilerRT.cmake +++ compiler-rt/cmake/Modules/AddCompilerRT.cmake @@ -274,12 +274,37 @@ endif() if(type STREQUAL "OBJECT") - string(TOUPPER ${CMAKE_BUILD_TYPE} config) - get_property(cflags SOURCE ${sources_${libname}} PROPERTY COMPILE_FLAGS) - separate_arguments(cflags) + # TODO: CMake 3.4 doesn't allow installing library objects so we have to build them manually. + # When LLVM migrates to LLVM 3.9, we can use add_library just like for other library types. + if(CMAKE_C_COMPILER_ID MATCHES Clang AND CMAKE_C_COMPILER_TARGET) + list(APPEND extra_cflags_${libname} "-target ${CMAKE_C_COMPILER_TARGET}") + endif() + string(REPLACE ";" " " extra_cflags_${libname} "${extra_cflags_${libname}}") + string(REGEX MATCHALL "<[A-Za-z0-9_]*>" substitutions + ${CMAKE_C_COMPILE_OBJECT}) + set(compile_command_${libname} "${CMAKE_C_COMPILE_OBJECT}") + foreach(substitution ${substitutions}) + if(substitution STREQUAL "") + string(REPLACE "" "${CMAKE_C_COMPILER}" + compile_command_${libname} ${compile_command_${libname}}) + elseif(substitution STREQUAL "") + string(REPLACE "" "${output_dir_${libname}}/${output_name_${libname}}.o" + compile_command_${libname} ${compile_command_${libname}}) + elseif(substitution STREQUAL "") + string(REPLACE "" "${sources_${libname}}" + compile_command_${libname} ${compile_command_${libname}}) + elseif(substitution STREQUAL "") + string(REPLACE "" "${CMAKE_C_FLAGS} ${extra_cflags_${libname}}" + compile_command_${libname} ${compile_command_${libname}}) + else() + string(REPLACE "${substitution}" "" compile_command_${libname} + ${compile_command_${libname}}) + endif() + endforeach() + string(REPLACE " " ";" compile_command_${libname} "${compile_command_${libname}}") add_custom_command( OUTPUT ${output_dir_${libname}}/${output_name_${libname}}.o - COMMAND ${CMAKE_C_COMPILER} ${sources_${libname}} ${cflags} ${extra_cflags_${libname}} -c -o ${output_dir_${libname}}/${output_name_${libname}}.o + COMMAND ${compile_command_${libname}} DEPENDS ${sources_${libname}} COMMENT "Building C object ${output_name_${libname}}.o") add_custom_target(${libname} DEPENDS ${output_dir_${libname}}/${output_name_${libname}}.o)