1include(LLVMParseArguments) 2 3# Compile a source into an object file with COMPILER_RT_TEST_COMPILER using 4# a provided compile flags and dependenices. 5# clang_compile(<object> <source> 6# CFLAGS <list of compile flags> 7# DEPS <list of dependencies>) 8macro(clang_compile object_file source) 9 parse_arguments(SOURCE "CFLAGS;DEPS" "" ${ARGN}) 10 get_filename_component(source_rpath ${source} REALPATH) 11 if(NOT COMPILER_RT_STANDALONE_BUILD) 12 list(APPEND SOURCE_DEPS clang) 13 endif() 14 string(REGEX MATCH "[.](cc|cpp)$" is_cxx ${source_rpath}) 15 if(is_cxx) 16 string(REPLACE " " ";" global_flags "${CMAKE_CXX_FLAGS}") 17 else() 18 string(REPLACE " " ";" global_flags "${CMAKE_C_FLAGS}") 19 endif() 20 # Ignore unknown warnings. CMAKE_CXX_FLAGS may contain GCC-specific options 21 # which are not supported by Clang. 22 list(APPEND global_flags -Wno-unknown-warning-option) 23 set(compile_flags ${global_flags} ${SOURCE_CFLAGS}) 24 add_custom_command( 25 OUTPUT ${object_file} 26 COMMAND ${COMPILER_RT_TEST_COMPILER} ${compile_flags} -c -o "${object_file}" 27 ${source_rpath} 28 MAIN_DEPENDENCY ${source} 29 DEPENDS ${SOURCE_DEPS}) 30endmacro() 31