Skip to content

Commit ac174d2

Browse files
authored
Fix static build and install (shader-slang#6158)
* Add SLANG_ENABLE_RELEASE_LTO cmake option * Fix cmake static build * Disable install SlangTargets to avoid static build failing
1 parent a9ce752 commit ac174d2

File tree

9 files changed

+35
-15
lines changed

9 files changed

+35
-15
lines changed

CMakeLists.txt

+10-6
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ option(
193193
ON
194194
)
195195

196+
option(SLANG_ENABLE_RELEASE_LTO "Enable LTO for Release builds" ON)
197+
196198
option(
197199
SLANG_ENABLE_SPLIT_DEBUG_INFO
198200
"Generate split debug info for debug builds"
@@ -383,12 +385,14 @@ configure_package_config_file(
383385
# linkable targets. In this case do not export the targets. Otherwise, just
384386
# export the slang targets.
385387
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
386-
install(
387-
EXPORT SlangTargets
388-
FILE ${PROJECT_NAME}Targets.cmake
389-
NAMESPACE ${PROJECT_NAME}::
390-
DESTINATION cmake
391-
)
388+
if(NOT ${SLANG_BUILD_TYPE} STREQUAL "STATIC")
389+
install(
390+
EXPORT SlangTargets
391+
FILE ${PROJECT_NAME}Targets.cmake
392+
NAMESPACE ${PROJECT_NAME}::
393+
DESTINATION cmake
394+
)
395+
endif()
392396
endif()
393397

394398
install(

cmake/SlangTarget.cmake

+8-6
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,14 @@ function(slang_add_target dir type)
166166

167167
# Enable link-time optimization for release builds
168168
# See: https://cmake.org/cmake/help/latest/prop_tgt/INTERPROCEDURAL_OPTIMIZATION.html
169-
set_target_properties(
170-
${target}
171-
PROPERTIES
172-
INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
173-
INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE
174-
)
169+
if(SLANG_ENABLE_RELEASE_LTO)
170+
set_target_properties(
171+
${target}
172+
PROPERTIES
173+
INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
174+
INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE
175+
)
176+
endif()
175177

176178
#
177179
# Set the output directory

docs/building.md

+1
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ See the [documentation on testing](../tools/slang-test/README.md) for more infor
165165
| `SLANG_ENABLE_EXAMPLES` | `TRUE` | Enable example targets, requires SLANG_ENABLE_GFX |
166166
| `SLANG_LIB_TYPE` | `SHARED` | How to build the slang library |
167167
| `SLANG_ENABLE_RELEASE_DEBUG_INFO` | `TRUE` | Enable generating debug info for Release configs |
168+
| `SLANG_ENABLE_RELEASE_LTO` | `TRUE` | Enable LTO for Release builds |
168169
| `SLANG_ENABLE_SPLIT_DEBUG_INFO` | `TRUE` | Enable generating split debug info for Debug and RelWithDebInfo configs |
169170
| `SLANG_SLANG_LLVM_FLAVOR` | `FETCH_BINARY_IF_POSSIBLE` | How to set up llvm support |
170171
| `SLANG_SLANG_LLVM_BINARY_URL` | System dependent | URL specifying the location of the slang-llvm prebuilt library |

prelude/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ endforeach()
2323
slang_add_target(
2424
.
2525
OBJECT
26+
EXPORT_MACRO_PREFIX SLANG
2627
EXPLICIT_SOURCE ${prelude_source}
2728
EXCLUDE_FROM_ALL
2829
TARGET_NAME prelude
2930
INCLUDE_DIRECTORIES_PUBLIC
3031
${CMAKE_CURRENT_LIST_DIR}
3132
${CMAKE_CURRENT_LIST_DIR}/../include
33+
EXPORT_TYPE_AS ${SLANG_LIB_TYPE}
3234
LINK_WITH_PRIVATE unordered_dense::unordered_dense
3335
PUBLIC_HEADERS ${CMAKE_CURRENT_LIST_DIR}/slang*.h
3436
# It's an object library, so the install step only installs the headers

source/compiler-core/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
slang_add_target(
22
.
33
STATIC
4+
EXPORT_MACRO_PREFIX SLANG
45
EXCLUDE_FROM_ALL
56
USE_EXTRA_WARNINGS
67
LINK_WITH_PRIVATE core

source/core/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
slang_add_target(
22
.
33
STATIC
4+
EXPORT_MACRO_PREFIX SLANG
45
EXCLUDE_FROM_ALL
56
USE_EXTRA_WARNINGS
67
LINK_WITH_PRIVATE miniz lz4_static Threads::Threads ${CMAKE_DL_LIBS}

source/slang-rt/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
if(SLANG_ENABLE_SLANGRT)
22
slang_add_target(
33
.
4-
SHARED
4+
${SLANG_LIB_TYPE}
55
# This compiles 'core' again with the SLANG_RT_DYNAMIC_EXPORT macro defined
66
EXTRA_SOURCE_DIRS ${slang_SOURCE_DIR}/source/core
77
USE_EXTRA_WARNINGS

source/slang/CMakeLists.txt

+8
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ add_custom_command(
2828
slang_add_target(
2929
slang-capability-defs
3030
OBJECT
31+
EXPORT_MACRO_PREFIX SLANG
3132
USE_EXTRA_WARNINGS
3233
EXPLICIT_SOURCE ${SLANG_CAPABILITY_GENERATED_HEADERS}
34+
EXPORT_TYPE_AS ${SLANG_LIB_TYPE}
3335
LINK_WITH_PRIVATE core
3436
INCLUDE_DIRECTORIES_PUBLIC
3537
"${SLANG_CAPABILITY_OUTPUT_DIR}"
@@ -40,8 +42,10 @@ slang_add_target(
4042
slang_add_target(
4143
slang-capability-lookup
4244
OBJECT
45+
EXPORT_MACRO_PREFIX SLANG
4346
USE_EXTRA_WARNINGS
4447
EXPLICIT_SOURCE ${SLANG_CAPABILITY_GENERATED_SOURCE}
48+
EXPORT_TYPE_AS ${SLANG_LIB_TYPE}
4549
LINK_WITH_PRIVATE core slang-capability-defs
4650
EXCLUDE_FROM_ALL
4751
FOLDER generated
@@ -157,10 +161,12 @@ add_custom_command(
157161
slang_add_target(
158162
slang-lookup-tables
159163
OBJECT
164+
EXPORT_MACRO_PREFIX SLANG
160165
USE_EXTRA_WARNINGS
161166
EXPLICIT_SOURCE
162167
${SLANG_LOOKUP_GENERATED_SOURCE}
163168
${SLANG_SPIRV_CORE_GRAMMAR_SOURCE}
169+
EXPORT_TYPE_AS ${SLANG_LIB_TYPE}
164170
LINK_WITH_PRIVATE core SPIRV-Headers
165171
EXCLUDE_FROM_ALL
166172
FOLDER generated
@@ -274,6 +280,7 @@ else()
274280
slang_add_target(
275281
.
276282
${SLANG_LIB_TYPE}
283+
EXPORT_MACRO_PREFIX SLANG
277284
${slang_link_args}
278285
${slang_interface_args}
279286
NO_SOURCE
@@ -291,6 +298,7 @@ else()
291298
slang_add_target(
292299
.
293300
${SLANG_LIB_TYPE}
301+
EXPORT_MACRO_PREFIX SLANG
294302
${slang_link_args}
295303
${slang_interface_args}
296304
${slang_public_lib_args}

tools/CMakeLists.txt

+3-2
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ generator(
7373
slang_add_target(
7474
slang-cpp-parser
7575
STATIC
76+
EXPORT_MACRO_PREFIX SLANG
7677
USE_FEWER_WARNINGS
7778
LINK_WITH_PRIVATE core compiler-core
7879
INCLUDE_DIRECTORIES_PUBLIC .
@@ -104,7 +105,7 @@ if(SLANG_ENABLE_GFX)
104105
#
105106
slang_add_target(
106107
platform
107-
SHARED
108+
${SLANG_LIB_TYPE}
108109
EXCLUDE_FROM_ALL
109110
USE_FEWER_WARNINGS
110111
LINK_WITH_PRIVATE
@@ -128,7 +129,7 @@ if(SLANG_ENABLE_GFX)
128129
#
129130
slang_add_target(
130131
gfx
131-
SHARED
132+
${SLANG_LIB_TYPE}
132133
USE_FEWER_WARNINGS
133134
LINK_WITH_PRIVATE
134135
core

0 commit comments

Comments
 (0)