2016-12-28 22:52:27 +03:00
# See docs/CMake.html for instructions about how to build LLVM with CMake.
2023-07-25 23:44:49 +03:00
cmake_minimum_required ( VERSION 3.17.2 ) # HLSL Change - Require CMake 3.17.2.
2016-12-28 22:52:27 +03:00
2023-08-22 20:20:27 +03:00
set ( CMAKE_CXX_STANDARD 17 )
set ( CMAKE_CXX_STANDARD_REQUIRED ON )
2020-05-11 22:23:20 +03:00
if ( NOT "${DXC_CMAKE_BEGINS_INCLUDE}" STREQUAL "" )
include ( ${ DXC_CMAKE_BEGINS_INCLUDE } )
endif ( )
2016-12-28 22:52:27 +03:00
if ( NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES )
message ( STATUS "No build type selected, default to Debug" )
set ( CMAKE_BUILD_TYPE "Debug" )
endif ( )
if ( POLICY CMP0022 )
cmake_policy ( SET CMP0022 NEW ) # automatic when 2.8.12 is required
endif ( )
if ( POLICY CMP0051 )
# CMake 3.1 and higher include generator expressions of the form
# $<TARGETLIB:obj> in the SOURCES property. These need to be
# stripped everywhere that access the SOURCES property, so we just
# defer to the OLD behavior of not including generator expressions
# in the output for now.
cmake_policy ( SET CMP0051 OLD )
endif ( )
if ( CMAKE_VERSION VERSION_LESS 3.1.20141117 )
set ( cmake_3_2_USES_TERMINAL )
else ( )
set ( cmake_3_2_USES_TERMINAL USES_TERMINAL )
endif ( )
project ( LLVM )
# The following only works with the Ninja generator in CMake >= 3.0.
set ( LLVM_PARALLEL_COMPILE_JOBS "" CACHE STRING
" D e f i n e t h e m a x i m u m n u m b e r o f c o n c u r r e n t c o m p i l a t i o n j o b s . " )
if ( LLVM_PARALLEL_COMPILE_JOBS )
if ( CMAKE_VERSION VERSION_LESS 3.0 OR NOT CMAKE_MAKE_PROGRAM MATCHES "ninja$" )
message ( WARNING "Job pooling is only available with Ninja generators and CMake 3.0 and later." )
else ( )
set_property ( GLOBAL APPEND PROPERTY JOB_POOLS compile_job_pool= ${ LLVM_PARALLEL_COMPILE_JOBS } )
set ( CMAKE_JOB_POOL_COMPILE compile_job_pool )
endif ( )
endif ( )
set ( LLVM_PARALLEL_LINK_JOBS "" CACHE STRING
" D e f i n e t h e m a x i m u m n u m b e r o f c o n c u r r e n t l i n k j o b s . " )
if ( LLVM_PARALLEL_LINK_JOBS )
if ( CMAKE_VERSION VERSION_LESS 3.0 OR NOT CMAKE_MAKE_PROGRAM MATCHES "ninja$" )
message ( WARNING "Job pooling is only available with Ninja generators and CMake 3.0 and later." )
else ( )
set_property ( GLOBAL APPEND PROPERTY JOB_POOLS link_job_pool= ${ LLVM_PARALLEL_LINK_JOBS } )
set ( CMAKE_JOB_POOL_LINK link_job_pool )
endif ( )
endif ( )
# Add path for custom modules
set ( CMAKE_MODULE_PATH
$ { C M A K E _ M O D U L E _ P A T H }
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e "
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / c m a k e / m o d u l e s "
)
set ( LLVM_VERSION_MAJOR 3 )
set ( LLVM_VERSION_MINOR 7 )
set ( LLVM_VERSION_PATCH 0 )
set ( LLVM_VERSION_SUFFIX "" )
if ( NOT PACKAGE_VERSION )
set ( PACKAGE_VERSION
" $ { L L V M _ V E R S I O N _ M A J O R } . $ { L L V M _ V E R S I O N _ M I N O R } . $ { L L V M _ V E R S I O N _ P A T C H } $ { L L V M _ V E R S I O N _ S U F F I X } " )
endif ( )
option ( LLVM_INSTALL_UTILS "Include utility binaries in the 'install' target." OFF )
option ( LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target." OFF )
option ( LLVM_USE_FOLDERS "Enable solution folders in Visual Studio. Disable for Express versions." ON )
if ( LLVM_USE_FOLDERS )
set_property ( GLOBAL PROPERTY USE_FOLDERS ON )
endif ( )
2019-06-29 01:16:34 +03:00
option ( HLSL_EMBED_VERSION "If set, embeds version information in the binaries." ON ) # HLSL Change
# HLSL Change - Directory with version.inc file used for the build (generated or copied from HLSL_FIXED_VERSION_LOCATION)
2020-01-31 02:54:59 +03:00
set ( HLSL_VERSION_LOCATION ${ CMAKE_CURRENT_BINARY_DIR } /utils/version )
2019-06-29 01:16:34 +03:00
option ( HLSL_OFFICIAL_BUILD "If set, embeds official version in the binaries (based on the latest release version)" OFF ) # HLSL Change
option ( HLSL_ENABLE_FIXED_VER "Reads version information from a file." OFF ) # HLSL Change
2016-12-28 22:52:27 +03:00
option ( HLSL_ENABLE_ANALYZE "Enables compiler analysis during compilation." OFF ) # HLSL Change
option ( HLSL_OPTIONAL_PROJS_IN_DEFAULT "Include optional projects in default build target." OFF ) # HLSL Change
2020-03-04 04:25:12 +03:00
option ( HLSL_BUILD_DXILCONV "Include DXBC to DXIL converter and tools." ON ) # HLSL Change
2016-12-28 22:52:27 +03:00
2020-05-14 18:29:56 +03:00
option ( HLSL_ENABLE_DEBUG_ITERATORS "Disable debug iterators for faster debug and to remove some additional allocations with improper noexcept attribution" OFF ) # HLSL Change
2020-05-13 21:00:35 +03:00
2018-06-20 18:35:48 +03:00
# HLSL Change Starts - support commit querying
option ( HLSL_SUPPORT_QUERY_GIT_COMMIT_INFO "Supports querying Git commit info." ON )
if ( HLSL_SUPPORT_QUERY_GIT_COMMIT_INFO )
add_definitions ( -DSUPPORT_QUERY_GIT_COMMIT_INFO )
endif ( )
2021-10-19 23:24:11 +03:00
2023-07-17 22:27:30 +03:00
option ( DXC_DISABLE_ALLOCATOR_OVERRIDES "Disable usage of allocator overrides" OFF )
mark_as_advanced ( DXC_DISABLE_ALLOCATOR_OVERRIDES )
2021-03-27 06:46:56 +03:00
# adjust link option to enable debugging from kernel mode; not compatible with incremental linking
2024-06-25 01:25:14 +03:00
if ( NOT CMAKE_VERSION VERSION_LESS "3.13" AND MSVC AND NOT CMAKE_C_COMPILER_ARCHITECTURE_ID STREQUAL "ARM64EC" )
2021-03-27 06:46:56 +03:00
add_link_options ( /DEBUGTYPE:CV,FIXUP,PDATA /INCREMENTAL:NO )
endif ( )
2022-05-13 06:04:29 +03:00
# enable control flow guard
if ( WIN32 )
2024-06-25 01:25:14 +03:00
if ( MSVC )
add_compile_options ( /guard:cf )
add_link_options ( /guard:cf )
else ( )
add_compile_options ( -fcf-protection )
endif ( )
2022-05-13 06:04:29 +03:00
endif ( WIN32 )
2023-09-01 02:41:28 +03:00
# Enable CET Shadow Stack
2024-06-25 01:25:14 +03:00
if ( MSVC AND NOT ( CMAKE_C_COMPILER_ARCHITECTURE_ID MATCHES "ARM.*" ) )
2023-09-19 18:51:38 +03:00
add_link_options ( /CETCOMPAT )
endif ( )
2023-09-01 02:41:28 +03:00
2021-03-27 06:46:56 +03:00
# HLSL Change Ends
2018-06-20 18:35:48 +03:00
2018-05-17 23:34:28 +03:00
# HLSL Change Starts - set flag for Appveyor CI
2018-05-18 17:50:33 +03:00
if ( "$ENV{CI}" AND "$ENV{APPVEYOR}" )
2018-05-17 23:34:28 +03:00
add_definitions ( -DDXC_ON_APPVEYOR_CI )
endif ( )
2018-06-20 18:35:48 +03:00
# HLSL Change Ends
2018-05-17 23:34:28 +03:00
2017-05-06 01:39:59 +03:00
# SPIRV change starts
option ( ENABLE_SPIRV_CODEGEN "Enables SPIR-V code generation." OFF )
2017-05-22 22:02:23 +03:00
option ( SPIRV_BUILD_TESTS "Build targets for the SPIR-V unit tests." OFF )
2018-05-29 22:19:37 +03:00
# Enable SPIR-V CodeGen for Linux by default.
if ( NOT WIN32 )
set ( ENABLE_SPIRV_CODEGEN ON )
endif ( )
2017-05-22 22:02:23 +03:00
if ( ${ SPIRV_BUILD_TESTS } )
2018-06-29 19:46:07 +03:00
enable_testing ( )
2017-05-22 22:02:23 +03:00
set ( ENABLE_SPIRV_CODEGEN ON )
endif ( )
2017-05-06 01:39:59 +03:00
if ( ${ ENABLE_SPIRV_CODEGEN } )
add_definitions ( -DENABLE_SPIRV_CODEGEN )
endif ( )
# SPIRV change ends
2016-12-28 22:52:27 +03:00
include ( VersionFromVCS )
option ( LLVM_APPEND_VC_REV
" A p p e n d t h e v e r s i o n c o n t r o l s y s t e m r e v i s i o n i d t o L L V M v e r s i o n " O F F )
if ( LLVM_APPEND_VC_REV )
add_version_info_from_vcs ( PACKAGE_VERSION )
endif ( )
set ( PACKAGE_NAME LLVM )
set ( PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}" )
set ( PACKAGE_BUGREPORT "http://llvm.org/bugs/" )
set ( BUG_REPORT_URL "${PACKAGE_BUGREPORT}" CACHE STRING
" D e f a u l t U R L w h e r e b u g r e p o r t s a r e t o b e s u b m i t t e d . " )
# Configure CPack.
if ( 0 ) # HLSL Change - disable CPack
set ( CPACK_PACKAGE_INSTALL_DIRECTORY "LLVM" )
set ( CPACK_PACKAGE_VENDOR "LLVM" )
set ( CPACK_PACKAGE_VERSION_MAJOR ${ LLVM_VERSION_MAJOR } )
set ( CPACK_PACKAGE_VERSION_MINOR ${ LLVM_VERSION_MINOR } )
set ( CPACK_PACKAGE_VERSION_PATCH ${ LLVM_VERSION_PATCH } )
set ( CPACK_PACKAGE_VERSION ${ PACKAGE_VERSION } )
set ( CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.TXT" )
set ( CPACK_NSIS_COMPRESSOR "/SOLID lzma \r\n SetCompressorDictSize 32" )
if ( WIN32 AND NOT UNIX )
set ( CPACK_PACKAGE_INSTALL_REGISTRY_KEY "LLVM" )
set ( CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\cmake\\\\nsis_logo.bmp" )
set ( CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\cmake\\\\nsis_icon.ico" )
set ( CPACK_NSIS_MUI_UNIICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\cmake\\\\nsis_icon.ico" )
set ( CPACK_NSIS_MODIFY_PATH "ON" )
set ( CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL "ON" )
set ( CPACK_NSIS_EXTRA_INSTALL_COMMANDS
" E x e c W a i t ' $ I N S T D I R / t o o l s / m s b u i l d / i n s t a l l . b a t ' " )
set ( CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS
" E x e c W a i t ' $ I N S T D I R / t o o l s / m s b u i l d / u n i n s t a l l . b a t ' " )
if ( CMAKE_CL_64 )
set ( CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64" )
endif ( )
endif ( )
include ( CPack )
endif ( 0 ) # HLSL Change - disable CPack
# Sanity check our source directory to make sure that we are not trying to
# generate an in-tree build (unless on MSVC_IDE, where it is ok), and to make
# sure that we don't have any stray generated files lying around in the tree
# (which would end up getting picked up by header search, instead of the correct
# versions).
if ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR AND NOT MSVC_IDE )
message ( FATAL_ERROR " In-source builds are not allowed.
C M a k e w o u l d o v e r w r i t e t h e m a k e f i l e s d i s t r i b u t e d w i t h L L V M .
P l e a s e c r e a t e a d i r e c t o r y a n d r u n c m a k e f r o m t h e r e , p a s s i n g t h e p a t h
t o t h i s s o u r c e d i r e c t o r y a s t h e l a s t a r g u m e n t .
T h i s p r o c e s s c r e a t e d t h e f i l e ` C M a k e C a c h e . t x t ' a n d t h e d i r e c t o r y ` C M a k e F i l e s ' .
P l e a s e d e l e t e t h e m . " )
endif ( )
if ( NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
file ( GLOB_RECURSE
t a b l e g e n n e d _ f i l e s _ o n _ i n c l u d e _ d i r
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / i n c l u d e / l l v m / * . g e n " )
file ( GLOB_RECURSE
t a b l e g e n n e d _ f i l e s _ o n _ l i b _ d i r
" $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / l i b / T a r g e t / * . i n c " )
if ( tablegenned_files_on_include_dir OR tablegenned_files_on_lib_dir )
# HLSL Change - change FATAL_ERROR to WARNING to avoid problems with extraneous files
message ( WARNING " Apparently there is a previous in-source build,
p r o b a b l y a s t h e r e s u l t o f r u n n i n g ` c o n f i g u r e ' a n d ` m a k e ' o n
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } .
T h i s m a y c a u s e p r o b l e m s . T h e s u s p i c i o u s f i l e s a r e :
$ { t a b l e g e n n e d _ f i l e s _ o n _ l i b _ d i r }
$ { t a b l e g e n n e d _ f i l e s _ o n _ i n c l u d e _ d i r }
P l e a s e c l e a n t h e s o u r c e d i r e c t o r y . " )
endif ( )
endif ( )
string ( TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE )
set ( LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" )
# They are used as destination of target generators.
set ( LLVM_RUNTIME_OUTPUT_INTDIR ${ CMAKE_CURRENT_BINARY_DIR } / ${ CMAKE_CFG_INTDIR } /bin )
set ( LLVM_LIBRARY_OUTPUT_INTDIR ${ CMAKE_CURRENT_BINARY_DIR } / ${ CMAKE_CFG_INTDIR } /lib ${ LLVM_LIBDIR_SUFFIX } )
if ( WIN32 OR CYGWIN )
# DLL platform -- put DLLs into bin.
set ( LLVM_SHLIB_OUTPUT_INTDIR ${ LLVM_RUNTIME_OUTPUT_INTDIR } )
else ( )
set ( LLVM_SHLIB_OUTPUT_INTDIR ${ LLVM_LIBRARY_OUTPUT_INTDIR } )
endif ( )
# Each of them corresponds to llvm-config's.
set ( LLVM_TOOLS_BINARY_DIR ${ LLVM_RUNTIME_OUTPUT_INTDIR } ) # --bindir
set ( LLVM_LIBRARY_DIR ${ LLVM_LIBRARY_OUTPUT_INTDIR } ) # --libdir
set ( LLVM_MAIN_SRC_DIR ${ CMAKE_CURRENT_SOURCE_DIR } ) # --src-root
set ( LLVM_MAIN_INCLUDE_DIR ${ LLVM_MAIN_SRC_DIR } /include ) # --includedir
set ( LLVM_BINARY_DIR ${ CMAKE_CURRENT_BINARY_DIR } ) # --prefix
set ( LLVM_EXAMPLES_BINARY_DIR ${ LLVM_BINARY_DIR } /examples )
set ( LLVM_INCLUDE_DIR ${ CMAKE_CURRENT_BINARY_DIR } /include )
# HLSL removed targets AArch64, ARM, BPF, CppBackend, Hexagon, Mips, MSP430, PowerPC, Sparc, SystemZ, X86, XCore
set ( LLVM_ALL_TARGETS
A M D G P U
N V P T X
)
# List of targets with JIT support:
set ( LLVM_TARGETS_WITH_JIT X86 PowerPC AArch64 ARM Mips SystemZ )
set ( LLVM_TARGETS_TO_BUILD "all"
C A C H E S T R I N G " S e m i c o l o n - s e p a r a t e d l i s t o f t a r g e t s t o b u i l d , o r \ " a l l \ " . " )
set ( LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ""
C A C H E S T R I N G " S e m i c o l o n - s e p a r a t e d l i s t o f e x p e r i m e n t a l t a r g e t s t o b u i l d . " )
option ( BUILD_SHARED_LIBS
" B u i l d a l l l i b r a r i e s a s s h a r e d l i b r a r i e s i n s t e a d o f s t a t i c " O F F )
option ( LLVM_ENABLE_TIMESTAMPS "Enable embedding timestamp information in build" ON )
if ( LLVM_ENABLE_TIMESTAMPS )
set ( ENABLE_TIMESTAMPS 1 )
endif ( )
option ( LLVM_ENABLE_BACKTRACES "Enable embedding backtraces on crash." ON )
if ( LLVM_ENABLE_BACKTRACES )
set ( ENABLE_BACKTRACES 1 )
endif ( )
option ( LLVM_ENABLE_CRASH_OVERRIDES "Enable crash overrides." ON )
if ( LLVM_ENABLE_CRASH_OVERRIDES )
set ( ENABLE_CRASH_OVERRIDES 1 )
endif ( )
option ( LLVM_ENABLE_FFI "Use libffi to call external functions from the interpreter" OFF )
set ( FFI_LIBRARY_DIR "" CACHE PATH "Additional directory, where CMake should search for libffi.so" )
set ( FFI_INCLUDE_DIR "" CACHE PATH "Additional directory, where CMake should search for ffi.h or ffi/ffi.h" )
set ( LLVM_TARGET_ARCH "host"
C A C H E S T R I N G " S e t t a r g e t t o u s e f o r L L V M J I T o r u s e \ " h o s t \ " f o r a u t o m a t i c d e t e c t i o n . " )
option ( LLVM_ENABLE_TERMINFO "Use terminfo database if available." ON )
option ( LLVM_ENABLE_THREADS "Use threads if available." ON )
option ( LLVM_ENABLE_ZLIB "Use zlib for compression/decompression if available." ON )
if ( LLVM_TARGETS_TO_BUILD STREQUAL "all" )
set ( LLVM_TARGETS_TO_BUILD ${ LLVM_ALL_TARGETS } )
endif ( )
set ( LLVM_TARGETS_TO_BUILD
$ { L L V M _ T A R G E T S _ T O _ B U I L D }
$ { L L V M _ E X P E R I M E N T A L _ T A R G E T S _ T O _ B U I L D } )
list ( REMOVE_DUPLICATES LLVM_TARGETS_TO_BUILD )
include ( AddLLVMDefinitions )
option ( LLVM_ENABLE_PIC "Build Position-Independent Code" ON )
option ( LLVM_ENABLE_WARNINGS "Enable compiler warnings." ON )
option ( LLVM_ENABLE_MODULES "Compile with C++ modules enabled." OFF )
option ( LLVM_ENABLE_CXX1Y "Compile with C++1y enabled." OFF )
option ( LLVM_ENABLE_LIBCXX "Use libc++ if available." OFF )
option ( LLVM_ENABLE_LIBCXXABI "Use libc++abi when using libc++." OFF )
option ( LLVM_ENABLE_PEDANTIC "Compile with pedantic enabled." ON )
option ( LLVM_ENABLE_WERROR "Fail and stop if a warning is triggered." OFF )
if ( NOT uppercase_CMAKE_BUILD_TYPE STREQUAL "DEBUG" )
option ( LLVM_ENABLE_ASSERTIONS "Enable assertions" OFF )
else ( )
option ( LLVM_ENABLE_ASSERTIONS "Enable assertions" ON )
endif ( )
set ( LLVM_ABI_BREAKING_CHECKS "WITH_ASSERTS" CACHE STRING
" E n a b l e a b i - b r e a k i n g c h e c k s . C a n b e W I T H _ A S S E R T S , F O R C E _ O N o r F O R C E _ O F F . " )
option ( LLVM_FORCE_USE_OLD_HOST_TOOLCHAIN
" S e t t o O N t o f o r c e u s i n g a n o l d , u n s u p p o r t e d h o s t t o o l c h a i n . " O F F )
option ( LLVM_USE_INTEL_JITEVENTS
" U s e I n t e l J I T A P I t o i n f o r m Intel ( R ) VTune ( TM ) A m p l i f i e r X E 2 0 1 1 a b o u t J I T c o d e "
O F F )
if ( LLVM_USE_INTEL_JITEVENTS )
# Verify we are on a supported platform
if ( NOT CMAKE_SYSTEM_NAME MATCHES "Windows" AND NOT CMAKE_SYSTEM_NAME MATCHES "Linux" )
message ( FATAL_ERROR
" I n t e l J I T A P I s u p p o r t i s a v a i l a b l e o n L i n u x a n d W i n d o w s o n l y . " )
endif ( )
endif ( LLVM_USE_INTEL_JITEVENTS )
option ( LLVM_USE_OPROFILE
" U s e o p a g e n t J I T i n t e r f a c e t o i n f o r m O P r o f i l e a b o u t J I T c o d e " O F F )
# If enabled, verify we are on a platform that supports oprofile.
if ( LLVM_USE_OPROFILE )
if ( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" )
message ( FATAL_ERROR "OProfile support is available on Linux only." )
endif ( NOT CMAKE_SYSTEM_NAME MATCHES "Linux" )
endif ( LLVM_USE_OPROFILE )
set ( LLVM_USE_SANITIZER "" CACHE STRING
" D e f i n e t h e s a n i t i z e r u s e d t o b u i l d b i n a r i e s a n d t e s t s . " )
2022-09-19 18:13:24 +03:00
option ( LLVM_OPTIMIZE_SANITIZED_BUILDS "Enable -O1 on sanitized builds" On )
2016-12-28 22:52:27 +03:00
option ( LLVM_USE_SPLIT_DWARF
" U s e - g s p l i t - d w a r f w h e n c o m p i l i n g l l v m . " O F F )
option ( WITH_POLLY "Build LLVM with Polly" ON )
option ( LINK_POLLY_INTO_TOOLS "Static link Polly into tools" OFF )
# Define an option controlling whether we should build for 32-bit on 64-bit
# platforms, where supported.
if ( CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT WIN32 )
# TODO: support other platforms and toolchains.
option ( LLVM_BUILD_32_BITS "Build 32 bits executables and libraries." OFF )
endif ( )
# Define the default arguments to use with 'lit', and an option for the user to
# override.
set ( LIT_ARGS_DEFAULT "-sv" )
if ( MSVC OR XCODE )
set ( LIT_ARGS_DEFAULT "${LIT_ARGS_DEFAULT} --no-progress-bar" )
endif ( )
set ( LLVM_LIT_ARGS "${LIT_ARGS_DEFAULT}" CACHE STRING "Default options for lit" )
# On Win32 hosts, provide an option to specify the path to the GnuWin32 tools.
if ( WIN32 AND NOT CYGWIN )
set ( LLVM_LIT_TOOLS_DIR "" CACHE PATH "Path to GnuWin32 tools" )
endif ( )
# Define options to control the inclusion and default build behavior for
# components which may not strictly be necessary (tools, examples, and tests).
#
# This is primarily to support building smaller or faster project files.
option ( LLVM_INCLUDE_TOOLS "Generate build targets for the LLVM tools." ON )
option ( LLVM_BUILD_TOOLS
" B u i l d t h e L L V M t o o l s . I f O F F , j u s t g e n e r a t e b u i l d t a r g e t s . " O N )
option ( LLVM_INCLUDE_UTILS "Generate build targets for the LLVM utils." ON )
option ( LLVM_BUILD_RUNTIME
" B u i l d t h e L L V M r u n t i m e l i b r a r i e s . " O N )
option ( LLVM_BUILD_EXAMPLES
" B u i l d t h e L L V M e x a m p l e p r o g r a m s . I f O F F , j u s t g e n e r a t e b u i l d t a r g e t s . " O F F )
option ( LLVM_INCLUDE_EXAMPLES "Generate build targets for the LLVM examples" ON )
option ( LLVM_BUILD_TESTS
" B u i l d L L V M u n i t t e s t s . I f O F F , j u s t g e n e r a t e b u i l d t a r g e t s . " O F F )
option ( LLVM_INCLUDE_TESTS "Generate build targets for the LLVM unit tests." ON )
2023-07-27 23:01:09 +03:00
option ( HLSL_INCLUDE_TESTS "Generate build targets for the HLSL unit tests." ON )
2016-12-28 22:52:27 +03:00
option ( LLVM_BUILD_DOCS "Build the llvm documentation." OFF )
option ( LLVM_INCLUDE_DOCS "Generate build targets for llvm documentation." ON )
option ( LLVM_ENABLE_DOXYGEN "Use doxygen to generate llvm API documentation." OFF )
option ( LLVM_ENABLE_SPHINX "Use Sphinx to generate llvm documentation." OFF )
option ( LLVM_BUILD_EXTERNAL_COMPILER_RT
" B u i l d c o m p i l e r - r t a s a n e x t e r n a l p r o j e c t . " O F F )
option ( LLVM_BUILD_LLVM_DYLIB "Build libllvm dynamic library" OFF )
option ( LLVM_DYLIB_EXPORT_ALL "Export all symbols from libLLVM.dylib (default is C API only" OFF )
option ( LLVM_DISABLE_LLVM_DYLIB_ATEXIT "Disable llvm-shlib's atexit destructors." ON )
if ( LLVM_DISABLE_LLVM_DYLIB_ATEXIT )
set ( DISABLE_LLVM_DYLIB_ATEXIT 1 )
endif ( )
option ( LLVM_OPTIMIZED_TABLEGEN "Force TableGen to be built with optimization" OFF )
if ( CMAKE_CROSSCOMPILING OR ( LLVM_OPTIMIZED_TABLEGEN AND LLVM_ENABLE_ASSERTIONS ) )
set ( LLVM_USE_HOST_TOOLS ON )
endif ( )
2022-11-15 21:17:03 +03:00
if ( LLVM_BUILD_INSTRUMENTED OR LLVM_BUILD_INSTRUMENTED_COVERAGE )
if ( NOT LLVM_PROFILE_MERGE_POOL_SIZE )
# A pool size of 1-2 is probably sufficient on a SSD. 3-4 should be fine
# for spining disks. Anything higher may only help on slower mediums.
set ( LLVM_PROFILE_MERGE_POOL_SIZE "4" )
endif ( )
if ( NOT LLVM_PROFILE_FILE_PATTERN )
if ( NOT LLVM_PROFILE_DATA_DIR )
set ( LLVM_PROFILE_FILE_PATTERN "%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" )
else ( )
file ( TO_NATIVE_PATH "${LLVM_PROFILE_DATA_DIR}/%${LLVM_PROFILE_MERGE_POOL_SIZE}m.profraw" LLVM_PROFILE_FILE_PATTERN )
endif ( )
endif ( )
endif ( )
2016-12-28 22:52:27 +03:00
# All options referred to from HandleLLVMOptions have to be specified
# BEFORE this include, otherwise options will not be correctly set on
# first cmake run
include ( config-ix )
# By default, we target the host, but this can be overridden at CMake
# invocation time.
set ( LLVM_DEFAULT_TARGET_TRIPLE "${LLVM_HOST_TRIPLE}" CACHE STRING
" D e f a u l t t a r g e t f o r w h i c h L L V M w i l l g e n e r a t e c o d e . " )
set ( TARGET_TRIPLE "${LLVM_DEFAULT_TARGET_TRIPLE}" )
include ( HandleLLVMOptions )
2019-05-15 16:56:11 +03:00
# Verify that we can find a Python 3 interpreter and force cmake to use it.
2024-06-20 20:11:49 +03:00
find_package ( Python3 REQUIRED )
2016-12-28 22:52:27 +03:00
######
# LLVMBuild Integration
#
# We use llvm-build to generate all the data required by the CMake based
# build system in one swoop:
#
# - We generate a file (a CMake fragment) in the object root which contains
# all the definitions that are required by CMake.
#
# - We generate the library table used by llvm-config.
#
# - We generate the dependencies for the CMake fragment, so that we will
# automatically reconfigure outselves.
set ( LLVMBUILDTOOL "${LLVM_MAIN_SRC_DIR}/utils/llvm-build/llvm-build" )
set ( LLVMCONFIGLIBRARYDEPENDENCIESINC
" $ { L L V M _ B I N A R Y _ D I R } / t o o l s / l l v m - c o n f i g / L i b r a r y D e p e n d e n c i e s . i n c " )
set ( LLVMBUILDCMAKEFRAG
" $ { L L V M _ B I N A R Y _ D I R } / L L V M B u i l d . c m a k e " )
# Create the list of optional components that are enabled
if ( LLVM_USE_INTEL_JITEVENTS )
set ( LLVMOPTIONALCOMPONENTS IntelJITEvents )
endif ( LLVM_USE_INTEL_JITEVENTS )
if ( LLVM_USE_OPROFILE )
set ( LLVMOPTIONALCOMPONENTS ${ LLVMOPTIONALCOMPONENTS } OProfileJIT )
endif ( LLVM_USE_OPROFILE )
# HLSL Change: use 'Unknown' in place of "${LLVM_NATIVE_ARCH}"
message ( STATUS "Constructing LLVMBuild project information" )
2018-05-29 22:19:37 +03:00
2016-12-28 22:52:27 +03:00
execute_process (
2024-06-20 20:11:49 +03:00
C O M M A N D $ { P y t h o n 3 _ E X E C U T A B L E } $ { L L V M B U I L D T O O L }
2016-12-28 22:52:27 +03:00
- - n a t i v e - t a r g e t U n k n o w n
- - e n a b l e - t a r g e t s " $ { L L V M _ T A R G E T S _ T O _ B U I L D } "
- - e n a b l e - o p t i o n a l - c o m p o n e n t s " $ { L L V M O P T I O N A L C O M P O N E N T S } "
- - w r i t e - l i b r a r y - t a b l e $ { L L V M C O N F I G L I B R A R Y D E P E N D E N C I E S I N C }
- - w r i t e - c m a k e - f r a g m e n t $ { L L V M B U I L D C M A K E F R A G }
O U T P U T _ V A R I A B L E L L V M B U I L D O U T P U T
E R R O R _ V A R I A B L E L L V M B U I L D E R R O R S
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
E R R O R _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
R E S U L T _ V A R I A B L E L L V M B U I L D R E S U L T )
# On Win32, CMake doesn't properly handle piping the default output/error
# streams into the GUI console. So, we explicitly catch and report them.
if ( NOT "${LLVMBUILDOUTPUT}" STREQUAL "" )
message ( STATUS "llvm-build output: ${LLVMBUILDOUTPUT}" )
endif ( )
if ( NOT "${LLVMBUILDRESULT}" STREQUAL "0" )
message ( FATAL_ERROR
" U n e x p e c t e d f a i l u r e e x e c u t i n g l l v m - b u i l d : $ { L L V M B U I L D E R R O R S } " )
endif ( )
# Include the generated CMake fragment. This will define properties from the
# LLVMBuild files in a format which is easy to consume from CMake, and will add
# the dependencies so that CMake will reconfigure properly when the LLVMBuild
# files change.
include ( ${ LLVMBUILDCMAKEFRAG } )
######
# Configure all of the various header file fragments LLVM uses which depend on
# configuration variables.
set ( LLVM_ENUM_TARGETS "" )
set ( LLVM_ENUM_ASM_PRINTERS "" )
set ( LLVM_ENUM_ASM_PARSERS "" )
set ( LLVM_ENUM_DISASSEMBLERS "" )
foreach ( t ${ LLVM_TARGETS_TO_BUILD } )
if ( NOT t STREQUAL "None" ) # HLSL Change - support for no target, but no continue() in CMake 2.8
set ( td ${ LLVM_MAIN_SRC_DIR } /lib/Target/ ${ t } )
list ( FIND LLVM_ALL_TARGETS ${ t } idx )
list ( FIND LLVM_EXPERIMENTAL_TARGETS_TO_BUILD ${ t } idy )
if ( idx LESS 0 AND idy LESS 0 )
message ( FATAL_ERROR " The target ` ${ t } ' does not exist.
I t s h o u l d b e o n e o f \ n $ { L L V M _ A L L _ T A R G E T S } " )
else ( )
set ( LLVM_ENUM_TARGETS "${LLVM_ENUM_TARGETS}LLVM_TARGET(${t})\n" )
endif ( )
file ( GLOB asmp_file "${td}/*AsmPrinter.cpp" )
if ( asmp_file )
set ( LLVM_ENUM_ASM_PRINTERS
" $ { L L V M _ E N U M _ A S M _ P R I N T E R S } LLVM_ASM_PRINTER ( ${ t } ) \ n " )
endif ( )
if ( EXISTS ${ td } /AsmParser/CMakeLists.txt )
set ( LLVM_ENUM_ASM_PARSERS
" $ { L L V M _ E N U M _ A S M _ P A R S E R S } LLVM_ASM_PARSER ( ${ t } ) \ n " )
endif ( )
if ( EXISTS ${ td } /Disassembler/CMakeLists.txt )
set ( LLVM_ENUM_DISASSEMBLERS
" $ { L L V M _ E N U M _ D I S A S S E M B L E R S } LLVM_DISASSEMBLER ( ${ t } ) \ n " )
endif ( )
endif ( ) # HLSL Change - support for no target
endforeach ( t )
# Produce the target definition files, which provide a way for clients to easily
# include various classes of targets.
configure_file (
$ { L L V M _ M A I N _ I N C L U D E _ D I R } / l l v m / C o n f i g / A s m P r i n t e r s . d e f . i n
$ { L L V M _ I N C L U D E _ D I R } / l l v m / C o n f i g / A s m P r i n t e r s . d e f
)
configure_file (
$ { L L V M _ M A I N _ I N C L U D E _ D I R } / l l v m / C o n f i g / A s m P a r s e r s . d e f . i n
$ { L L V M _ I N C L U D E _ D I R } / l l v m / C o n f i g / A s m P a r s e r s . d e f
)
configure_file (
$ { L L V M _ M A I N _ I N C L U D E _ D I R } / l l v m / C o n f i g / D i s a s s e m b l e r s . d e f . i n
$ { L L V M _ I N C L U D E _ D I R } / l l v m / C o n f i g / D i s a s s e m b l e r s . d e f
)
configure_file (
$ { L L V M _ M A I N _ I N C L U D E _ D I R } / l l v m / C o n f i g / T a r g e t s . d e f . i n
$ { L L V M _ I N C L U D E _ D I R } / l l v m / C o n f i g / T a r g e t s . d e f
)
# Configure the three LLVM configuration header files.
configure_file (
$ { L L V M _ M A I N _ I N C L U D E _ D I R } / l l v m / C o n f i g / c o n f i g . h . c m a k e
$ { L L V M _ I N C L U D E _ D I R } / l l v m / C o n f i g / c o n f i g . h )
configure_file (
$ { L L V M _ M A I N _ I N C L U D E _ D I R } / l l v m / C o n f i g / l l v m - c o n f i g . h . c m a k e
$ { L L V M _ I N C L U D E _ D I R } / l l v m / C o n f i g / l l v m - c o n f i g . h )
2023-06-30 20:15:17 +03:00
configure_file (
$ { L L V M _ M A I N _ I N C L U D E _ D I R } / l l v m / C o n f i g / a b i - b r e a k i n g . h . c m a k e
$ { L L V M _ I N C L U D E _ D I R } / l l v m / C o n f i g / a b i - b r e a k i n g . h )
2016-12-28 22:52:27 +03:00
configure_file (
$ { L L V M _ M A I N _ I N C L U D E _ D I R } / l l v m / S u p p o r t / D a t a T y p e s . h . c m a k e
$ { L L V M _ I N C L U D E _ D I R } / l l v m / S u p p o r t / D a t a T y p e s . h )
# They are not referenced. See set_output_directory().
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ LLVM_BINARY_DIR } /bin )
set ( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ LLVM_BINARY_DIR } /lib ${ LLVM_LIBDIR_SUFFIX } )
set ( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ LLVM_BINARY_DIR } /lib ${ LLVM_LIBDIR_SUFFIX } )
set ( CMAKE_BUILD_WITH_INSTALL_RPATH ON )
if ( APPLE )
CMake dxc as subproject fixes (#6050)
These changes allow us to use DXC as as CMake subproject (via
add_subdirectory).
Commit comments from each commit:
===
cmake: allow CMAKE_INSTALL_RPATH to be defined in superproject on APPLE
platforms
As on Linux, allow CMAKE_INSTALL_RPATH to be defined in a CMake
superproject.
===
cmake: Allow LLVM_ENABLE_ASSERTIONS=OFF to disable assertions in Debug
builds
Currently, this flag is only used to enable assertions in non-Debug
builds, but is not respected in Debug builds. That is, if set to false,
Debug builds will still assert. This change fixes that.
Note that by default, LLVM_ENABLE_ASSERTIONS is true in Debug builds, so
unless it's explicitly set to false, this is a no-op for most people.
===
cmake: Allow DIRECTX_HEADERS_INCLUDE_DIR to be defined from superproject
Useful for when DXC is included as a subdirectory. In Dawn/Chrome, we
use our own mirror of DirectX-Headers instead of checking out the repo's
submodules, so we need to override this variable.
2023-11-22 22:33:09 +03:00
if ( NOT DEFINED CMAKE_INSTALL_RPATH )
set ( CMAKE_INSTALL_NAME_DIR "@rpath" )
set ( CMAKE_INSTALL_RPATH "@executable_path/../lib" )
endif ( NOT DEFINED CMAKE_INSTALL_RPATH )
2016-12-28 22:52:27 +03:00
else ( UNIX )
if ( NOT DEFINED CMAKE_INSTALL_RPATH )
set ( CMAKE_INSTALL_RPATH "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}" )
if ( ${ CMAKE_SYSTEM_NAME } MATCHES "(FreeBSD|DragonFly)" )
set ( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,origin" )
set ( CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,origin" )
endif ( )
endif ( NOT DEFINED CMAKE_INSTALL_RPATH )
endif ( )
# Work around a broken bfd ld behavior. When linking a binary with a
# foo.so library, it will try to find any library that foo.so uses and
# check its symbols. This is wasteful (the check was done when foo.so
# was created) and can fail since it is not the dynamic linker and
# doesn't know how to handle search paths correctly.
if ( UNIX AND NOT APPLE AND NOT ${ CMAKE_SYSTEM_NAME } MATCHES "SunOS" )
set ( CMAKE_EXE_LINKER_FLAGS
" $ { C M A K E _ E X E _ L I N K E R _ F L A G S } - W l , - a l l o w - s h l i b - u n d e f i n e d " )
endif ( )
set ( CMAKE_INCLUDE_CURRENT_DIR ON )
# HLSL Change Starts - override assert to RaiseException instead of abort
# for better test behavior
if ( WIN32 AND NOT UNIX )
include_directories ( BEFORE "${LLVM_MAIN_INCLUDE_DIR}/llvm/llvm_assert" )
endif ( )
# HLSL Change Ends
include_directories ( ${ LLVM_INCLUDE_DIR } ${ LLVM_MAIN_INCLUDE_DIR } )
include_directories ( ${ LLVM_INCLUDE_DIR } /dxc/Tracing ) # HLSL Change
# when crosscompiling import the executable targets from a file
if ( LLVM_USE_HOST_TOOLS )
include ( CrossCompile )
endif ( LLVM_USE_HOST_TOOLS )
if ( ${ CMAKE_SYSTEM_NAME } MATCHES "(FreeBSD|DragonFly)" )
# On FreeBSD, /usr/local/* is not used by default. In order to build LLVM
# with libxml2, iconv.h, etc., we must add /usr/local paths.
include_directories ( "/usr/local/include" )
link_directories ( "/usr/local/lib" )
endif ( ${ CMAKE_SYSTEM_NAME } MATCHES "(FreeBSD|DragonFly)" )
if ( ${ CMAKE_SYSTEM_NAME } MATCHES SunOS )
SET ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -include llvm/Support/Solaris.h" )
endif ( ${ CMAKE_SYSTEM_NAME } MATCHES SunOS )
# Make sure we don't get -rdynamic in every binary. For those that need it,
# use export_executable_symbols(target).
set ( CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "" )
# enable warnings as errors for debug build
2024-06-25 01:25:14 +03:00
if ( MSVC )
2018-05-29 22:19:37 +03:00
SET ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /WX" )
2024-06-25 01:25:14 +03:00
endif ( MSVC )
2016-12-28 22:52:27 +03:00
include ( AddLLVM )
include ( TableGen )
if ( MINGW )
# People report that -O3 is unreliable on MinGW. The traditional
# build also uses -O2 for that reason:
llvm_replace_compiler_option ( CMAKE_CXX_FLAGS_RELEASE "-O3" "-O2" )
endif ( )
2021-10-20 20:32:45 +03:00
if ( LLVM_INCLUDE_TESTS AND WIN32 )
add_definitions ( /DMSFT_SUPPORTS_CHILD_PROCESSES )
endif ( )
2016-12-28 22:52:27 +03:00
# Put this before tblgen. Else we have a circular dependence.
add_subdirectory ( lib/Support )
add_subdirectory ( lib/MSSupport ) # HLSL Change
add_subdirectory ( lib/TableGen )
add_subdirectory ( utils/TableGen )
add_subdirectory ( include/llvm )
2021-11-02 21:43:47 +03:00
# HLSL - Change Start
add_subdirectory ( include/dxc )
# This over-specifies the dependency graph, but since generating these doesn't
# really depend on anything else in the build it is safe.
list ( APPEND LLVM_COMMON_DEPENDS HCTGen )
2022-11-24 05:10:29 +03:00
if ( EXISTS "${LLVM_MAIN_SRC_DIR}/external" )
add_subdirectory ( external ) # SPIRV change
endif ( )
include_directories ( AFTER ${ DIRECTX_HEADER_INCLUDE_DIR } /directx ${ DIRECTX_HEADER_INCLUDE_DIR } /wsl/stubs )
2021-11-02 21:43:47 +03:00
# HLSL - Change End
2016-12-28 22:52:27 +03:00
add_subdirectory ( lib )
2019-06-29 01:16:34 +03:00
if ( HLSL_EMBED_VERSION )
add_subdirectory ( utils/version )
endif ( )
2021-10-21 19:31:31 +03:00
if ( LLVM_INCLUDE_UTILS AND LLVM_INCLUDE_TESTS ) # HLSL Change - only when testing
add_subdirectory ( utils/FileCheck )
2016-12-28 22:52:27 +03:00
# add_subdirectory(utils/FileUpdate) # HLSL Change
2021-10-21 19:31:31 +03:00
add_subdirectory ( utils/count )
add_subdirectory ( utils/not )
add_subdirectory ( utils/llvm-lit )
add_subdirectory ( utils/yaml-bench )
2016-12-28 22:52:27 +03:00
else ( )
if ( LLVM_INCLUDE_TESTS )
message ( FATAL_ERROR " Including tests when not building utils will not work.
E i t h e r s e t L L V M _ I N C L U D E _ U T I L S t o O n , o r s e t L L V M _ I N C L D E _ T E S T S t o O f f . " )
endif ( )
endif ( )
2021-10-19 23:24:11 +03:00
if ( LLVM_INCLUDE_TESTS OR HLSL_INCLUDE_TESTS OR SPIRV_BUILD_TESTS ) # HLSL Change
2016-12-28 22:52:27 +03:00
add_subdirectory ( utils/unittest )
endif ( )
foreach ( binding ${ LLVM_BINDINGS_LIST } )
if ( EXISTS "${LLVM_MAIN_SRC_DIR}/bindings/${binding}/CMakeLists.txt" )
add_subdirectory ( bindings/ ${ binding } )
endif ( )
endforeach ( )
add_subdirectory ( projects )
if ( WITH_POLLY )
if ( NOT EXISTS ${ LLVM_MAIN_SRC_DIR } /tools/polly/CMakeLists.txt )
set ( WITH_POLLY OFF )
endif ( )
endif ( WITH_POLLY )
if ( LLVM_INCLUDE_TOOLS )
add_subdirectory ( tools )
endif ( )
if ( LLVM_INCLUDE_EXAMPLES AND 0 ) # HLSL Change - never build examples
add_subdirectory ( examples )
endif ( )
2021-10-20 20:32:45 +03:00
if ( LLVM_INCLUDE_TESTS )
2016-12-28 22:52:27 +03:00
add_subdirectory ( test )
add_subdirectory ( unittests )
if ( MSVC )
# This utility is used to prevent crashing tests from calling Dr. Watson on
# Windows.
add_subdirectory ( utils/KillTheDoctor )
endif ( )
# Add a global check rule now that all subdirectories have been traversed
# and we know the total set of lit testsuites.
get_property ( LLVM_LIT_TESTSUITES GLOBAL PROPERTY LLVM_LIT_TESTSUITES )
get_property ( LLVM_LIT_PARAMS GLOBAL PROPERTY LLVM_LIT_PARAMS )
get_property ( LLVM_LIT_DEPENDS GLOBAL PROPERTY LLVM_LIT_DEPENDS )
get_property ( LLVM_LIT_EXTRA_ARGS GLOBAL PROPERTY LLVM_LIT_EXTRA_ARGS )
add_lit_target ( check-all
" R u n n i n g a l l r e g r e s s i o n t e s t s "
$ { L L V M _ L I T _ T E S T S U I T E S }
P A R A M S $ { L L V M _ L I T _ P A R A M S }
D E P E N D S $ { L L V M _ L I T _ D E P E N D S }
A R G S $ { L L V M _ L I T _ E X T R A _ A R G S }
)
2022-12-01 20:06:42 +03:00
add_custom_target ( test-depends DEPENDS ${ LLVM_LIT_DEPENDS } ) # HLSL Change
2016-12-28 22:52:27 +03:00
endif ( )
if ( LLVM_INCLUDE_DOCS )
add_subdirectory ( docs )
endif ( )
2024-06-25 01:25:14 +03:00
if ( LLVM_BUILD_DOCS )
add_hlsl_hctgen ( DxilDocs OUTPUT docs/DXIL.rst CODE_TAG ) # HLSL Change
endif ( )
2021-11-02 21:43:47 +03:00
2016-12-28 22:52:27 +03:00
add_subdirectory ( cmake/modules )
if ( NOT LLVM_INSTALL_TOOLCHAIN_ONLY )
install ( DIRECTORY include/llvm include/llvm-c
D E S T I N A T I O N i n c l u d e
C O M P O N E N T l l v m - h e a d e r s
F I L E S _ M A T C H I N G
P A T T E R N " * . d e f "
P A T T E R N " * . h "
P A T T E R N " * . t d "
P A T T E R N " * . i n c "
P A T T E R N " L I C E N S E . T X T "
P A T T E R N " . s v n " E X C L U D E
)
install ( DIRECTORY ${ LLVM_INCLUDE_DIR } /llvm
D E S T I N A T I O N i n c l u d e
C O M P O N E N T l l v m - h e a d e r s
F I L E S _ M A T C H I N G
P A T T E R N " * . d e f "
P A T T E R N " * . h "
P A T T E R N " * . g e n "
P A T T E R N " * . i n c "
# Exclude include/llvm/CMakeFiles/intrinsics_gen.dir, matched by "*.def"
P A T T E R N " C M a k e F i l e s " E X C L U D E
P A T T E R N " c o n f i g . h " E X C L U D E
P A T T E R N " . s v n " E X C L U D E
)
if ( NOT CMAKE_CONFIGURATION_TYPES )
add_custom_target ( installhdrs
D E P E N D S $ { n a m e }
C O M M A N D " $ { C M A K E _ C O M M A N D } "
- D C M A K E _ I N S T A L L _ C O M P O N E N T = l l v m - h e a d e r s
- P " $ { C M A K E _ B I N A R Y _ D I R } / c m a k e _ i n s t a l l . c m a k e " )
endif ( )
endif ( )
2020-05-11 22:23:20 +03:00
2022-11-15 21:17:03 +03:00
include ( CoverageReport )
2023-04-18 18:09:21 +03:00
# HLSL Change begin - Set default distribution value.
set ( LLVM_DISTRIBUTION_COMPONENTS "dxc;dxcompiler;dxc-headers" CACHE STRING "" )
# HLSL Change end - Set default distribution value.
# This must be at the end of the LLVM root CMakeLists file because it must run
# after all targets are created.
if ( LLVM_DISTRIBUTION_COMPONENTS )
# HLSL Change - Deleted restriction for non-IDE builds. This works with Visual
# Studio for DXC because of the limited number of targets.
add_custom_target ( install-distribution )
foreach ( target ${ LLVM_DISTRIBUTION_COMPONENTS } )
if ( TARGET install- ${ target } )
add_dependencies ( install-distribution install- ${ target } )
else ( )
message ( FATAL_ERROR "Specified distribution component '${target}' doesn't have an install target" )
endif ( )
endforeach ( )
endif ( )
2021-04-30 05:13:30 +03:00
# Disable regeneration target for official builds as they always fun a full clean build.
# This should eliminate the race-condition issue with "Cannot restore timestamp".
if ( HLSL_OFFICIAL_BUILD )
set ( CMAKE_SUPPRESS_REGENERATION ON )
endif ( HLSL_OFFICIAL_BUILD )
2020-05-11 22:23:20 +03:00
if ( NOT "${DXC_CMAKE_ENDS_INCLUDE}" STREQUAL "" )
include ( ${ DXC_CMAKE_ENDS_INCLUDE } )
2021-10-19 23:24:11 +03:00
endif ( )