Home | History | Annotate | Download | only in modules
      1 function(clang_tablegen)
      2   # Syntax:
      3   # clang_tablegen output-file [tablegen-arg ...] SOURCE source-file
      4   # [[TARGET cmake-target-name] [DEPENDS extra-dependency ...]]
      5   #
      6   # Generates a custom command for invoking tblgen as
      7   #
      8   # tblgen source-file -o=output-file tablegen-arg ...
      9   #
     10   # and, if cmake-target-name is provided, creates a custom target for
     11   # executing the custom command depending on output-file. It is
     12   # possible to list more files to depend after DEPENDS.
     13 
     14   cmake_parse_arguments(CTG "" "SOURCE;TARGET" "" ${ARGN})
     15 
     16   if( NOT CTG_SOURCE )
     17     message(FATAL_ERROR "SOURCE source-file required by clang_tablegen")
     18   endif()
     19 
     20   set( LLVM_TARGET_DEFINITIONS ${CTG_SOURCE} )
     21   tablegen(CLANG ${CTG_UNPARSED_ARGUMENTS})
     22 
     23   if(CTG_TARGET)
     24     add_public_tablegen_target(${CTG_TARGET})
     25     set_target_properties( ${CTG_TARGET} PROPERTIES FOLDER "Clang tablegenning")
     26     set_property(GLOBAL APPEND PROPERTY CLANG_TABLEGEN_TARGETS ${CTG_TARGET})
     27   endif()
     28 endfunction(clang_tablegen)
     29 
     30 macro(set_clang_windows_version_resource_properties name)
     31   if(DEFINED windows_resource_file)
     32     set_windows_version_resource_properties(${name} ${windows_resource_file}
     33       VERSION_MAJOR ${CLANG_VERSION_MAJOR}
     34       VERSION_MINOR ${CLANG_VERSION_MINOR}
     35       VERSION_PATCHLEVEL ${CLANG_VERSION_PATCHLEVEL}
     36       VERSION_STRING "${CLANG_VERSION} (${BACKEND_PACKAGE_STRING})"
     37       PRODUCT_NAME "clang")
     38   endif()
     39 endmacro()
     40 
     41 macro(add_clang_subdirectory name)
     42   add_llvm_subdirectory(CLANG TOOL ${name})
     43 endmacro()
     44 
     45 macro(add_clang_library name)
     46   cmake_parse_arguments(ARG
     47     "SHARED"
     48     ""
     49     "ADDITIONAL_HEADERS"
     50     ${ARGN})
     51   set(srcs)
     52   if(MSVC_IDE OR XCODE)
     53     # Add public headers
     54     file(RELATIVE_PATH lib_path
     55       ${CLANG_SOURCE_DIR}/lib/
     56       ${CMAKE_CURRENT_SOURCE_DIR}
     57     )
     58     if(NOT lib_path MATCHES "^[.][.]")
     59       file( GLOB_RECURSE headers
     60         ${CLANG_SOURCE_DIR}/include/clang/${lib_path}/*.h
     61         ${CLANG_SOURCE_DIR}/include/clang/${lib_path}/*.def
     62       )
     63       set_source_files_properties(${headers} PROPERTIES HEADER_FILE_ONLY ON)
     64 
     65       file( GLOB_RECURSE tds
     66         ${CLANG_SOURCE_DIR}/include/clang/${lib_path}/*.td
     67       )
     68       source_group("TableGen descriptions" FILES ${tds})
     69       set_source_files_properties(${tds}} PROPERTIES HEADER_FILE_ONLY ON)
     70 
     71       if(headers OR tds)
     72         set(srcs ${headers} ${tds})
     73       endif()
     74     endif()
     75   endif(MSVC_IDE OR XCODE)
     76   if(srcs OR ARG_ADDITIONAL_HEADERS)
     77     set(srcs
     78       ADDITIONAL_HEADERS
     79       ${srcs}
     80       ${ARG_ADDITIONAL_HEADERS} # It may contain unparsed unknown args.
     81       )
     82   endif()
     83   if(ARG_SHARED)
     84     set(ARG_ENABLE_SHARED SHARED)
     85   endif()
     86   llvm_add_library(${name} ${ARG_ENABLE_SHARED} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
     87 
     88   if(TARGET ${name})
     89     target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
     90 
     91     if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libclang")
     92       install(TARGETS ${name}
     93         COMPONENT ${name}
     94         EXPORT ClangTargets
     95         LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
     96         ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
     97         RUNTIME DESTINATION bin)
     98 
     99       if (${ARG_SHARED} AND NOT CMAKE_CONFIGURATION_TYPES)
    100         add_custom_target(install-${name}
    101                           DEPENDS ${name}
    102                           COMMAND "${CMAKE_COMMAND}"
    103                                   -DCMAKE_INSTALL_COMPONENT=${name}
    104                                   -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
    105       endif()
    106     endif()
    107     set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
    108   else()
    109     # Add empty "phony" target
    110     add_custom_target(${name})
    111   endif()
    112 
    113   set_target_properties(${name} PROPERTIES FOLDER "Clang libraries")
    114   set_clang_windows_version_resource_properties(${name})
    115 endmacro(add_clang_library)
    116 
    117 macro(add_clang_executable name)
    118   add_llvm_executable( ${name} ${ARGN} )
    119   set_target_properties(${name} PROPERTIES FOLDER "Clang executables")
    120   set_clang_windows_version_resource_properties(${name})
    121 endmacro(add_clang_executable)
    122 
    123 macro(add_clang_tool name)
    124   if (NOT CLANG_BUILD_TOOLS)
    125     set(EXCLUDE_FROM_ALL ON)
    126   endif()
    127 
    128   add_clang_executable(${name} ${ARGN})
    129 
    130   if (CLANG_BUILD_TOOLS)
    131     install(TARGETS ${name}
    132       RUNTIME DESTINATION bin
    133       COMPONENT ${name})
    134 
    135     if(NOT CMAKE_CONFIGURATION_TYPES)
    136       add_custom_target(install-${name}
    137         DEPENDS ${name}
    138         COMMAND "${CMAKE_COMMAND}"
    139         -DCMAKE_INSTALL_COMPONENT=${name}
    140         -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
    141     endif()
    142   endif()
    143 endmacro()
    144 
    145 macro(add_clang_symlink name dest)
    146   add_llvm_tool_symlink(${name} ${dest} ALWAYS_GENERATE)
    147   # Always generate install targets
    148   llvm_install_symlink(${name} ${dest} ALWAYS_GENERATE)
    149 endmacro()
    150