diff options
| author | Ellie Hermaszewska <ellieh@nvidia.com> | 2024-07-18 13:12:35 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-18 13:12:35 +0800 |
| commit | 494efd7254f28ec46aff84bb1c06fe582a743c1a (patch) | |
| tree | 646ec4c4698ba508d04cb6b25d92d85ee242fc97 | |
| parent | 3c092719a51fd954ead3c14561b0dcf4d6659695 (diff) | |
Reduce duplication in slang lib builds (#4651)
* spelling
* Reduce duplication in slang lib builds
Closes (as much as possible) https://github.com/shader-slang/slang/issues/4615
The only case where we could actually make a difference would be an
embedded stdlib and static slang, which isn't a configuration anyone
actually uses. Nonetheless, clean up this bit
| -rw-r--r-- | cmake/SlangTarget.cmake | 11 | ||||
| -rw-r--r-- | source/slang/CMakeLists.txt | 105 |
2 files changed, 56 insertions, 60 deletions
diff --git a/cmake/SlangTarget.cmake b/cmake/SlangTarget.cmake index c9110a6c0..e370a4987 100644 --- a/cmake/SlangTarget.cmake +++ b/cmake/SlangTarget.cmake @@ -49,9 +49,10 @@ function(slang_add_target dir type) EXPLICIT_SOURCE # Additional directories from which to glob source EXTRA_SOURCE_DIRS - # Additional compile definitions + # Additional compile definitions and options EXTRA_COMPILE_DEFINITIONS_PRIVATE EXTRA_COMPILE_DEFINITIONS_PUBLIC + EXTRA_COMPILE_OPTIONS_PRIVATE # Targets with which to link privately LINK_WITH_PRIVATE # Frameworks with which to link privately @@ -288,7 +289,7 @@ function(slang_add_target dir type) endforeach() # - # Other preprocessor defines + # Other preprocessor defines and options # if(ARG_EXTRA_COMPILE_DEFINITIONS_PRIVATE) target_compile_definitions( @@ -302,6 +303,12 @@ function(slang_add_target dir type) PUBLIC ${ARG_EXTRA_COMPILE_DEFINITIONS_PUBLIC} ) endif() + if(ARG_EXTRA_COMPILE_OPTIONS_PRIVATE) + target_compile_options( + ${target} + PRIVATE ${ARG_EXTRA_COMPILE_OPTIONS_PRIVATE} + ) + endif() # # Since we do a lot of dynamic loading, unconditionally set the build rpath diff --git a/source/slang/CMakeLists.txt b/source/slang/CMakeLists.txt index 2888bbb16..27019f41a 100644 --- a/source/slang/CMakeLists.txt +++ b/source/slang/CMakeLists.txt @@ -201,45 +201,11 @@ slang_add_target( FOLDER generated ) -set(SLANG_CAPATURE_REPLAY_SYSTEM +set(SLANG_CAPTURE_REPLAY_SYSTEM "${slang_SOURCE_DIR}/source/slang-capture-replay" ) # -# Slang static -# - -# TODO: Avoid compiling everything in this directory twice (once here and again -# for the shared library). This will be easier once premake is gone and we can -# move slang-stdlib-api.cpp to the build directory. It's basically instant with -# ccache, but that's not available everywhere. -slang_add_target( - . - OBJECT - TARGET_NAME slang-no-embedded-stdlib - EXTRA_SOURCE_DIRS ${SLANG_CAPATURE_REPLAY_SYSTEM} - USE_EXTRA_WARNINGS - EXCLUDE_FROM_ALL - EXTRA_COMPILE_DEFINITIONS_PUBLIC SLANG_STATIC - LINK_WITH_PRIVATE - core - compiler-core - # Bundle the source unconditionally - slang-capability-defs - slang-capability-lookup - slang-meta-headers - slang-reflect-headers - slang-lookup-tables - SPIRV-Headers - INCLUDE_DIRECTORIES_PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/slang-version-header - FOLDER generators -) -target_compile_definitions( - slang-no-embedded-stdlib - PRIVATE SLANG_WITHOUT_EMBEDDED_STD_LIB -) - -# # Generate an embeddable stdlib # @@ -267,46 +233,69 @@ target_include_directories( ) # -# Slang itself +# Generate the version header # + configure_file(${slang_SOURCE_DIR}/slang-tag-version.h.in slang-version-header/slang-tag-version.h) -slang_add_target( - . - ${SLANG_LIB_TYPE} - EXTRA_SOURCE_DIRS ${SLANG_CAPATURE_REPLAY_SYSTEM} + +# +# Slang itself +# + +set(slang_common_args + EXTRA_SOURCE_DIRS ${SLANG_CAPTURE_REPLAY_SYSTEM} USE_EXTRA_WARNINGS LINK_WITH_PRIVATE core compiler-core - prelude slang-capability-defs slang-capability-lookup slang-reflect-headers slang-lookup-tables SPIRV-Headers + EXTRA_COMPILE_OPTIONS_PRIVATE + # a warning is disabled for a memset boundary check. + # everything looked fine and it is unclear why the checking fails + $<$<CXX_COMPILER_ID:GNU>:-Wno-error=stringop-overflow> # slang.h is in the project root, so include that directory in the interface # for slang INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR} INCLUDE_DIRECTORIES_PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/slang-version-header EXPORT_MACRO_PREFIX SLANG - INSTALL - PUBLIC_HEADERS ${slang_SOURCE_DIR}/slang*.h ${CMAKE_CURRENT_BINARY_DIR}/slang-version-header/*.h ) -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - # a warning is disabled for a memset boundary check. - # everything looked fine and it is unclear why the checking fails - target_compile_options(slang PRIVATE -Wno-error=stringop-overflow) -endif() +# +# Minimal static slang used in generating the embedded stdlib +# -if(SLANG_EMBED_STDLIB_SOURCE) - target_link_libraries(slang PRIVATE slang-meta-headers) -else() - target_compile_definitions(slang PRIVATE SLANG_DISABLE_STDLIB_SOURCE) -endif() +slang_add_target( + . + OBJECT + ${slang_common_args} + TARGET_NAME slang-no-embedded-stdlib + EXCLUDE_FROM_ALL + LINK_WITH_PRIVATE slang-meta-headers + EXTRA_COMPILE_DEFINITIONS_PUBLIC SLANG_STATIC + EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_WITHOUT_EMBEDDED_STD_LIB + FOLDER generators +) -if(SLANG_EMBED_STDLIB) - target_link_libraries(slang PRIVATE slang-stdlib-embed-headers) -else() - target_compile_definitions(slang PRIVATE SLANG_WITHOUT_EMBEDDED_STD_LIB) -endif() +# +# Slang with whatever options +# + +slang_add_target( + . + ${SLANG_LIB_TYPE} + ${slang_common_args} + LINK_WITH_PRIVATE + prelude + $<$<BOOL:${SLANG_EMBED_STDLIB}>:slang-stdlib-embed-headers> + $<$<BOOL:${SLANG_EMBED_STDLIB_SOURCE}>:slang-meta-headers> + EXTRA_COMPILE_DEFINITIONS_PRIVATE + $<$<NOT:$<BOOL:${SLANG_EMBED_STDLIB}>>:SLANG_WITHOUT_EMBEDDED_STD_LIB> + $<$<NOT:$<BOOL:${SLANG_EMBED_STDLIB_SOURCE}>>:SLANG_DISABLE_STDLIB_SOURCE> + EXPORT_MACRO_PREFIX SLANG + INSTALL + PUBLIC_HEADERS ${slang_SOURCE_DIR}/slang*.h ${CMAKE_CURRENT_BINARY_DIR}/slang-version-header/*.h +) |
