Michael Gottesman | ca589cc | 2016-07-09 21:58:40 +0000 | [diff] [blame] | 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") |
Justin Bogner | 66b326b | 2016-11-07 23:46:05 +0000 | [diff] [blame] | 92 | |
| 93 | if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR |
| 94 | NOT LLVM_DISTRIBUTION_COMPONENTS) |
| 95 | set(export_to_clangtargets EXPORT ClangTargets) |
Justin Bogner | 5ca4d5f | 2016-11-08 05:02:33 +0000 | [diff] [blame] | 96 | set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True) |
Justin Bogner | 66b326b | 2016-11-07 23:46:05 +0000 | [diff] [blame] | 97 | endif() |
| 98 | |
Michael Gottesman | ca589cc | 2016-07-09 21:58:40 +0000 | [diff] [blame] | 99 | install(TARGETS ${name} |
| 100 | COMPONENT ${name} |
Justin Bogner | 66b326b | 2016-11-07 23:46:05 +0000 | [diff] [blame] | 101 | ${export_to_clangtargets} |
Michael Gottesman | ca589cc | 2016-07-09 21:58:40 +0000 | [diff] [blame] | 102 | LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} |
| 103 | ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} |
| 104 | RUNTIME DESTINATION bin) |
| 105 | |
| 106 | if (${ARG_SHARED} AND NOT CMAKE_CONFIGURATION_TYPES) |
Shoaib Meenai | 669cae1 | 2017-11-30 22:35:02 +0000 | [diff] [blame] | 107 | add_llvm_install_targets(install-${name} |
| 108 | DEPENDS ${name} |
| 109 | COMPONENT ${name}) |
Michael Gottesman | ca589cc | 2016-07-09 21:58:40 +0000 | [diff] [blame] | 110 | endif() |
| 111 | endif() |
| 112 | set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name}) |
| 113 | else() |
| 114 | # Add empty "phony" target |
| 115 | add_custom_target(${name}) |
| 116 | endif() |
| 117 | |
| 118 | set_target_properties(${name} PROPERTIES FOLDER "Clang libraries") |
| 119 | set_clang_windows_version_resource_properties(${name}) |
| 120 | endmacro(add_clang_library) |
| 121 | |
| 122 | macro(add_clang_executable name) |
| 123 | add_llvm_executable( ${name} ${ARGN} ) |
| 124 | set_target_properties(${name} PROPERTIES FOLDER "Clang executables") |
| 125 | set_clang_windows_version_resource_properties(${name}) |
| 126 | endmacro(add_clang_executable) |
| 127 | |
| 128 | macro(add_clang_tool name) |
Michael Gottesman | eb396a6 | 2016-07-10 01:44:00 +0000 | [diff] [blame] | 129 | if (NOT CLANG_BUILD_TOOLS) |
| 130 | set(EXCLUDE_FROM_ALL ON) |
| 131 | endif() |
Michael Gottesman | ca589cc | 2016-07-09 21:58:40 +0000 | [diff] [blame] | 132 | |
Michael Gottesman | eb396a6 | 2016-07-10 01:44:00 +0000 | [diff] [blame] | 133 | add_clang_executable(${name} ${ARGN}) |
| 134 | |
| 135 | if (CLANG_BUILD_TOOLS) |
Justin Bogner | 66b326b | 2016-11-07 23:46:05 +0000 | [diff] [blame] | 136 | if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR |
| 137 | NOT LLVM_DISTRIBUTION_COMPONENTS) |
| 138 | set(export_to_clangtargets EXPORT ClangTargets) |
Justin Bogner | 5ca4d5f | 2016-11-08 05:02:33 +0000 | [diff] [blame] | 139 | set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True) |
Justin Bogner | 66b326b | 2016-11-07 23:46:05 +0000 | [diff] [blame] | 140 | endif() |
| 141 | |
Michael Gottesman | eb396a6 | 2016-07-10 01:44:00 +0000 | [diff] [blame] | 142 | install(TARGETS ${name} |
Justin Bogner | 66b326b | 2016-11-07 23:46:05 +0000 | [diff] [blame] | 143 | ${export_to_clangtargets} |
Michael Gottesman | eb396a6 | 2016-07-10 01:44:00 +0000 | [diff] [blame] | 144 | RUNTIME DESTINATION bin |
| 145 | COMPONENT ${name}) |
| 146 | |
| 147 | if(NOT CMAKE_CONFIGURATION_TYPES) |
Shoaib Meenai | 669cae1 | 2017-11-30 22:35:02 +0000 | [diff] [blame] | 148 | add_llvm_install_targets(install-${name} |
| 149 | DEPENDS ${name} |
| 150 | COMPONENT ${name}) |
Michael Gottesman | eb396a6 | 2016-07-10 01:44:00 +0000 | [diff] [blame] | 151 | endif() |
Michael Gottesman | 66cc2d5 | 2016-10-19 22:46:06 +0000 | [diff] [blame] | 152 | set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name}) |
Michael Gottesman | ca589cc | 2016-07-09 21:58:40 +0000 | [diff] [blame] | 153 | endif() |
| 154 | endmacro() |
| 155 | |
| 156 | macro(add_clang_symlink name dest) |
| 157 | add_llvm_tool_symlink(${name} ${dest} ALWAYS_GENERATE) |
| 158 | # Always generate install targets |
| 159 | llvm_install_symlink(${name} ${dest} ALWAYS_GENERATE) |
| 160 | endmacro() |