yum-slop/modular_slang

write individual HLSL modules/libraries in slang

git clone https://git.yummers.dev/yum-slop/modular_slang

yumaccelerate abseil build30c5fa6

master
2.3 KiB69 linesraw
1cmake_minimum_required(VERSION 3.20)
2project(modular_slang_demo LANGUAGES CXX)
3
4set(CMAKE_CXX_STANDARD 17)
5set(CMAKE_CXX_STANDARD_REQUIRED ON)
6set(CMAKE_CXX_EXTENSIONS OFF)
7
8include(FetchContent)
9
10set(SLANG_SDK_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/slang/build/Release")
11if(NOT EXISTS "${SLANG_SDK_ROOT}")
12    message(FATAL_ERROR "Expected Slang SDK directory at ${SLANG_SDK_ROOT}")
13endif()
14
15FetchContent_Declare(
16    abseil
17    URL https://github.com/abseil/abseil-cpp/archive/refs/tags/20240116.1.zip
18)
19
20# Only populate abseil if it hasn't been built yet
21FetchContent_GetProperties(abseil)
22if(NOT abseil_POPULATED)
23    # Check if the built libraries already exist
24    set(ABSEIL_STATUS_LIB "${CMAKE_BINARY_DIR}/_deps/abseil-build/absl/status/absl_status.lib")
25    set(ABSEIL_STATUSOR_LIB "${CMAKE_BINARY_DIR}/_deps/abseil-build/absl/status/absl_statusor.lib")
26
27    if(NOT EXISTS "${ABSEIL_STATUS_LIB}" OR NOT EXISTS "${ABSEIL_STATUSOR_LIB}")
28        message(STATUS "Abseil libraries not found, building abseil...")
29        FetchContent_MakeAvailable(abseil)
30    else()
31        message(STATUS "Abseil libraries found, skipping rebuild")
32        # Manually populate the source directory without building
33        FetchContent_Populate(abseil)
34        add_subdirectory(${abseil_SOURCE_DIR} ${abseil_BINARY_DIR} EXCLUDE_FROM_ALL)
35    endif()
36endif()
37
38add_executable(modular_slang main.cc)
39set_target_properties(modular_slang PROPERTIES
40    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
41)
42
43target_include_directories(modular_slang PRIVATE
44    "${SLANG_SDK_ROOT}/include"
45)
46
47target_link_libraries(modular_slang PRIVATE
48    "${SLANG_SDK_ROOT}/lib/slang.lib"
49    absl::status
50    absl::statusor
51)
52
53if(MSVC)
54    target_compile_options(modular_slang PRIVATE /W4 /EHsc)
55else()
56    target_compile_options(modular_slang PRIVATE -Wall -Wextra -pedantic)
57endif()
58
59add_custom_command(TARGET modular_slang POST_BUILD
60    COMMAND ${CMAKE_COMMAND} -E copy_if_different
61        "${SLANG_SDK_ROOT}/bin/slang.dll"
62        "$<TARGET_FILE_DIR:modular_slang>/slang.dll"
63    COMMAND ${CMAKE_COMMAND} -E copy_if_different
64        "${SLANG_SDK_ROOT}/bin/slang-rt.dll"
65        "$<TARGET_FILE_DIR:modular_slang>/slang-rt.dll"
66    COMMAND ${CMAKE_COMMAND} -E copy_if_different
67        "${SLANG_SDK_ROOT}/bin/gfx.dll"
68        "$<TARGET_FILE_DIR:modular_slang>/gfx.dll"
69)