1set( 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 TargetParser 17 TransformUtils 18 Vectorize 19 ) 20 21# Support plugins. 22if(CLANG_PLUGIN_SUPPORT) 23 set(support_plugins SUPPORT_PLUGINS) 24endif() 25 26add_clang_tool(clang 27 driver.cpp 28 cc1_main.cpp 29 cc1as_main.cpp 30 cc1gen_reproducer_main.cpp 31 32 DEPENDS 33 intrinsics_gen 34 ${support_plugins} 35 GENERATE_DRIVER 36 ) 37 38clang_target_link_libraries(clang 39 PRIVATE 40 clangBasic 41 clangCodeGen 42 clangDriver 43 clangFrontend 44 clangFrontendTool 45 clangSerialization 46 ) 47 48if(WIN32 AND NOT CYGWIN) 49 # Prevent versioning if the buildhost is targeting for Win32. 50else() 51 set_target_properties(clang PROPERTIES VERSION ${CLANG_EXECUTABLE_VERSION}) 52endif() 53 54# Support plugins. 55if(CLANG_PLUGIN_SUPPORT) 56 export_executable_symbols_for_plugins(clang) 57endif() 58 59add_dependencies(clang clang-resource-headers) 60 61if(NOT CLANG_LINKS_TO_CREATE) 62 set(CLANG_LINKS_TO_CREATE clang++ clang-cl clang-cpp) 63endif() 64 65if (CLANG_ENABLE_HLSL) 66 set(HLSL_LINK clang-dxc) 67endif() 68 69foreach(link ${CLANG_LINKS_TO_CREATE} ${HLSL_LINK}) 70 add_clang_symlink(${link} clang) 71endforeach() 72 73# Configure plist creation for OS X. 74set (TOOL_INFO_PLIST "Info.plist" CACHE STRING "Plist name") 75if (APPLE) 76 if (CLANG_VENDOR) 77 set(TOOL_INFO_NAME "${CLANG_VENDOR} clang") 78 else() 79 set(TOOL_INFO_NAME "clang") 80 endif() 81 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}") 85 86 set(TOOL_INFO_PLIST_OUT "${CMAKE_CURRENT_BINARY_DIR}/${TOOL_INFO_PLIST}") 87 target_link_libraries(clang 88 PRIVATE 89 "-Wl,-sectcreate,__TEXT,__info_plist,\"${TOOL_INFO_PLIST_OUT}\"") 90 configure_file("${TOOL_INFO_PLIST}.in" "${TOOL_INFO_PLIST_OUT}" @ONLY) 91 92 set(TOOL_INFO_UTI) 93 set(TOOL_INFO_NAME) 94 set(TOOL_INFO_VERSION) 95 set(TOOL_INFO_BUILD_VERSION) 96endif() 97 98if(CLANG_ORDER_FILE AND 99 (LLVM_LINKER_IS_LD64 OR LLVM_LINKER_IS_GOLD OR LLVM_LINKER_IS_LLD)) 100 include(LLVMCheckLinkerFlag) 101 102 if (LLVM_LINKER_IS_LD64 OR (LLVM_LINKER_IS_LLD AND APPLE)) 103 set(LINKER_ORDER_FILE_OPTION "-Wl,-order_file,${CLANG_ORDER_FILE}") 104 elseif (LLVM_LINKER_IS_GOLD) 105 set(LINKER_ORDER_FILE_OPTION "-Wl,--section-ordering-file,${CLANG_ORDER_FILE}") 106 elseif (LLVM_LINKER_IS_LLD) 107 set(LINKER_ORDER_FILE_OPTION "-Wl,--symbol-ordering-file,${CLANG_ORDER_FILE}") 108 endif() 109 110 # This is a test to ensure the actual order file works with the linker. 111 llvm_check_linker_flag(CXX ${LINKER_ORDER_FILE_OPTION} LINKER_ORDER_FILE_WORKS) 112 113 # Passing an empty order file disables some linker layout optimizations. 114 # To work around this and enable workflows for re-linking when the order file 115 # changes we check during configuration if the file is empty, and make it a 116 # configuration dependency. 117 file(READ ${CLANG_ORDER_FILE} ORDER_FILE LIMIT 20) 118 if("${ORDER_FILE}" STREQUAL "\n") 119 set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${CLANG_ORDER_FILE}) 120 elseif(LINKER_ORDER_FILE_WORKS) 121 target_link_libraries(clang PRIVATE ${LINKER_ORDER_FILE_OPTION}) 122 set_target_properties(clang PROPERTIES LINK_DEPENDS ${CLANG_ORDER_FILE}) 123 endif() 124endif() 125