1 set( LLVM_LINK_COMPONENTS
2 ${LLVM_TARGETS_TO_BUILD}
22 if(CLANG_PLUGIN_SUPPORT)
23 set(support_plugins SUPPORT_PLUGINS)
30 cc1gen_reproducer_main.cpp
38 clang_target_link_libraries(clang
48 if(WIN32 AND NOT CYGWIN)
49 # Prevent versioning if the buildhost is targeting for Win32.
51 set_target_properties(clang PROPERTIES VERSION ${CLANG_EXECUTABLE_VERSION})
55 if(CLANG_PLUGIN_SUPPORT)
56 export_executable_symbols_for_plugins(clang)
59 add_dependencies(clang clang-resource-headers)
61 if(NOT CLANG_LINKS_TO_CREATE)
62 set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp)
65 if (CLANG_ENABLE_HLSL)
66 set(HLSL_LINK clang-dxc)
69 foreach(link ${CLANG_LINKS_TO_CREATE} ${HLSL_LINK})
70 add_clang_symlink(${link} clang)
73 # Configure plist creation for OS X.
74 set (TOOL_INFO_PLIST "Info.plist" CACHE STRING "Plist name")
77 set(TOOL_INFO_NAME "${CLANG_VENDOR} clang")
79 set(TOOL_INFO_NAME "clang")
82 set(TOOL_INFO_UTI "${CLANG_VENDOR_UTI}")
83 set(TOOL_INFO_VERSION "${CLANG_VERSION}")
84 set(TOOL_INFO_BUILD_VERSION "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}")
86 set(TOOL_INFO_PLIST_OUT "${CMAKE_CURRENT_BINARY_DIR}/${TOOL_INFO_PLIST}")
88 if(LLVM_TOOL_LLVM_DRIVER_BUILD AND clang IN_LIST LLVM_DRIVER_TOOLS)
89 set(TARGET_NAME llvm-driver)
91 set(TARGET_NAME clang)
94 target_link_libraries(${TARGET_NAME}
96 "-Wl,-sectcreate,__TEXT,__info_plist,\"${TOOL_INFO_PLIST_OUT}\"")
97 configure_file("${TOOL_INFO_PLIST}.in" "${TOOL_INFO_PLIST_OUT}" @ONLY)
101 set(TOOL_INFO_VERSION)
102 set(TOOL_INFO_BUILD_VERSION)
105 if(CLANG_ORDER_FILE AND
106 (LLVM_LINKER_IS_LD64 OR LLVM_LINKER_IS_GOLD OR LLVM_LINKER_IS_LLD))
107 include(LLVMCheckLinkerFlag)
109 if (LLVM_LINKER_IS_LD64 OR (LLVM_LINKER_IS_LLD AND APPLE))
110 set(LINKER_ORDER_FILE_OPTION "-Wl,-order_file,${CLANG_ORDER_FILE}")
111 elseif (LLVM_LINKER_IS_GOLD)
112 set(LINKER_ORDER_FILE_OPTION "-Wl,--section-ordering-file,${CLANG_ORDER_FILE}")
113 elseif (LLVM_LINKER_IS_LLD)
114 set(LINKER_ORDER_FILE_OPTION "-Wl,--symbol-ordering-file,${CLANG_ORDER_FILE}")
117 # This is a test to ensure the actual order file works with the linker.
118 llvm_check_linker_flag(CXX ${LINKER_ORDER_FILE_OPTION} LINKER_ORDER_FILE_WORKS)
120 # Passing an empty order file disables some linker layout optimizations.
121 # To work around this and enable workflows for re-linking when the order file
122 # changes we check during configuration if the file is empty, and make it a
123 # configuration dependency.
124 file(READ ${CLANG_ORDER_FILE} ORDER_FILE LIMIT 20)
125 if("${ORDER_FILE}" STREQUAL "\n")
126 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CLANG_ORDER_FILE})
127 elseif(LINKER_ORDER_FILE_WORKS)
128 target_link_libraries(clang PRIVATE ${LINKER_ORDER_FILE_OPTION})
129 set_target_properties(clang PROPERTIES LINK_DEPENDS ${CLANG_ORDER_FILE})