• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1set( LLVM_LINK_COMPONENTS
2  ${LLVM_TARGETS_TO_BUILD}
3  Analysis
4  CodeGen
5  Core
6  IPA
7  IPO
8  InstCombine
9  Instrumentation
10  MC
11  MCParser
12  ObjCARCOpts
13  Option
14  ProfileData
15  ScalarOpts
16  Support
17  TransformUtils
18  Vectorize
19  )
20
21option(CLANG_PLUGIN_SUPPORT "Build clang with plugin support" ON)
22
23# Support plugins. This must be before add_clang_executable as it reads
24# LLVM_NO_DEAD_STRIP.
25if(CLANG_PLUGIN_SUPPORT)
26  set(LLVM_NO_DEAD_STRIP 1)
27endif()
28
29add_clang_executable(clang
30  driver.cpp
31  cc1_main.cpp
32  cc1as_main.cpp
33  )
34
35target_link_libraries(clang
36  clangBasic
37  clangDriver
38  clangFrontend
39  clangFrontendTool
40  )
41
42set_target_properties(clang PROPERTIES VERSION ${CLANG_EXECUTABLE_VERSION})
43
44# Support plugins.
45if(CLANG_PLUGIN_SUPPORT)
46  set_target_properties(clang PROPERTIES ENABLE_EXPORTS 1)
47endif()
48
49add_dependencies(clang clang-headers)
50
51if(UNIX)
52  set(CLANGXX_LINK_OR_COPY create_symlink)
53# Create a relative symlink
54  set(clang_binary "clang${CMAKE_EXECUTABLE_SUFFIX}")
55else()
56  set(CLANGXX_LINK_OR_COPY copy)
57  set(clang_binary "${LLVM_RUNTIME_OUTPUT_INTDIR}/clang${CMAKE_EXECUTABLE_SUFFIX}")
58endif()
59
60# Create the clang++ symlink in the build directory.
61set(clang_pp "${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++${CMAKE_EXECUTABLE_SUFFIX}")
62add_custom_command(TARGET clang POST_BUILD
63    COMMAND ${CMAKE_COMMAND} -E ${CLANGXX_LINK_OR_COPY} "${clang_binary}" "${clang_pp}"
64    WORKING_DIRECTORY "${LLVM_RUNTIME_OUTPUT_INTDIR}")
65
66set_property(DIRECTORY APPEND
67  PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clang_pp})
68
69# Create the clang-cl symlink in the build directory.
70set(clang_cl "${LLVM_RUNTIME_OUTPUT_INTDIR}/clang-cl${CMAKE_EXECUTABLE_SUFFIX}")
71add_custom_command(TARGET clang POST_BUILD
72    COMMAND ${CMAKE_COMMAND} -E ${CLANGXX_LINK_OR_COPY} "${clang_binary}" "${clang_cl}"
73    WORKING_DIRECTORY "${LLVM_RUNTIME_OUTPUT_INTDIR}")
74
75set_property(DIRECTORY APPEND
76  PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${clang_cl})
77
78install(TARGETS clang
79  RUNTIME DESTINATION bin)
80
81# Create the clang++ and clang-cl symlinks at installation time.
82install(SCRIPT clang_symlink.cmake -DCMAKE_INSTALL_PREFIX=\"${CMAKE_INSTALL_PREFIX}\")
83
84# Configure plist creation for OS X.
85set (TOOL_INFO_PLIST "Info.plist" CACHE STRING "Plist name")
86if (APPLE)
87  if (CLANG_VENDOR)
88    set(TOOL_INFO_NAME "${CLANG_VENDOR} clang")
89  else()
90    set(TOOL_INFO_NAME "clang")
91  endif()
92
93  set(TOOL_INFO_UTI "${CLANG_VENDOR_UTI}")
94  set(TOOL_INFO_VERSION "${CLANG_VERSION}")
95  if (LLVM_SUBMIT_VERSION)
96    set(TOOL_INFO_BUILD_VERSION
97      "${LLVM_SUBMIT_VERSION}.${LLVM_SUBMIT_SUBVERSION}")
98  endif()
99
100  set(TOOL_INFO_PLIST_OUT "${CMAKE_CURRENT_BINARY_DIR}/${TOOL_INFO_PLIST}")
101  target_link_libraries(clang
102    "-Wl,-sectcreate,__TEXT,__info_plist,${TOOL_INFO_PLIST_OUT}")
103  configure_file("${TOOL_INFO_PLIST}.in" "${TOOL_INFO_PLIST_OUT}" @ONLY)
104
105  set(TOOL_INFO_UTI)
106  set(TOOL_INFO_NAME)
107  set(TOOL_INFO_VERSION)
108  set(TOOL_INFO_BUILD_VERSION)
109endif()
110
111if(CLANG_ORDER_FILE)
112  target_link_libraries(clang "-Wl,-order_file,${CLANG_ORDER_FILE}")
113endif()
114
115if(WITH_POLLY AND LINK_POLLY_INTO_TOOLS)
116  target_link_libraries(clang Polly)
117  if(POLLY_LINK_LIBS)
118    foreach(lib ${POLLY_LINK_LIBS})
119      target_link_libraries(clang ${lib})
120    endforeach(lib)
121  endif(POLLY_LINK_LIBS)
122endif(WITH_POLLY AND LINK_POLLY_INTO_TOOLS)
123