summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2024-07-18 13:12:35 +0800
committerGitHub <noreply@github.com>2024-07-18 13:12:35 +0800
commit494efd7254f28ec46aff84bb1c06fe582a743c1a (patch)
tree646ec4c4698ba508d04cb6b25d92d85ee242fc97
parent3c092719a51fd954ead3c14561b0dcf4d6659695 (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.cmake11
-rw-r--r--source/slang/CMakeLists.txt105
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
+)