1set( LLVM_LINK_COMPONENTS
2  ${LLVM_TARGETS_TO_BUILD}
3  asmparser
4  bitreader
5  bitwriter
6  irreader
7  codegen
8  instrumentation
9  ipo
10  linker
11  selectiondag
12  )
13
14add_clang_executable(clang
15  driver.cpp
16  cc1_main.cpp
17  cc1as_main.cpp
18  )
19
20target_link_libraries(clang
21  clangFrontendTool
22  clangAST
23  clangAnalysis
24  clangBasic
25  clangCodeGen
26  clangDriver
27  clangEdit
28  clangFrontend
29  clangLex
30  clangParse
31  clangEdit
32  clangSema
33  clangSerialization
34  )
35
36if(CLANG_ENABLE_STATIC_ANALYZER)
37  target_link_libraries(clang
38    clangStaticAnalyzerFrontend
39    clangStaticAnalyzerCheckers
40    clangStaticAnalyzerCore
41    )
42endif()
43
44if(CLANG_ENABLE_ARCMT)
45  target_link_libraries(clang
46    clangARCMigrate
47    )
48endif()
49
50if(CLANG_ENABLE_REWRITER)
51  target_link_libraries(clang
52    clangRewriteCore
53    clangRewriteFrontend
54    )
55endif()
56
57set_target_properties(clang PROPERTIES VERSION ${CLANG_EXECUTABLE_VERSION})
58set_target_properties(clang PROPERTIES ENABLE_EXPORTS 1)
59
60add_dependencies(clang clang-headers)
61
62if(UNIX)
63  set(CLANGXX_LINK_OR_COPY create_symlink)
64# Create a relative symlink
65  set(clang_binary "clang${CMAKE_EXECUTABLE_SUFFIX}")
66else()
67  set(CLANGXX_LINK_OR_COPY copy)
68  set(clang_binary "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX}")
69endif()
70
71# Create the clang++ symlink in the build directory.
72set(clang_pp "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/clang++${CMAKE_EXECUTABLE_SUFFIX}")
73add_custom_command(TARGET clang POST_BUILD
74    COMMAND ${CMAKE_COMMAND} -E ${CLANGXX_LINK_OR_COPY} "${clang_binary}" "${clang_pp}")
75
76set_property(DIRECTORY APPEND
77  PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clang_pp})
78
79# Create the clang-cl symlink in the build directory.
80set(clang_cl "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}")
81add_custom_command(TARGET clang POST_BUILD
82    COMMAND ${CMAKE_COMMAND} -E ${CLANGXX_LINK_OR_COPY} "${clang_binary}" "${clang_cl}")
83
84set_property(DIRECTORY APPEND
85  PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clang_cl})
86
87install(TARGETS clang
88  RUNTIME DESTINATION bin)
89
90# Create the clang++ and clang-cl symlinks at installation time.
91install(SCRIPT clang_symlink.cmake -DCMAKE_INSTALL_PREFIX=\"${CMAKE_INSTALL_PREFIX}\")
92
93# Configure plist creation for OS X.
94set (TOOL_INFO_PLIST "Info.plist" CACHE STRING "Plist name")
95if (APPLE)
96  if (CLANG_VENDOR)
97    set(TOOL_INFO_NAME "${CLANG_VENDOR} clang")
98  else()
99    set(TOOL_INFO_NAME "clang")
100  endif()
101
102  set(TOOL_INFO_UTI "${CLANG_VENDOR_UTI}")
103  set(TOOL_INFO_VERSION "${CLANG_VERSION}")
104  if (LLVM_SUBMIT_VERSION)
105    set(TOOL_INFO_BUILD_VERSION
106      "${LLVM_SUBMIT_VERSION}.${LLVM_SUBMIT_SUBVERSION}")
107  endif()
108
109  set(TOOL_INFO_PLIST_OUT "${CMAKE_CURRENT_BINARY_DIR}/${TOOL_INFO_PLIST}")
110  target_link_libraries(clang
111    "-Wl,-sectcreate,__TEXT,__info_plist,${TOOL_INFO_PLIST_OUT}")
112  configure_file("${TOOL_INFO_PLIST}.in" "${TOOL_INFO_PLIST_OUT}" @ONLY)
113
114  set(TOOL_INFO_UTI)
115  set(TOOL_INFO_NAME)
116  set(TOOL_INFO_VERSION)
117  set(TOOL_INFO_BUILD_VERSION)
118endif()
119
120if(CLANG_ORDER_FILE)
121  target_link_libraries(clang "-Wl,-order_file,${CLANG_ORDER_FILE}")
122endif()
123
124