summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorMichael Gottesman <mgottesman@apple.com>2016-07-09 21:58:40 +0000
committerMichael Gottesman <mgottesman@apple.com>2016-07-09 21:58:40 +0000
commit4accddb312ad61574d142d7973592f08b48a12ed (patch)
treee02c0cb73ecabc002a6bd41d4aac36ee6bb5e325 /CMakeLists.txt
parent7dfefa9c285f67a548a1f114f96c3871a10f7a6f (diff)
Move add_clang_* entry points from the main clang CMakeLists.txt to cmake/modules/AddClang.cmake.
This matches how LLVM has its cmake files organized and is cleaner than just shoving this business logic into the main CMakeLists.txt. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274992 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt148
1 files changed, 5 insertions, 143 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4601c5523f..1a37b64aeb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -168,6 +168,10 @@ else()
set(BACKEND_PACKAGE_STRING "${PACKAGE_STRING}")
endif()
+# Make sure that our source directory is on the current cmake module path so that
+# we can include cmake files from this directory.
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
+
find_package(LibXml2 2.5.3 QUIET)
if (LIBXML2_FOUND)
set(CLANG_HAVE_LIBXML 1)
@@ -308,149 +312,7 @@ configure_file(
${CLANG_BINARY_DIR}/include/clang/Config/config.h)
include(CMakeParseArguments)
-
-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"
- ""
- "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(ARG_ENABLE_SHARED SHARED)
- endif()
- llvm_add_library(${name} ${ARG_ENABLE_SHARED} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
-
- if(TARGET ${name})
- target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})
-
- if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "libclang")
- install(TARGETS ${name}
- COMPONENT ${name}
- EXPORT ClangTargets
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX}
- RUNTIME DESTINATION bin)
-
- if (${ARG_SHARED} AND NOT CMAKE_CONFIGURATION_TYPES)
- add_custom_target(install-${name}
- DEPENDS ${name}
- COMMAND "${CMAKE_COMMAND}"
- -DCMAKE_INSTALL_COMPONENT=${name}
- -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
- endif()
- 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)
- add_clang_executable(${name} ${ARGN})
- install(TARGETS ${name}
- RUNTIME DESTINATION bin
- COMPONENT ${name})
-
- if(NOT CMAKE_CONFIGURATION_TYPES)
- add_custom_target(install-${name}
- DEPENDS ${name}
- COMMAND "${CMAKE_COMMAND}"
- -DCMAKE_INSTALL_COMPONENT=${name}
- -P "${CMAKE_BINARY_DIR}/cmake_install.cmake")
- 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()
+include(AddClang)
set(CMAKE_INCLUDE_CURRENT_DIR ON)