]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tools/driver/CMakeLists.txt
Vendor import of clang trunk r338150:
[FreeBSD/FreeBSD.git] / tools / driver / CMakeLists.txt
1 set( LLVM_LINK_COMPONENTS
2   ${LLVM_TARGETS_TO_BUILD}
3   Analysis
4   CodeGen
5   Core
6   IPO
7   AggressiveInstCombine
8   InstCombine
9   Instrumentation
10   MC
11   MCParser
12   ObjCARCOpts
13   Option
14   ScalarOpts
15   Support
16   TransformUtils
17   Vectorize
18   )
19
20 option(CLANG_PLUGIN_SUPPORT "Build clang with plugin support" ON)
21
22 # Support plugins. This must be before add_clang_executable as it reads
23 # LLVM_NO_DEAD_STRIP.
24 if(CLANG_PLUGIN_SUPPORT)
25   set(LLVM_NO_DEAD_STRIP 1)
26 endif()
27
28 if(NOT CLANG_BUILT_STANDALONE)
29   set(tablegen_deps intrinsics_gen)
30 endif()
31
32 add_clang_tool(clang
33   driver.cpp
34   cc1_main.cpp
35   cc1as_main.cpp
36   cc1gen_reproducer_main.cpp
37
38   DEPENDS
39   ${tablegen_deps}
40   )
41
42 target_link_libraries(clang
43   PRIVATE
44   clangBasic
45   clangCodeGen
46   clangDriver
47   clangFrontend
48   clangFrontendTool
49   )
50
51 if(WIN32 AND NOT CYGWIN)
52   # Prevent versioning if the buildhost is targeting for Win32.
53 else()
54   set_target_properties(clang PROPERTIES VERSION ${CLANG_EXECUTABLE_VERSION})
55 endif()
56
57 # Support plugins.
58 if(CLANG_PLUGIN_SUPPORT)
59   export_executable_symbols(clang)
60 endif()
61
62 add_dependencies(clang clang-headers)
63
64 if(NOT CLANG_LINKS_TO_CREATE)
65   set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp)
66 endif()
67
68 foreach(link ${CLANG_LINKS_TO_CREATE})
69   add_clang_symlink(${link} clang)
70 endforeach()
71
72 # Configure plist creation for OS X.
73 set (TOOL_INFO_PLIST "Info.plist" CACHE STRING "Plist name")
74 if (APPLE)
75   if (CLANG_VENDOR)
76     set(TOOL_INFO_NAME "${CLANG_VENDOR} clang")
77   else()
78     set(TOOL_INFO_NAME "clang")
79   endif()
80
81   set(TOOL_INFO_UTI "${CLANG_VENDOR_UTI}")
82   set(TOOL_INFO_VERSION "${CLANG_VERSION}")
83   set(TOOL_INFO_BUILD_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}")
84
85   set(TOOL_INFO_PLIST_OUT "${CMAKE_CURRENT_BINARY_DIR}/${TOOL_INFO_PLIST}")
86   target_link_libraries(clang
87     PRIVATE
88     "-Wl,-sectcreate,__TEXT,__info_plist,${TOOL_INFO_PLIST_OUT}")
89   configure_file("${TOOL_INFO_PLIST}.in" "${TOOL_INFO_PLIST_OUT}" @ONLY)
90
91   set(TOOL_INFO_UTI)
92   set(TOOL_INFO_NAME)
93   set(TOOL_INFO_VERSION)
94   set(TOOL_INFO_BUILD_VERSION)
95 endif()
96
97 if(CLANG_ORDER_FILE AND
98     (LLVM_LINKER_IS_LD64 OR LLVM_LINKER_IS_GOLD OR LLVM_LINKER_IS_LLD))
99   include(CheckLinkerFlag)
100
101   if (LLVM_LINKER_IS_LD64)
102     set(LINKER_ORDER_FILE_OPTION "-Wl,-order_file,${CLANG_ORDER_FILE}")
103   elseif (LLVM_LINKER_IS_GOLD)
104     set(LINKER_ORDER_FILE_OPTION "-Wl,--section-ordering-file,${CLANG_ORDER_FILE}")
105   elseif (LLVM_LINKER_IS_LLD)
106     set(LINKER_ORDER_FILE_OPTION "-Wl,--symbol-ordering-file,${CLANG_ORDER_FILE}")
107   endif()
108
109   # This is a test to ensure the actual order file works with the linker.
110   check_linker_flag(${LINKER_ORDER_FILE_OPTION} LINKER_ORDER_FILE_WORKS)
111
112   # Passing an empty order file disables some linker layout optimizations.
113   # To work around this and enable workflows for re-linking when the order file
114   # changes we check during configuration if the file is empty, and make it a
115   # configuration dependency.
116   file(READ ${CLANG_ORDER_FILE} ORDER_FILE LIMIT 20)
117   if("${ORDER_FILE}" STREQUAL "\n")
118     set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CLANG_ORDER_FILE})
119   elseif(LINKER_ORDER_FILE_WORKS)
120     target_link_libraries(clang PRIVATE ${LINKER_ORDER_FILE_OPTION})
121     set_target_properties(clang PROPERTIES LINK_DEPENDS ${CLANG_ORDER_FILE})
122   endif()
123 endif()
124
125 if(WITH_POLLY AND LINK_POLLY_INTO_TOOLS)
126   target_link_libraries(clang PRIVATE Polly)
127 endif(WITH_POLLY AND LINK_POLLY_INTO_TOOLS)