summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2024-10-24 11:37:50 +0800
committerGitHub <noreply@github.com>2024-10-24 11:37:50 +0800
commit61aa670237e2d51f7144322bf56b8ce3633c2db9 (patch)
tree6f8fb7f7c2bd34f936f886fdf7d4fdb9e69d32e5 /tools
parentfb50c032959d0f21579e8a6e1a0ab7141c7fbb97 (diff)
declutter top level CMakeLists.txt (#5391)
* Split examples cmake desc * declutter top level CMakeLists.txt * fail if building tests without gfx * Move llvm fetching to another cmake file * Further split CMakeLists.txt * Neaten llvm fetching * Remove last premake remnant * correct cross builds * Neaten * Neaten project organization in vs
Diffstat (limited to 'tools')
-rw-r--r--tools/CMakeLists.txt322
1 files changed, 322 insertions, 0 deletions
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
new file mode 100644
index 000000000..8c2221a2b
--- /dev/null
+++ b/tools/CMakeLists.txt
@@ -0,0 +1,322 @@
+#
+# Tools used to generate source during the build:
+#
+
+add_custom_target(
+ all-generators
+ COMMENT "meta target which depends on all generators"
+)
+set_target_properties(all-generators PROPERTIES FOLDER generators)
+
+if(CMAKE_HOST_WIN32)
+ set(CMAKE_HOST_EXECUTABLE_SUFFIX ".exe")
+else()
+ set(CMAKE_HOST_EXECUTABLE_SUFFIX "")
+endif()
+function(generator dir)
+ if(SLANG_GENERATORS_PATH)
+ cmake_parse_arguments(ARG "" "TARGET_NAME" "" ${ARGN})
+ if(ARG_TARGET_NAME)
+ set(target ${ARG_TARGET_NAME})
+ else()
+ get_filename_component(target ${dir} NAME)
+ endif()
+ add_executable(${target} IMPORTED GLOBAL)
+ set_property(
+ TARGET ${target}
+ PROPERTY
+ IMPORTED_LOCATION
+ "${SLANG_GENERATORS_PATH}/${target}${CMAKE_HOST_EXECUTABLE_SUFFIX}"
+ )
+ else()
+ slang_add_target(
+ ${dir}
+ EXECUTABLE
+ EXCLUDE_FROM_ALL
+ USE_FEWER_WARNINGS
+ LINK_WITH_PRIVATE core
+ OUTPUT_DIR generators
+ REQUIRED_BY all-generators
+ FOLDER generators
+ INSTALL_COMPONENT generators
+ ${ARGN}
+ )
+ endif()
+endfunction()
+
+generator(slang-cpp-extractor USE_FEWER_WARNINGS LINK_WITH_PRIVATE compiler-core)
+generator(slang-embed)
+generator(slang-generate USE_FEWER_WARNINGS)
+generator(slang-lookup-generator LINK_WITH_PRIVATE compiler-core)
+generator(slang-capability-generator LINK_WITH_PRIVATE compiler-core)
+generator(slang-spirv-embed-generator LINK_WITH_PRIVATE compiler-core)
+generator(
+ ${slang_SOURCE_DIR}/source/slangc
+ TARGET_NAME slang-bootstrap
+ USE_FEWER_WARNINGS
+ LINK_WITH_PRIVATE
+ prelude
+ slang-without-embedded-stdlib
+ slang-capability-lookup
+ slang-lookup-tables
+ Threads::Threads
+)
+
+#
+# Language Server
+#
+if(SLANG_ENABLE_SLANGD)
+ slang_add_target(
+ slangd
+ EXECUTABLE
+ LINK_WITH_PRIVATE
+ core
+ compiler-core
+ slang
+ slang-reflect-headers
+ slang-capability-defs
+ Threads::Threads
+ INSTALL
+ )
+endif()
+
+if(SLANG_ENABLE_GFX)
+ #
+ # `platform` contains all the platform abstractions for a GUI application.
+ #
+ slang_add_target(
+ 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}
+ LINK_WITH_FRAMEWORK
+ Foundation
+ Cocoa
+ QuartzCore
+ EXTRA_COMPILE_DEFINITIONS_PRIVATE
+ $<$<BOOL:${SLANG_ENABLE_XLIB}>:SLANG_ENABLE_XLIB=1>
+ INCLUDE_FROM_PRIVATE gfx
+ INCLUDE_DIRECTORIES_PUBLIC platform
+ EXPORT_MACRO_PREFIX SLANG_PLATFORM
+ )
+
+ #
+ # GFX
+ #
+ slang_add_target(
+ gfx
+ SHARED
+ USE_FEWER_WARNINGS
+ LINK_WITH_PRIVATE
+ core
+ slang
+ Vulkan-Headers
+ metal-cpp
+ $<$<BOOL:${SLANG_ENABLE_XLIB}>:X11::X11>
+ $<$<BOOL:${SLANG_ENABLE_CUDA}>:CUDA::cuda_driver>
+ LINK_WITH_FRAMEWORK
+ Foundation
+ Cocoa
+ QuartzCore
+ Metal
+ 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 ${slang_SOURCE_DIR} ${slang_SOURCE_DIR}/include
+ 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 ${CMAKE_CURRENT_LIST_DIR}/gfx/gfx.slang
+ ${modules_dest_dir}/gfx.slang
+ COMMAND
+ ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/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(
+ 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 .
+ FOLDER gfx
+ )
+endif()
+
+#
+# The test executables and runtime-loaded modules
+#
+if(SLANG_ENABLE_TESTS)
+ slang_add_target(
+ test-server
+ EXECUTABLE
+ EXCLUDE_FROM_ALL
+ LINK_WITH_PRIVATE core compiler-core slang
+ FOLDER test
+ )
+ slang_add_target(
+ test-process
+ EXECUTABLE
+ EXCLUDE_FROM_ALL
+ LINK_WITH_PRIVATE core compiler-core
+ FOLDER test
+ )
+
+ slang_add_target(
+ 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
+ slang-unit-test
+ # Used by some tests when they run
+ slangd
+ test-server
+ test-process
+ OPTIONAL_REQUIRES
+ gfx
+ slang-rt
+ slang-glslang
+ slang-llvm
+ copy-webgpu_dawn
+ copy-slang-tint
+ FOLDER test
+ DEBUG_DIR ${slang_SOURCE_DIR}
+ )
+ set_property(
+ DIRECTORY ${slang_SOURCE_DIR}
+ PROPERTY VS_STARTUP_PROJECT slang-test
+ )
+ 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}
+ )
+
+
+ slang_add_target(
+ unit-test
+ OBJECT
+ EXCLUDE_FROM_ALL
+ INCLUDE_FROM_PRIVATE slang core
+ INCLUDE_DIRECTORIES_PRIVATE ${slang_SOURCE_DIR}/include
+ FOLDER test
+ )
+
+ # These are libraries loaded at runtime from the test executable:
+ if(SLANG_ENABLE_GFX)
+ slang_add_target(
+ 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
+ REQUIRED_BY slang-test
+ FOLDER test/tools
+ )
+ if(SLANG_ENABLE_SLANG_RHI)
+ slang_add_target(
+ render-test
+ MODULE
+ EXCLUDE_FROM_ALL
+ EXTRA_COMPILE_DEFINITIONS_PRIVATE SLANG_SHARED_LIBRARY_TOOL
+ USE_FEWER_WARNINGS
+ LINK_WITH_PRIVATE
+ core
+ compiler-core
+ slang
+ slang-rhi
+ platform
+ $<$<BOOL:${SLANG_ENABLE_CUDA}>: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
+ REQUIRED_BY slang-test
+ FOLDER test/tools
+ )
+ endif()
+ endif()
+ slang_add_target(
+ 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(
+ 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(
+ slang-profile
+ EXECUTABLE
+ EXCLUDE_FROM_ALL
+ LINK_WITH_PRIVATE core slang
+ FOLDER test
+ )
+endif()
+
+#
+# slang-replay tool for replaying the record files
+#
+if (SLANG_ENABLE_REPLAYER)
+ slang_add_target(
+ slang-replay
+ EXECUTABLE
+ EXTRA_SOURCE_DIRS
+ ${slang_SOURCE_DIR}/source/slang-record-replay/replay
+ ${slang_SOURCE_DIR}/source/slang-record-replay/util
+ LINK_WITH_PRIVATE core compiler-core slang
+ INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}/source/slang-record-replay
+ FOLDER test
+ )
+endif()