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