• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  # On Windows, CMAKE_*_FLAGS are built for MSVC but we use the GCC clang.exe
21  # which doesn't support flags starting with "/smth". Replace those with
22  # "-smth" equivalents.
23  if(MSVC)
24    string(REGEX REPLACE "^/" "-" global_flags "${global_flags}")
25    string(REPLACE ";/" ";-" global_flags "${global_flags}")
26  endif()
27  # Ignore unknown warnings. CMAKE_CXX_FLAGS may contain GCC-specific options
28  # which are not supported by Clang.
29  list(APPEND global_flags -Wno-unknown-warning-option)
30  set(compile_flags ${global_flags} ${SOURCE_CFLAGS})
31  add_custom_command(
32    OUTPUT ${object_file}
33    COMMAND ${COMPILER_RT_TEST_COMPILER} ${compile_flags} -c
34            -o "${object_file}"
35            ${source_rpath}
36    MAIN_DEPENDENCY ${source}
37    DEPENDS ${SOURCE_DEPS})
38endmacro()
39