1 set( LLVM_LINK_COMPONENTS
2 ${LLVM_TARGETS_TO_BUILD}
20 option(CLANG_PLUGIN_SUPPORT "Build clang with plugin support" ON)
22 # Support plugins. This must be before add_clang_executable as it reads
24 if(CLANG_PLUGIN_SUPPORT)
25 set(LLVM_NO_DEAD_STRIP 1)
28 if(NOT CLANG_BUILT_STANDALONE)
29 set(tablegen_deps intrinsics_gen)
36 cc1gen_reproducer_main.cpp
42 target_link_libraries(clang
51 if(WIN32 AND NOT CYGWIN)
52 # Prevent versioning if the buildhost is targeting for Win32.
54 set_target_properties(clang PROPERTIES VERSION ${CLANG_EXECUTABLE_VERSION})
58 if(CLANG_PLUGIN_SUPPORT)
59 export_executable_symbols(clang)
62 add_dependencies(clang clang-headers)
64 if(NOT CLANG_LINKS_TO_CREATE)
65 set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp)
68 foreach(link ${CLANG_LINKS_TO_CREATE})
69 add_clang_symlink(${link} clang)
72 # Configure plist creation for OS X.
73 set (TOOL_INFO_PLIST "Info.plist" CACHE STRING "Plist name")
76 set(TOOL_INFO_NAME "${CLANG_VENDOR} clang")
78 set(TOOL_INFO_NAME "clang")
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}")
85 set(TOOL_INFO_PLIST_OUT "${CMAKE_CURRENT_BINARY_DIR}/${TOOL_INFO_PLIST}")
86 target_link_libraries(clang
88 "-Wl,-sectcreate,__TEXT,__info_plist,${TOOL_INFO_PLIST_OUT}")
89 configure_file("${TOOL_INFO_PLIST}.in" "${TOOL_INFO_PLIST_OUT}" @ONLY)
93 set(TOOL_INFO_VERSION)
94 set(TOOL_INFO_BUILD_VERSION)
97 if(CLANG_ORDER_FILE AND
98 (LLVM_LINKER_IS_LD64 OR LLVM_LINKER_IS_GOLD OR LLVM_LINKER_IS_LLD))
99 include(CheckLinkerFlag)
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}")
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)
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})
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)