yum-slop/modular_slang
write individual HLSL modules/libraries in slang
git clone https://git.yummers.dev/yum-slop/modular_slang
30c5fa6
master
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 } " ) 12message ( FATAL_ERROR "Expected Slang SDK directory at ${ SLANG_SDK_ROOT } " ) 13endif () 14 15FetchContent_Declare ( 16abseil 17URL 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 24set ( ABSEIL_STATUS_LIB " ${ CMAKE_BINARY_DIR } /_deps/abseil-build/absl/status/absl_status.lib" ) 25set ( ABSEIL_STATUSOR_LIB " ${ CMAKE_BINARY_DIR } /_deps/abseil-build/absl/status/absl_statusor.lib" ) 26 27if ( NOT EXISTS " ${ ABSEIL_STATUS_LIB } " OR NOT EXISTS " ${ ABSEIL_STATUSOR_LIB } " ) 28message ( STATUS "Abseil libraries not found, building abseil..." ) 29FetchContent_MakeAvailable ( abseil ) 30else () 31message ( STATUS "Abseil libraries found, skipping rebuild" ) 32# Manually populate the source directory without building 33FetchContent_Populate ( abseil ) 34add_subdirectory ( $ { abseil_SOURCE_DIR } ${ abseil_BINARY_DIR } EXCLUDE_FROM_ALL ) 35endif () 36endif () 37 38add_executable ( modular_slang main.cc ) 39set_target_properties ( modular_slang PROPERTIES 40RUNTIME_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" 49absl::status 50absl::statusor 51) 52 53if ( MSVC) 54target_compile_options ( modular_slang PRIVATE /W4 /EHsc ) 55else () 56target_compile_options ( modular_slang PRIVATE -Wall -Wextra -pedantic ) 57endif () 58 59add_custom_command ( TARGET modular_slang POST_BUILD 60COMMAND ${ CMAKE_COMMAND } -E copy_if_different 61" ${ SLANG_SDK_ROOT } /bin/slang.dll" 62" $ <TARGET_FILE_DIR:modular_slang>/slang.dll" 63COMMAND ${ CMAKE_COMMAND } -E copy_if_different 64" ${ SLANG_SDK_ROOT } /bin/slang-rt.dll" 65" $ <TARGET_FILE_DIR:modular_slang>/slang-rt.dll" 66COMMAND ${ CMAKE_COMMAND } -E copy_if_different 67" ${ SLANG_SDK_ROOT } /bin/gfx.dll" 68" $ <TARGET_FILE_DIR:modular_slang>/gfx.dll" 69)