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