summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Lipp <15105596+fknfilewalker@users.noreply.github.com>2024-02-14 15:29:55 +0100
committerGitHub <noreply@github.com>2024-02-14 22:29:55 +0800
commit7414252b091c89381a05aea987750666e86b6b35 (patch)
tree07a7d5d3b5a6638cbda7380b2a3dca5df55a7f80
parent2e35b08d279b4eb37a359941a06970cdea973502 (diff)
cmake: add options to disable gfx, test, example, ... targets (#3572)
* cmake: add options to disable gfx, test and example targets * cmake: enable gfx, test, example targets by default * cmake: use same naming scheme * cmake: option to disable slangd and slangc targets * cmake: option for enabling slang-rt target * cmake: option to deactivate llvm and glslang * cmake: better option text * cmake: remove duplicate slang-llvm option * doc: update docs/building.md --------- Co-authored-by: Yong He <yonghe@outlook.com>
-rw-r--r--CMakeLists.txt592
-rw-r--r--docs/building.md7
-rw-r--r--external/CMakeLists.txt24
3 files changed, 329 insertions, 294 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f055b01ad..a295e81a4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -87,6 +87,14 @@ option(SLANG_EMBED_STDLIB "Build slang with an embedded version of the stdlib")
option(SLANG_ENABLE_FULL_IR_VALIDATION "Enable full IR validation (SLOW!)")
option(SLANG_ENABLE_ASAN "Enable ASAN (address sanitizer)")
+option(SLANG_ENABLE_GFX "Enable gfx targets" ON)
+option(SLANG_ENABLE_SLANGD "Enable language server target" ON)
+option(SLANG_ENABLE_SLANGC "Enable standalone compiler target" ON)
+option(SLANG_ENABLE_SLANGRT "Enable runtime target" ON)
+option(SLANG_ENABLE_SLANG_GLSLANG "Enable glslang dependency and slang-glslang wrapper target" ON)
+option(SLANG_ENABLE_TESTS "Enable test targets, requires SLANG_ENABLE_GFX, SLANG_ENABLE_SLANGD and SLANG_ENABLE_SLANGRT" ON)
+option(SLANG_ENABLE_EXAMPLES "Enable example targets, requires SLANG_ENABLE_GFX" ON)
+
set(SLANG_GENERATORS_PATH
""
CACHE PATH
@@ -186,16 +194,18 @@ slang_add_target(
INCLUDE_DIRECTORIES_PUBLIC source
)
-slang_add_target(
- source/slang-rt
- SHARED
- # This compiles 'core' again with the SLANG_RT_DYNAMIC_EXPORT macro defined
- EXTRA_SOURCE_DIRS source/core
- USE_EXTRA_WARNINGS
- LINK_WITH_PRIVATE miniz lz4_static Threads::Threads ${CMAKE_DL_LIBS}
- EXPORT_MACRO_PREFIX SLANG_RT
- INSTALL
-)
+if(SLANG_ENABLE_SLANGRT)
+ slang_add_target(
+ source/slang-rt
+ SHARED
+ # This compiles 'core' again with the SLANG_RT_DYNAMIC_EXPORT macro defined
+ EXTRA_SOURCE_DIRS source/core
+ USE_EXTRA_WARNINGS
+ LINK_WITH_PRIVATE miniz lz4_static Threads::Threads ${CMAKE_DL_LIBS}
+ EXPORT_MACRO_PREFIX SLANG_RT
+ INSTALL
+ )
+endif()
slang_add_target(
source/compiler-core
@@ -275,38 +285,45 @@ generator(
add_subdirectory(prelude)
add_subdirectory(source/slang)
-slang_add_target(
- tools/slangd
- EXECUTABLE
- LINK_WITH_PRIVATE
- core
- slang
- slang-reflect-headers
- slang-capability-defs
- Threads::Threads
- INSTALL
-)
-slang_add_target(
- source/slangc
- EXECUTABLE
- USE_FEWER_WARNINGS
- LINK_WITH_PRIVATE core slang Threads::Threads
- INSTALL
-)
+if(SLANG_ENABLE_SLANGD)
+ slang_add_target(
+ tools/slangd
+ EXECUTABLE
+ LINK_WITH_PRIVATE
+ core
+ slang
+ slang-reflect-headers
+ slang-capability-defs
+ Threads::Threads
+ INSTALL
+ )
+endif()
+if(SLANG_ENABLE_SLANGC)
+ slang_add_target(
+ source/slangc
+ EXECUTABLE
+ USE_FEWER_WARNINGS
+ LINK_WITH_PRIVATE core slang Threads::Threads
+ INSTALL
+ )
+endif()
#
# Our wrappers for glslang and llvm
#
-slang_add_target(
- source/slang-glslang
- MODULE
- USE_EXTRA_WARNINGS
- LINK_WITH_PRIVATE glslang SPIRV SPIRV-Tools-opt
- INSTALL
-)
-# Our only interface is through what we define in source/slang-glslang, in the
-# interests of hygiene, hide anything else we link in.
-add_supported_cxx_linker_flags(slang-glslang PRIVATE "-Wl,--exclude-libs,ALL")
+if(SLANG_ENABLE_SLANG_GLSLANG)
+ slang_add_target(
+ source/slang-glslang
+ MODULE
+ USE_EXTRA_WARNINGS
+ LINK_WITH_PRIVATE glslang SPIRV SPIRV-Tools-opt
+ INSTALL
+ )
+ # Our only interface is through what we define in source/slang-glslang, in the
+ # interests of hygiene, hide anything else we link in.
+ add_supported_cxx_linker_flags(slang-glslang PRIVATE "-Wl,--exclude-libs,ALL")
+endif()
+
if(SLANG_SLANG_LLVM_FLAVOR STREQUAL "FETCH_BINARY")
#
@@ -416,85 +433,87 @@ elseif(SLANG_SLANG_LLVM_FLAVOR STREQUAL "USE_SYSTEM_LLVM")
# pulling in libLLVM.so)
endif()
-#
-# `platform` contains all the platform abstractions for a GUI application.
-#
-slang_add_target(
- tools/platform
- SHARED
- EXCLUDE_FROM_ALL
- USE_FEWER_WARNINGS
- LINK_WITH_PRIVATE
- core
- imgui
- $<$<BOOL:${SLANG_ENABLE_XLIB}>:X11::X11>
- $<$<PLATFORM_ID:Darwin>:-framework Cocoa>
- $<$<PLATFORM_ID:Darwin>:-framework QuartzCore>
- ${CMAKE_DL_LIBS}
- EXTRA_COMPILE_DEFINITIONS_PRIVATE
- $<$<BOOL:${SLANG_ENABLE_XLIB}>:SLANG_ENABLE_XLIB>
- INCLUDE_FROM_PRIVATE gfx
- INCLUDE_DIRECTORIES_PUBLIC tools/platform
- EXPORT_MACRO_PREFIX SLANG_PLATFORM
-)
+if(SLANG_ENABLE_GFX)
+ #
+ # `platform` contains all the platform abstractions for a GUI application.
+ #
+ slang_add_target(
+ tools/platform
+ SHARED
+ EXCLUDE_FROM_ALL
+ USE_FEWER_WARNINGS
+ LINK_WITH_PRIVATE
+ core
+ imgui
+ $<$<BOOL:${SLANG_ENABLE_XLIB}>:X11::X11>
+ $<$<PLATFORM_ID:Darwin>:-framework Cocoa>
+ $<$<PLATFORM_ID:Darwin>:-framework QuartzCore>
+ ${CMAKE_DL_LIBS}
+ EXTRA_COMPILE_DEFINITIONS_PRIVATE
+ $<$<BOOL:${SLANG_ENABLE_XLIB}>:SLANG_ENABLE_XLIB>
+ INCLUDE_FROM_PRIVATE gfx
+ INCLUDE_DIRECTORIES_PUBLIC tools/platform
+ EXPORT_MACRO_PREFIX SLANG_PLATFORM
+ )
-#
-# GFX
-#
-slang_add_target(
- tools/gfx
- SHARED
- USE_FEWER_WARNINGS
- LINK_WITH_PRIVATE
- core
- slang
- Vulkan-Headers
- $<$<BOOL:${SLANG_ENABLE_XLIB}>:X11::X11>
- $<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cudart;CUDA::cuda_driver>
- EXTRA_COMPILE_DEFINITIONS_PRIVATE
- $<$<BOOL:${SLANG_ENABLE_CUDA}>:GFX_ENABLE_CUDA>
- $<$<BOOL:${SLANG_ENABLE_OPTIX}>:GFX_OPTIX>
- $<$<BOOL:${SLANG_ENABLE_NVAPI}>:GFX_NVAPI>
- $<$<BOOL:${SLANG_ENABLE_XLIB}>:SLANG_ENABLE_XLIB>
- # This is a shared library, so we need to set a preprocessor macro to mark
- # exported symbols
- EXPORT_MACRO_PREFIX SLANG_GFX
- # slang-gfx is in this directory, anything which depends on gfx should include
- # this
- INCLUDE_DIRECTORIES_PUBLIC .
- REQUIRES copy-gfx-slang-modules
- INSTALL
- FOLDER gfx
-)
-set(modules_dest_dir $<TARGET_FILE_DIR:slang-test>)
-add_custom_target(
- copy-gfx-slang-modules
- COMMAND ${CMAKE_COMMAND} -E make_directory ${modules_dest_dir}
- COMMAND
- ${CMAKE_COMMAND} -E copy tools/gfx/gfx.slang
- ${modules_dest_dir}/gfx.slang
- COMMAND
- ${CMAKE_COMMAND} -E copy tools/gfx/slang.slang
- ${modules_dest_dir}/slang.slang
- WORKING_DIRECTORY ${slang_SOURCE_DIR}
- VERBATIM
-)
-set_target_properties(copy-gfx-slang-modules PROPERTIES FOLDER generators)
-install(
- FILES ${modules_dest_dir}/gfx.slang ${modules_dest_dir}/slang.slang
- DESTINATION ${runtime_subdir}
-)
+ #
+ # GFX
+ #
+ slang_add_target(
+ tools/gfx
+ SHARED
+ USE_FEWER_WARNINGS
+ LINK_WITH_PRIVATE
+ core
+ slang
+ Vulkan-Headers
+ $<$<BOOL:${SLANG_ENABLE_XLIB}>:X11::X11>
+ $<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cudart;CUDA::cuda_driver>
+ EXTRA_COMPILE_DEFINITIONS_PRIVATE
+ $<$<BOOL:${SLANG_ENABLE_CUDA}>:GFX_ENABLE_CUDA>
+ $<$<BOOL:${SLANG_ENABLE_OPTIX}>:GFX_OPTIX>
+ $<$<BOOL:${SLANG_ENABLE_NVAPI}>:GFX_NVAPI>
+ $<$<BOOL:${SLANG_ENABLE_XLIB}>:SLANG_ENABLE_XLIB>
+ # This is a shared library, so we need to set a preprocessor macro to mark
+ # exported symbols
+ EXPORT_MACRO_PREFIX SLANG_GFX
+ # slang-gfx is in this directory, anything which depends on gfx should include
+ # this
+ INCLUDE_DIRECTORIES_PUBLIC .
+ REQUIRES copy-gfx-slang-modules
+ INSTALL
+ FOLDER gfx
+ )
+ set(modules_dest_dir $<TARGET_FILE_DIR:slang-test>)
+ add_custom_target(
+ copy-gfx-slang-modules
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${modules_dest_dir}
+ COMMAND
+ ${CMAKE_COMMAND} -E copy tools/gfx/gfx.slang
+ ${modules_dest_dir}/gfx.slang
+ COMMAND
+ ${CMAKE_COMMAND} -E copy tools/gfx/slang.slang
+ ${modules_dest_dir}/slang.slang
+ WORKING_DIRECTORY ${slang_SOURCE_DIR}
+ VERBATIM
+ )
+ set_target_properties(copy-gfx-slang-modules PROPERTIES FOLDER generators)
+ install(
+ FILES ${modules_dest_dir}/gfx.slang ${modules_dest_dir}/slang.slang
+ DESTINATION ${runtime_subdir}
+ )
-slang_add_target(
- tools/gfx-util
- STATIC
- LINK_WITH_PRIVATE core
- INCLUDE_FROM_PRIVATE gfx
- # The headers are included with 'include "gfx-util/blah.h"' which is found
- # in the tools directory
- INCLUDE_DIRECTORIES_PUBLIC tools
- FOLDER gfx
-)
+ slang_add_target(
+ tools/gfx-util
+ STATIC
+ LINK_WITH_PRIVATE core
+ INCLUDE_FROM_PRIVATE gfx
+ # The headers are included with 'include "gfx-util/blah.h"' which is found
+ # in the tools directory
+ INCLUDE_DIRECTORIES_PUBLIC tools
+ FOLDER gfx
+ )
+endif()
#
# Installing any documentation
@@ -508,196 +527,203 @@ endif()
#
# The test executables and runtime-loaded modules
#
+if(SLANG_ENABLE_TESTS AND SLANG_ENABLE_GFX AND SLANG_ENABLE_SLANGD AND SLANG_ENABLE_SLANGRT)
+ slang_add_target(
+ tools/test-server
+ EXECUTABLE
+ EXCLUDE_FROM_ALL
+ LINK_WITH_PRIVATE core compiler-core slang
+ FOLDER test
+ )
+ slang_add_target(
+ tools/test-process
+ EXECUTABLE
+ EXCLUDE_FROM_ALL
+ LINK_WITH_PRIVATE core compiler-core
+ FOLDER test
+ )
-slang_add_target(
- tools/test-server
- EXECUTABLE
- EXCLUDE_FROM_ALL
- LINK_WITH_PRIVATE core compiler-core slang
- FOLDER test
-)
-slang_add_target(
- tools/test-process
- EXECUTABLE
- EXCLUDE_FROM_ALL
- LINK_WITH_PRIVATE core compiler-core
- FOLDER test
-)
-
-slang_add_target(
- tools/slang-test
- EXECUTABLE
- USE_FEWER_WARNINGS
- LINK_WITH_PRIVATE core compiler-core slang ${CMAKE_DL_LIBS} Threads::Threads
- REQUIRES
- # Shared libraries dlopened by slang-test
- slang-reflection-test
- render-test
- slang-unit-test
- gfx-unit-test
- slang-glslang
- # Used by some tests when they run
- slangd
- slang-rt
- gfx
- test-server
- test-process
- FOLDER test
- DEBUG_DIR ${slang_SOURCE_DIR}
-)
-if(TARGET slang-llvm)
- # Only add a dependency here if slang-llvm exists
- # Pending https://gitlab.kitware.com/cmake/cmake/-/issues/19467 to be able
- # to use a generator expression in REQUIRES just above.
- add_dependencies(slang-test slang-llvm)
-endif()
-set_property(
- DIRECTORY ${slang_SOURCE_DIR}
- PROPERTY VS_STARTUP_PROJECT slang-test
-)
-
-slang_add_target(
- tools/unit-test
- OBJECT
- EXCLUDE_FROM_ALL
- INCLUDE_FROM_PRIVATE slang
- FOLDER test
-)
-
-# These are libraries loaded at runtime from the test executable:
-slang_add_target(
- tools/gfx-unit-test
- MODULE
- EXCLUDE_FROM_ALL
- EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
- USE_FEWER_WARNINGS
- LINK_WITH_PRIVATE core slang unit-test gfx gfx-util platform
- OUTPUT_NAME gfx-unit-test-tool
- FOLDER test/tools
-)
-slang_add_target(
- tools/slang-unit-test
- MODULE
- EXCLUDE_FROM_ALL
- EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
- USE_FEWER_WARNINGS
- LINK_WITH_PRIVATE core compiler-core unit-test slang Threads::Threads
- OUTPUT_NAME slang-unit-test-tool
- FOLDER test/tools
-)
-slang_add_target(
- tools/slang-reflection-test
- MODULE
- EXCLUDE_FROM_ALL
- EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
- USE_FEWER_WARNINGS
- LINK_WITH_PRIVATE core slang Threads::Threads
- OUTPUT_NAME slang-reflection-test-tool
- FOLDER test/tools
-)
-slang_add_target(
- tools/render-test
- MODULE
- EXCLUDE_FROM_ALL
- EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
- USE_FEWER_WARNINGS
- LINK_WITH_PRIVATE
- core
- compiler-core
- slang
- gfx
- gfx-util
- platform
- $<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cudart;CUDA::cuda_driver>
- EXTRA_COMPILE_DEFINITIONS_PRIVATE
- $<$<BOOL:${SLANG_ENABLE_CUDA}>:RENDER_TEST_CUDA>
- $<$<BOOL:${SLANG_ENABLE_OPTIX}>:RENDER_TEST_OPTIX>
- OUTPUT_NAME render-test-tool
- FOLDER test/tools
-)
-
-slang_add_target(
- tools/slang-profile
- EXECUTABLE
- EXCLUDE_FROM_ALL
- LINK_WITH_PRIVATE core slang
- FOLDER test
-)
-
-#
-# Examples
-#
+ slang_add_target(
+ tools/slang-test
+ EXECUTABLE
+ USE_FEWER_WARNINGS
+ LINK_WITH_PRIVATE core compiler-core slang ${CMAKE_DL_LIBS} Threads::Threads
+ REQUIRES
+ # Shared libraries dlopened by slang-test
+ slang-reflection-test
+ render-test
+ slang-unit-test
+ gfx-unit-test
+ # Used by some tests when they run
+ slangd
+ slang-rt
+ gfx
+ test-server
+ test-process
+ FOLDER test
+ DEBUG_DIR ${slang_SOURCE_DIR}
+ )
+ if(TARGET slang-glslang)
+ # Only add a dependency here if slang-glslang exists
+ add_dependencies(slang-test slang-glslang)
+ endif()
+ if(TARGET slang-llvm)
+ # Only add a dependency here if slang-llvm exists
+ # Pending https://gitlab.kitware.com/cmake/cmake/-/issues/19467 to be able
+ # to use a generator expression in REQUIRES just above.
+ add_dependencies(slang-test slang-llvm)
+ endif()
+ set_property(
+ DIRECTORY ${slang_SOURCE_DIR}
+ PROPERTY VS_STARTUP_PROJECT slang-test
+ )
-slang_add_target(
- examples/example-base
- STATIC
- EXCLUDE_FROM_ALL
- LINK_WITH_PRIVATE
- core
- slang
- gfx
- platform
- $<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cudart;CUDA::cuda_driver>
- FOLDER examples
-)
+ slang_add_target(
+ tools/unit-test
+ OBJECT
+ EXCLUDE_FROM_ALL
+ INCLUDE_FROM_PRIVATE slang
+ FOLDER test
+ )
-add_custom_target(
- all-examples
- COMMENT "meta target which depends on all examples"
-)
-set_target_properties(all-examples PROPERTIES FOLDER examples)
-function(example dir)
+ # These are libraries loaded at runtime from the test executable:
slang_add_target(
- ${dir}
- EXECUTABLE
+ tools/gfx-unit-test
+ MODULE
+ EXCLUDE_FROM_ALL
+ EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
+ USE_FEWER_WARNINGS
+ LINK_WITH_PRIVATE core slang unit-test gfx gfx-util platform
+ OUTPUT_NAME gfx-unit-test-tool
+ FOLDER test/tools
+ )
+ slang_add_target(
+ tools/slang-unit-test
+ MODULE
+ EXCLUDE_FROM_ALL
+ EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
+ USE_FEWER_WARNINGS
+ LINK_WITH_PRIVATE core compiler-core unit-test slang Threads::Threads
+ OUTPUT_NAME slang-unit-test-tool
+ FOLDER test/tools
+ )
+ slang_add_target(
+ tools/slang-reflection-test
+ MODULE
EXCLUDE_FROM_ALL
+ EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
+ USE_FEWER_WARNINGS
+ LINK_WITH_PRIVATE core slang Threads::Threads
+ OUTPUT_NAME slang-reflection-test-tool
+ FOLDER test/tools
+ )
+ slang_add_target(
+ tools/render-test
+ MODULE
+ EXCLUDE_FROM_ALL
+ EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
USE_FEWER_WARNINGS
LINK_WITH_PRIVATE
core
- example-base
+ compiler-core
slang
gfx
gfx-util
platform
$<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cudart;CUDA::cuda_driver>
EXTRA_COMPILE_DEFINITIONS_PRIVATE
- $<$<BOOL:${SLANG_ENABLE_XLIB}>:SLANG_ENABLE_XLIB>
- REQUIRED_BY all-examples
+ $<$<BOOL:${SLANG_ENABLE_CUDA}>:RENDER_TEST_CUDA>
+ $<$<BOOL:${SLANG_ENABLE_OPTIX}>:RENDER_TEST_OPTIX>
+ OUTPUT_NAME render-test-tool
+ FOLDER test/tools
+ )
+
+ slang_add_target(
+ tools/slang-profile
+ EXECUTABLE
+ EXCLUDE_FROM_ALL
+ LINK_WITH_PRIVATE core slang
+ FOLDER test
+ )
+endif()
+
+if (SLANG_ENABLE_EXAMPLES AND SLANG_ENABLE_GFX)
+ #
+ # Examples
+ #
+ slang_add_target(
+ examples/example-base
+ STATIC
+ EXCLUDE_FROM_ALL
+ LINK_WITH_PRIVATE
+ core
+ slang
+ gfx
+ platform
+ $<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cudart;CUDA::cuda_driver>
FOLDER examples
- DEBUG_DIR ${dir}
- ${ARGN}
)
-endfunction()
-example(examples/autodiff-texture WIN32_EXECUTABLE)
-example(examples/cpu-com-example )
-example(examples/cpu-hello-world )
-example(examples/gpu-printing )
-example(examples/hello-world LINK_WITH_PRIVATE Vulkan-Headers)
-example(examples/model-viewer WIN32_EXECUTABLE)
-example(examples/platform-test WIN32_EXECUTABLE)
-example(examples/ray-tracing WIN32_EXECUTABLE)
-example(examples/ray-tracing-pipeline WIN32_EXECUTABLE)
-example(examples/shader-object )
-example(examples/shader-toy WIN32_EXECUTABLE)
-example(examples/triangle WIN32_EXECUTABLE)
-if(SLANG_ENABLE_AFTERMATH)
- example(examples/nv-aftermath-example WIN32_EXECUTABLE)
+ add_custom_target(
+ all-examples
+ COMMENT "meta target which depends on all examples"
+ )
+ set_target_properties(all-examples PROPERTIES FOLDER examples)
+ function(example dir)
+ slang_add_target(
+ ${dir}
+ EXECUTABLE
+ EXCLUDE_FROM_ALL
+ USE_FEWER_WARNINGS
+ LINK_WITH_PRIVATE
+ core
+ example-base
+ slang
+ gfx
+ gfx-util
+ platform
+ $<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cudart;CUDA::cuda_driver>
+ EXTRA_COMPILE_DEFINITIONS_PRIVATE
+ $<$<BOOL:${SLANG_ENABLE_XLIB}>:SLANG_ENABLE_XLIB>
+ REQUIRED_BY all-examples
+ FOLDER examples
+ DEBUG_DIR ${dir}
+ ${ARGN}
+ )
+ endfunction()
+
+ example(examples/autodiff-texture WIN32_EXECUTABLE)
+ example(examples/cpu-com-example )
+ example(examples/cpu-hello-world )
+ example(examples/gpu-printing )
+ example(examples/hello-world LINK_WITH_PRIVATE Vulkan-Headers)
+ example(examples/model-viewer WIN32_EXECUTABLE)
+ example(examples/platform-test WIN32_EXECUTABLE)
+ example(examples/ray-tracing WIN32_EXECUTABLE)
+ example(examples/ray-tracing-pipeline WIN32_EXECUTABLE)
+ example(examples/shader-object )
+ example(examples/shader-toy WIN32_EXECUTABLE)
+ example(examples/triangle WIN32_EXECUTABLE)
+ if(SLANG_ENABLE_AFTERMATH)
+ example(examples/nv-aftermath-example WIN32_EXECUTABLE)
+ endif()
endif()
#
# Testing
#
-include(CTest)
-add_test(
- NAME slang-test
- COMMAND
- slang-test -bindir ${slang_SOURCE_DIR}/build/$<CONFIG>/${runtime_subdir}
- -expected-failure-list ${slang_SOURCE_DIR}/tests/expected-failure.txt
- -expected-failure-list
- ${slang_SOURCE_DIR}/tests/expected-failure-github.txt
- WORKING_DIRECTORY ${slang_SOURCE_DIR}
-)
+if(SLANG_ENABLE_TESTS)
+ include(CTest)
+ add_test(
+ NAME slang-test
+ COMMAND
+ slang-test -bindir ${slang_SOURCE_DIR}/build/$<CONFIG>/${runtime_subdir}
+ -expected-failure-list ${slang_SOURCE_DIR}/tests/expected-failure.txt
+ -expected-failure-list
+ ${slang_SOURCE_DIR}/tests/expected-failure-github.txt
+ WORKING_DIRECTORY ${slang_SOURCE_DIR}
+ )
+endif()
#
# Packaging
diff --git a/docs/building.md b/docs/building.md
index 5c48d0493..3cac636a1 100644
--- a/docs/building.md
+++ b/docs/building.md
@@ -253,6 +253,13 @@ See the [documentation on testing](../tools/slang-test/README.md) for more infor
| `SLANG_EMBED_STDLIB_SOURCE` | `TRUE` | Embed stdlib source in the binary |
| `SLANG_ENABLE_ASAN` | `FALSE` | Enable ASAN (address sanitizer) |
| `SLANG_ENABLE_FULL_IR_VALIDATION` | `FALSE` | Enable full IR validation (SLOW!) |
+| `SLANG_ENABLE_GFX` | `TRUE` | Enable gfx targets |
+| `SLANG_ENABLE_SLANGD` | `TRUE` | Enable language server target |
+| `SLANG_ENABLE_SLANGC` | `TRUE` | Enable standalone compiler target |
+| `SLANG_ENABLE_SLANGRT` | `TRUE` | Enable runtime target |
+| `SLANG_ENABLE_SLANG_GLSLANG` | `TRUE` | Enable glslang dependency and slang-glslang wrapper target |
+| `SLANG_ENABLE_TESTS` | `TRUE` | Enable test targets, requires SLANG_ENABLE_GFX, SLANG_ENABLE_SLANGD and SLANG_ENABLE_SLANGRT |
+| `SLANG_ENABLE_EXAMPLES` | `TRUE` | Enable example targets, requires SLANG_ENABLE_GFX |
| `SLANG_SLANG_LLVM_FLAVOR` | `FETCH_BINARY` | How to set up llvm support |
| `SLANG_SLANG_LLVM_BINARY_URL` | System dependent | URL specifying the location of the slang-llvm prebuilt library |
| `SLANG_GENERATORS_PATH` | `` | Path to an installed `all-generators` target for cross compilation |
diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt
index e61db9921..a1bb01e69 100644
--- a/external/CMakeLists.txt
+++ b/external/CMakeLists.txt
@@ -34,18 +34,20 @@ add_subdirectory(vulkan EXCLUDE_FROM_ALL)
# SPIRV-Headers
add_subdirectory(spirv-headers EXCLUDE_FROM_ALL)
-# SPIRV-Tools
-set(SPIRV_TOOLS_BUILD_STATIC ON)
-set(SPIRV_WERROR OFF)
-set(SPIRV_HEADER_DIR "${CMAKE_CURRENT_LIST_DIR}/spirv-headers/")
-set(SPIRV_SKIP_TESTS ON)
-add_subdirectory(spirv-tools EXCLUDE_FROM_ALL)
+if(SLANG_ENABLE_SLANG_GLSLANG)
+ # SPIRV-Tools
+ set(SPIRV_TOOLS_BUILD_STATIC ON)
+ set(SPIRV_WERROR OFF)
+ set(SPIRV_HEADER_DIR "${CMAKE_CURRENT_LIST_DIR}/spirv-headers/")
+ set(SPIRV_SKIP_TESTS ON)
+ add_subdirectory(spirv-tools EXCLUDE_FROM_ALL)
-# glslang
-set(SKIP_GLSLANG_INSTALL ON)
-set(ENABLE_OPT ON)
-set(ENABLE_PCH OFF)
-add_subdirectory(glslang EXCLUDE_FROM_ALL)
+ # glslang
+ set(SKIP_GLSLANG_INSTALL ON)
+ set(ENABLE_OPT ON)
+ set(ENABLE_PCH OFF)
+ add_subdirectory(glslang EXCLUDE_FROM_ALL)
+endif()
# imgui
add_library(imgui INTERFACE)