123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- function(clang_tablegen)
- # Syntax:
- # clang_tablegen output-file [tablegen-arg ...] SOURCE source-file
- # [[TARGET cmake-target-name] [DEPENDS extra-dependency ...]]
- #
- # Generates a custom command for invoking tblgen as
- #
- # tblgen source-file -o=output-file tablegen-arg ...
- #
- # and, if cmake-target-name is provided, creates a custom target for
- # executing the custom command depending on output-file. It is
- # possible to list more files to depend after DEPENDS.
- cmake_parse_arguments(CTG "" "SOURCE;TARGET" "" ${ARGN})
- if( NOT CTG_SOURCE )
- message(FATAL_ERROR "SOURCE source-file required by clang_tablegen")
- endif()
- set( LLVM_TARGET_DEFINITIONS ${CTG_SOURCE} )
- tablegen(CLANG ${CTG_UNPARSED_ARGUMENTS})
- if(CTG_TARGET)
- add_public_tablegen_target(${CTG_TARGET})
- set_target_properties( ${CTG_TARGET} PROPERTIES FOLDER "Clang tablegenning")
- set_property(GLOBAL APPEND PROPERTY CLANG_TABLEGEN_TARGETS ${CTG_TARGET})
- endif()
- endfunction(clang_tablegen)
- macro(set_clang_windows_version_resource_properties name)
- if(DEFINED windows_resource_file)
- set_windows_version_resource_properties(${name} ${windows_resource_file}
- VERSION_MAJOR ${CLANG_VERSION_MAJOR}
- VERSION_MINOR ${CLANG_VERSION_MINOR}
- VERSION_PATCHLEVEL ${CLANG_VERSION_PATCHLEVEL}
- VERSION_STRING "${CLANG_VERSION} (${BACKEND_PACKAGE_STRING})"
- PRODUCT_NAME "clang")
- endif()
- endmacro()
- macro(add_clang_subdirectory name)
- add_llvm_subdirectory(CLANG TOOL ${name})
- endmacro()
- macro(add_clang_library name)
- cmake_parse_arguments(ARG
- "SHARED;INSTALL_WITH_TOOLCHAIN"
- ""
- "ADDITIONAL_HEADERS"
- ${ARGN})
- set(srcs)
- if(MSVC_IDE OR XCODE)
- # Add public headers
- file(RELATIVE_PATH lib_path
- ${CLANG_SOURCE_DIR}/lib/
- ${CMAKE_CURRENT_SOURCE_DIR}
- )
- if(NOT lib_path MATCHES "^[.][.]")
- file( GLOB_RECURSE headers
- ${CLANG_SOURCE_DIR}/include/clang/${lib_path}/*.h
- ${CLANG_SOURCE_DIR}/include/clang/${lib_path}/*.def
- )
- set_source_files_properties(${headers} PROPERTIES HEADER_FILE_ONLY ON)
- file( GLOB_RECURSE tds
- ${CLANG_SOURCE_DIR}/include/clang/${lib_path}/*.td
- )
- source_group("TableGen descriptions" FILES ${tds})
- set_source_files_properties(${tds}} PROPERTIES HEADER_FILE_ONLY ON)
- if(headers OR tds)
- set(srcs ${headers} ${tds})
- endif()
- endif()
- endif(MSVC_IDE OR XCODE)
- if(srcs OR ARG_ADDITIONAL_HEADERS)
- set(srcs
- ADDITIONAL_HEADERS
- ${srcs}
- ${ARG_ADDITIONAL_HEADERS} # It may contain unparsed unknown args.
- )
- endif()
- if(ARG_SHARED)
- set(LIBTYPE SHARED)
- else()
- # llvm_add_library ignores BUILD_SHARED_LIBS if STATIC is explicitly set,
- # so we need to handle it here.
- if(BUILD_SHARED_LIBS)
- set(LIBTYPE SHARED)
- else()
- set(LIBTYPE STATIC)
- endif()
- if(NOT XCODE)
- # The Xcode generator doesn't handle object libraries correctly.
- list(APPEND LIBTYPE OBJECT)
- endif()
- set_property(GLOBAL APPEND PROPERTY CLANG_STATIC_LIBS ${name})
- endif()
- llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
- if(TARGET ${name})
- target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
- if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ARG_INSTALL_WITH_TOOLCHAIN)
- set(export_to_clangtargets)
- if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
- "clang-libraries" IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
- NOT LLVM_DISTRIBUTION_COMPONENTS)
- set(export_to_clangtargets EXPORT ClangTargets)
- set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
- endif()
- install(TARGETS ${name}
- COMPONENT ${name}
- ${export_to_clangtargets}
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
- RUNTIME DESTINATION bin)
- if (NOT LLVM_ENABLE_IDE)
- add_llvm_install_targets(install-${name}
- DEPENDS ${name}
- COMPONENT ${name})
- endif()
- set_property(GLOBAL APPEND PROPERTY CLANG_LIBS ${name})
- endif()
- set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
- else()
- # Add empty "phony" target
- add_custom_target(${name})
- endif()
- set_target_properties(${name} PROPERTIES FOLDER "Clang libraries")
- set_clang_windows_version_resource_properties(${name})
- endmacro(add_clang_library)
- macro(add_clang_executable name)
- add_llvm_executable( ${name} ${ARGN} )
- set_target_properties(${name} PROPERTIES FOLDER "Clang executables")
- set_clang_windows_version_resource_properties(${name})
- endmacro(add_clang_executable)
- macro(add_clang_tool name)
- if (NOT CLANG_BUILD_TOOLS)
- set(EXCLUDE_FROM_ALL ON)
- endif()
- add_clang_executable(${name} ${ARGN})
- add_dependencies(${name} clang-resource-headers)
- if (CLANG_BUILD_TOOLS)
- set(export_to_clangtargets)
- if(${name} IN_LIST LLVM_DISTRIBUTION_COMPONENTS OR
- NOT LLVM_DISTRIBUTION_COMPONENTS)
- set(export_to_clangtargets EXPORT ClangTargets)
- set_property(GLOBAL PROPERTY CLANG_HAS_EXPORTS True)
- endif()
- install(TARGETS ${name}
- ${export_to_clangtargets}
- RUNTIME DESTINATION bin
- COMPONENT ${name})
- if(NOT LLVM_ENABLE_IDE)
- add_llvm_install_targets(install-${name}
- DEPENDS ${name}
- COMPONENT ${name})
- endif()
- set_property(GLOBAL APPEND PROPERTY CLANG_EXPORTS ${name})
- endif()
- endmacro()
- macro(add_clang_symlink name dest)
- add_llvm_tool_symlink(${name} ${dest} ALWAYS_GENERATE)
- # Always generate install targets
- llvm_install_symlink(${name} ${dest} ALWAYS_GENERATE)
- endmacro()
- function(clang_target_link_libraries target type)
- if (CLANG_LINK_CLANG_DYLIB)
- target_link_libraries(${target} ${type} clang-cpp)
- else()
- target_link_libraries(${target} ${type} ${ARGN})
- endif()
- endfunction()
|