From 494efd7254f28ec46aff84bb1c06fe582a743c1a Mon Sep 17 00:00:00 2001 From: Ellie Hermaszewska Date: Thu, 18 Jul 2024 13:12:35 +0800 Subject: 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 --- source/slang/CMakeLists.txt | 105 ++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 58 deletions(-) (limited to 'source') 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,44 +201,10 @@ 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 + $<$:-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 + $<$:slang-stdlib-embed-headers> + $<$:slang-meta-headers> + EXTRA_COMPILE_DEFINITIONS_PRIVATE + $<$>:SLANG_WITHOUT_EMBEDDED_STD_LIB> + $<$>:SLANG_DISABLE_STDLIB_SOURCE> + EXPORT_MACRO_PREFIX SLANG + INSTALL + PUBLIC_HEADERS ${slang_SOURCE_DIR}/slang*.h ${CMAKE_CURRENT_BINARY_DIR}/slang-version-header/*.h +) -- cgit v1.2.3