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