summaryrefslogtreecommitdiffstats
path: root/source/slang/CMakeLists.txt
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2024-01-24 17:29:09 +0800
committerGitHub <noreply@github.com>2024-01-24 17:29:09 +0800
commit4e7e820c3dda716334ccbe9854379e46d8d332bb (patch)
tree2b1456d26133d901c397bd64391494ed1ac44c41 /source/slang/CMakeLists.txt
parentba4baf41155afcc4943dcc3887a7c7a324607939 (diff)
Generate lookup tables from cmake (#3461)
* Generate lookup tables from cmake * Correct add_custom_command generator dependencies * set options for lookup table source * include path * use slang_add_target for capability generated targets * vs project regenerate * ci wobble --------- Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'source/slang/CMakeLists.txt')
-rw-r--r--source/slang/CMakeLists.txt85
1 files changed, 60 insertions, 25 deletions
diff --git a/source/slang/CMakeLists.txt b/source/slang/CMakeLists.txt
index 44785559f..cbec1c793 100644
--- a/source/slang/CMakeLists.txt
+++ b/source/slang/CMakeLists.txt
@@ -29,7 +29,7 @@ add_custom_command(
COMMAND
slang-generate ${SLANG_STDLIB_META_SOURCE} --target-directory
${SLANG_STDLIB_META_OUTPUT_DIR}
- DEPENDS ${SLANG_STDLIB_META_SOURCE}
+ DEPENDS ${SLANG_STDLIB_META_SOURCE} slang-generate
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
VERBATIM
)
@@ -54,44 +54,42 @@ glob_append(SLANG_CAPABILITY_SOURCE "*.capdef")
set(SLANG_CAPABILITY_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/capability")
# Generate the output file list
-set(SLANG_CAPABILITY_GENERATED_FILES
+set(SLANG_CAPABILITY_GENERATED_HEADERS
"${SLANG_CAPABILITY_OUTPUT_DIR}/slang-generated-capability-defs.h"
"${SLANG_CAPABILITY_OUTPUT_DIR}/slang-generated-capability-defs-impl.h"
+)
+set(SLANG_CAPABILITY_GENERATED_SOURCE
+ ${SLANG_CAPABILITY_GENERATED_HEADERS}
"${SLANG_CAPABILITY_OUTPUT_DIR}/slang-lookup-capability-defs.cpp"
)
add_custom_command(
- OUTPUT ${SLANG_CAPABILITY_GENERATED_FILES}
+ OUTPUT ${SLANG_CAPABILITY_GENERATED_SOURCE}
COMMAND ${CMAKE_COMMAND} -E make_directory ${SLANG_CAPABILITY_OUTPUT_DIR}
COMMAND
- slang-capability-generator ${SLANG_CAPABILITY_SOURCE} --target-directory ${SLANG_CAPABILITY_OUTPUT_DIR}
- DEPENDS ${SLANG_CAPABILITY_SOURCE}
+ slang-capability-generator ${SLANG_CAPABILITY_SOURCE} --target-directory
+ ${SLANG_CAPABILITY_OUTPUT_DIR}
+ DEPENDS ${SLANG_CAPABILITY_SOURCE} slang-capability-generator
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
VERBATIM
)
-add_library(
+slang_add_target(
slang-capability-defs
- INTERFACE
+ OBJECT
+ EXPLICIT_SOURCE ${SLANG_CAPABILITY_GENERATED_HEADERS}
+ LINK_WITH_PRIVATE core
+ INCLUDE_DIRECTORIES_PUBLIC
+ "${SLANG_CAPABILITY_OUTPUT_DIR}"
+ "${slang_SOURCE_DIR}/source/slang"
EXCLUDE_FROM_ALL
- ${SLANG_CAPABILITY_GENERATED_FILES}
+ FOLDER generated
)
-set_target_properties(slang-capability-defs PROPERTIES FOLDER generated)
-target_include_directories(
- slang-capability-defs
- INTERFACE ${SLANG_CAPABILITY_OUTPUT_DIR}
- INTERFACE ${slang_SOURCE_DIR}/source/slang
-)
-
-add_library(
+slang_add_target(
slang-capability-lookup
- INTERFACE
+ OBJECT
+ EXPLICIT_SOURCE ${SLANG_CAPABILITY_GENERATED_SOURCE}
+ LINK_WITH_PRIVATE core slang-capability-defs
EXCLUDE_FROM_ALL
- ${SLANG_CAPABILITY_GENERATED_FILES}
-)
-set_target_properties(slang-capability-lookup PROPERTIES FOLDER generated)
-target_sources(
- slang-capability-lookup
- INTERFACE
- "${SLANG_CAPABILITY_OUTPUT_DIR}/slang-lookup-capability-defs.cpp"
+ FOLDER generated
)
#
@@ -132,7 +130,7 @@ add_custom_command(
slang-cpp-extractor ${SLANG_REFLECT_INPUT} -strip-prefix slang- -o
${SLANG_REFLECT_OUTPUT_DIR}/slang-generated -output-fields -mark-suffix
_CLASS
- DEPENDS ${SLANG_REFLECT_INPUT}
+ DEPENDS ${SLANG_REFLECT_INPUT} slang-cpp-extractor
VERBATIM
)
@@ -149,6 +147,40 @@ target_include_directories(
)
#
+# generated lookup tables
+#
+
+set(SLANG_LOOKUP_GENERATOR_INPUT_JSON
+ "${slang_SOURCE_DIR}/external/spirv-headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json"
+)
+set(SLANG_LOOKUP_GENERATOR_OUTPUT_DIR
+ "${CMAKE_CURRENT_BINARY_DIR}/slang-lookup-tables/"
+)
+set(SLANG_LOOKUP_GENERATED_SOURCE
+ "${SLANG_LOOKUP_GENERATOR_OUTPUT_DIR}/slang-lookup-GLSLstd450.cpp"
+)
+add_custom_command(
+ OUTPUT ${SLANG_LOOKUP_GENERATED_SOURCE}
+ COMMAND
+ ${CMAKE_COMMAND} -E make_directory ${SLANG_LOOKUP_GENERATOR_OUTPUT_DIR}
+ COMMAND
+ slang-lookup-generator ${SLANG_LOOKUP_GENERATOR_INPUT_JSON}
+ ${SLANG_LOOKUP_GENERATED_SOURCE} "GLSLstd450" "GLSLstd450"
+ "spirv/unified1/GLSL.std.450.h"
+ DEPENDS ${SLANG_LOOKUP_GENERATOR_INPUT_JSON} slang-lookup-generator
+ VERBATIM
+)
+
+slang_add_target(
+ slang-lookup-tables
+ OBJECT
+ EXPLICIT_SOURCE ${SLANG_LOOKUP_GENERATED_SOURCE}
+ LINK_WITH_PRIVATE core SPIRV-Headers
+ EXCLUDE_FROM_ALL
+ FOLDER generated
+)
+
+#
# Slang static
#
@@ -170,6 +202,7 @@ slang_add_target(
slang-capability-lookup
slang-meta-headers
slang-reflect-headers
+ slang-lookup-tables
SPIRV-Headers
FOLDER generators
)
@@ -190,6 +223,7 @@ add_custom_command(
COMMAND
slang-bootstrap -archive-type riff-lz4 -save-stdlib-bin-source
${SLANG_STDLIB_GENERATED_HEADER}
+ DEPENDS slang-bootstrap
VERBATIM
)
add_library(
@@ -217,6 +251,7 @@ slang_add_target(
slang-capability-defs
slang-capability-lookup
slang-reflect-headers
+ slang-lookup-tables
SPIRV-Headers
# slang.h is in the project root, so include that directory in the interface
# for slang