diff options
| author | Ellie Hermaszewska <ellieh@nvidia.com> | 2024-01-24 17:29:09 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-24 17:29:09 +0800 |
| commit | 4e7e820c3dda716334ccbe9854379e46d8d332bb (patch) | |
| tree | 2b1456d26133d901c397bd64391494ed1ac44c41 /source/slang/CMakeLists.txt | |
| parent | ba4baf41155afcc4943dcc3887a7c7a324607939 (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.txt | 85 |
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 |
