xref: /aosp_15_r20/external/clang/tools/driver/CMakeLists.txt (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Liset( LLVM_LINK_COMPONENTS
2*67e74705SXin Li  ${LLVM_TARGETS_TO_BUILD}
3*67e74705SXin Li  Analysis
4*67e74705SXin Li  CodeGen
5*67e74705SXin Li  Core
6*67e74705SXin Li  IPO
7*67e74705SXin Li  InstCombine
8*67e74705SXin Li  Instrumentation
9*67e74705SXin Li  MC
10*67e74705SXin Li  MCParser
11*67e74705SXin Li  ObjCARCOpts
12*67e74705SXin Li  Option
13*67e74705SXin Li  ScalarOpts
14*67e74705SXin Li  Support
15*67e74705SXin Li  TransformUtils
16*67e74705SXin Li  Vectorize
17*67e74705SXin Li  )
18*67e74705SXin Li
19*67e74705SXin Lioption(CLANG_PLUGIN_SUPPORT "Build clang with plugin support" ON)
20*67e74705SXin Li
21*67e74705SXin Li# Support plugins. This must be before add_clang_executable as it reads
22*67e74705SXin Li# LLVM_NO_DEAD_STRIP.
23*67e74705SXin Liif(CLANG_PLUGIN_SUPPORT)
24*67e74705SXin Li  set(LLVM_NO_DEAD_STRIP 1)
25*67e74705SXin Liendif()
26*67e74705SXin Li
27*67e74705SXin Liadd_clang_tool(clang
28*67e74705SXin Li  driver.cpp
29*67e74705SXin Li  cc1_main.cpp
30*67e74705SXin Li  cc1as_main.cpp
31*67e74705SXin Li  )
32*67e74705SXin Li
33*67e74705SXin Litarget_link_libraries(clang
34*67e74705SXin Li  clangBasic
35*67e74705SXin Li  clangCodeGen
36*67e74705SXin Li  clangDriver
37*67e74705SXin Li  clangFrontend
38*67e74705SXin Li  clangFrontendTool
39*67e74705SXin Li  )
40*67e74705SXin Li
41*67e74705SXin Liif(WIN32 AND NOT CYGWIN)
42*67e74705SXin Li  # Prevent versioning if the buildhost is targeting for Win32.
43*67e74705SXin Lielse()
44*67e74705SXin Li  set_target_properties(clang PROPERTIES VERSION ${CLANG_EXECUTABLE_VERSION})
45*67e74705SXin Liendif()
46*67e74705SXin Li
47*67e74705SXin Li# Support plugins.
48*67e74705SXin Liif(CLANG_PLUGIN_SUPPORT)
49*67e74705SXin Li  export_executable_symbols(clang)
50*67e74705SXin Liendif()
51*67e74705SXin Li
52*67e74705SXin Liadd_dependencies(clang clang-headers)
53*67e74705SXin Li
54*67e74705SXin Liif(NOT CLANG_LINKS_TO_CREATE)
55*67e74705SXin Li  set(CLANG_LINKS_TO_CREATE clang++ clang-cl)
56*67e74705SXin Li
57*67e74705SXin Li  if (WIN32)
58*67e74705SXin Li    list(APPEND CLANG_LINKS_TO_CREATE ../msbuild-bin/cl)
59*67e74705SXin Li  endif()
60*67e74705SXin Liendif()
61*67e74705SXin Li
62*67e74705SXin Liforeach(link ${CLANG_LINKS_TO_CREATE})
63*67e74705SXin Li  add_clang_symlink(${link} clang)
64*67e74705SXin Liendforeach()
65*67e74705SXin Li
66*67e74705SXin Li# Configure plist creation for OS X.
67*67e74705SXin Liset (TOOL_INFO_PLIST "Info.plist" CACHE STRING "Plist name")
68*67e74705SXin Liif (APPLE)
69*67e74705SXin Li  if (CLANG_VENDOR)
70*67e74705SXin Li    set(TOOL_INFO_NAME "${CLANG_VENDOR} clang")
71*67e74705SXin Li  else()
72*67e74705SXin Li    set(TOOL_INFO_NAME "clang")
73*67e74705SXin Li  endif()
74*67e74705SXin Li
75*67e74705SXin Li  set(TOOL_INFO_UTI "${CLANG_VENDOR_UTI}")
76*67e74705SXin Li  set(TOOL_INFO_VERSION "${CLANG_VERSION}")
77*67e74705SXin Li  set(TOOL_INFO_BUILD_VERSION "${LLVM_MAJOR_VERSION}.${LLVM_MINOR_VERSION}")
78*67e74705SXin Li
79*67e74705SXin Li  set(TOOL_INFO_PLIST_OUT "${CMAKE_CURRENT_BINARY_DIR}/${TOOL_INFO_PLIST}")
80*67e74705SXin Li  target_link_libraries(clang
81*67e74705SXin Li    "-Wl,-sectcreate,__TEXT,__info_plist,${TOOL_INFO_PLIST_OUT}")
82*67e74705SXin Li  configure_file("${TOOL_INFO_PLIST}.in" "${TOOL_INFO_PLIST_OUT}" @ONLY)
83*67e74705SXin Li
84*67e74705SXin Li  set(TOOL_INFO_UTI)
85*67e74705SXin Li  set(TOOL_INFO_NAME)
86*67e74705SXin Li  set(TOOL_INFO_VERSION)
87*67e74705SXin Li  set(TOOL_INFO_BUILD_VERSION)
88*67e74705SXin Liendif()
89*67e74705SXin Li
90*67e74705SXin Li# the linker -order_file flag is only supported by ld64
91*67e74705SXin Liif(LD64_EXECUTABLE AND CLANG_ORDER_FILE)
92*67e74705SXin Li  include(CMakePushCheckState)
93*67e74705SXin Li
94*67e74705SXin Li  function(check_linker_flag flag out_var)
95*67e74705SXin Li    cmake_push_check_state()
96*67e74705SXin Li    set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${flag}")
97*67e74705SXin Li    check_cxx_compiler_flag("" ${out_var})
98*67e74705SXin Li    cmake_pop_check_state()
99*67e74705SXin Li  endfunction()
100*67e74705SXin Li
101*67e74705SXin Li  # This is a test to ensure the actual order file works with the linker.
102*67e74705SXin Li  check_linker_flag("-Wl,-order_file,${CLANG_ORDER_FILE}"
103*67e74705SXin Li    LINKER_ORDER_FILE_WORKS)
104*67e74705SXin Li
105*67e74705SXin Li  if(LINKER_ORDER_FILE_WORKS)
106*67e74705SXin Li    target_link_libraries(clang "-Wl,-order_file,${CLANG_ORDER_FILE}")
107*67e74705SXin Li    set_target_properties(clang PROPERTIES LINK_DEPENDS ${CLANG_ORDER_FILE})
108*67e74705SXin Li  endif()
109*67e74705SXin Liendif()
110*67e74705SXin Li
111*67e74705SXin Liif(WITH_POLLY AND LINK_POLLY_INTO_TOOLS)
112*67e74705SXin Li  target_link_libraries(clang Polly)
113*67e74705SXin Li  if(POLLY_LINK_LIBS)
114*67e74705SXin Li    foreach(lib ${POLLY_LINK_LIBS})
115*67e74705SXin Li      target_link_libraries(clang ${lib})
116*67e74705SXin Li    endforeach(lib)
117*67e74705SXin Li  endif(POLLY_LINK_LIBS)
118*67e74705SXin Liendif(WITH_POLLY AND LINK_POLLY_INTO_TOOLS)
119