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