3p: remove spirv-tools targets for binaries and shared libs (#9198)

We need to modify spirv-tools existing CMakeLists.txt to make
sure that its binaries and libs are not included in the filament
installed output.

This change was present before, but overwritten when spirv-tools
updated (wrt the WebGPU project).

In addition to modifying the CMakeLists.txt, we add a script to
carry out the changes automatically when running the update script
in the future.

Fixes #9168
This commit is contained in:
Powei Feng
2025-09-10 20:01:42 +00:00
committed by GitHub
parent f89c105941
commit 49b8a17b1f
4 changed files with 85 additions and 56 deletions
+10 -44
View File
@@ -28,7 +28,15 @@ endif()
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
enable_testing()
set(SPIRV-Headers_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../spirv-headers)
if (APPLE)
set(CMAKE_MACOSX_RPATH ON)
endif (APPLE)
set(SPIRV_SKIP_EXECUTABLES_OPTION ON)
set(SPIRV_SKIP_TESTS_OPTION ON)
set(SKIP_SPIRV_TOOLS_INSTALL ON)
set(SPIRV_TOOLS "SPIRV-Tools")
include(GNUInstallDirs)
@@ -67,7 +75,6 @@ if ("${CMAKE_BUILD_TYPE}" STREQUAL "")
set(CMAKE_BUILD_TYPE "Debug")
endif()
option(SKIP_SPIRV_TOOLS_INSTALL "Skip installation" ${SKIP_SPIRV_TOOLS_INSTALL})
if(NOT ${SKIP_SPIRV_TOOLS_INSTALL})
set(ENABLE_SPIRV_TOOLS_INSTALL ON)
endif()
@@ -84,7 +91,7 @@ set(SPIRV_LIB_FUZZING_ENGINE_LINK_OPTIONS "" CACHE STRING "Used by OSS-Fuzz to c
option(SPIRV_BUILD_LIBFUZZER_TARGETS "Build libFuzzer targets" OFF)
option(SPIRV_WERROR "Enable error on warning" ON)
set(SPIRV_WERROR OFF)
if(("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR (("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") AND (NOT CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")))
set(COMPILER_IS_LIKE_GNU TRUE)
endif()
@@ -351,8 +358,6 @@ endif()
add_subdirectory(source)
add_subdirectory(tools)
add_subdirectory(test)
add_subdirectory(examples)
if(ENABLE_SPIRV_TOOLS_INSTALL)
install(
@@ -374,42 +379,3 @@ endif()
set(SPIRV_LIBRARIES "-lSPIRV-Tools-opt -lSPIRV-Tools -lSPIRV-Tools-link")
set(SPIRV_SHARED_LIBRARIES "-lSPIRV-Tools-shared")
# Build pkg-config file
# Use a first-class target so it's regenerated when relevant files are updated.
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools.pc
COMMAND ${CMAKE_COMMAND}
-DCHANGES_FILE=${CMAKE_CURRENT_SOURCE_DIR}/CHANGES
-DTEMPLATE_FILE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/SPIRV-Tools.pc.in
-DOUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools.pc
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
-DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR}
-DSPIRV_LIBRARIES=${SPIRV_LIBRARIES}
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake
DEPENDS "CHANGES" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/SPIRV-Tools.pc.in" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake")
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools-shared.pc
COMMAND ${CMAKE_COMMAND}
-DCHANGES_FILE=${CMAKE_CURRENT_SOURCE_DIR}/CHANGES
-DTEMPLATE_FILE=${CMAKE_CURRENT_SOURCE_DIR}/cmake/SPIRV-Tools-shared.pc.in
-DOUT_FILE=${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools-shared.pc
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR}
-DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR}
-DSPIRV_SHARED_LIBRARIES=${SPIRV_SHARED_LIBRARIES}
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake
DEPENDS "CHANGES" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/SPIRV-Tools-shared.pc.in" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/write_pkg_config.cmake")
add_custom_target(spirv-tools-pkg-config
ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools-shared.pc ${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools.pc)
# Install pkg-config file
if (ENABLE_SPIRV_TOOLS_INSTALL)
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools.pc
${CMAKE_CURRENT_BINARY_DIR}/SPIRV-Tools-shared.pc
DESTINATION
${CMAKE_INSTALL_LIBDIR}/pkgconfig)
endif()
+3 -12
View File
@@ -338,16 +338,7 @@ endfunction()
# Always build ${SPIRV_TOOLS}-shared. This is expected distro packages, and
# unlike the other SPIRV_TOOLS target, defaults to hidden symbol visibility.
add_library(${SPIRV_TOOLS}-shared SHARED ${SPIRV_SOURCES})
if (SPIRV_TOOLS_USE_MIMALLOC)
target_link_libraries(${SPIRV_TOOLS}-shared PRIVATE mimalloc-static)
endif()
spirv_tools_default_target_options(${SPIRV_TOOLS}-shared)
set_target_properties(${SPIRV_TOOLS}-shared PROPERTIES CXX_VISIBILITY_PRESET hidden)
target_compile_definitions(${SPIRV_TOOLS}-shared
PRIVATE SPIRV_TOOLS_IMPLEMENTATION
PUBLIC SPIRV_TOOLS_SHAREDLIB
)
if(SPIRV_TOOLS_BUILD_STATIC)
add_library(${SPIRV_TOOLS}-static STATIC ${SPIRV_SOURCES})
@@ -363,14 +354,14 @@ if(SPIRV_TOOLS_BUILD_STATIC)
add_library(${SPIRV_TOOLS} ALIAS ${SPIRV_TOOLS}-static)
endif()
set(SPIRV_TOOLS_TARGETS ${SPIRV_TOOLS}-static ${SPIRV_TOOLS}-shared)
set(SPIRV_TOOLS_TARGETS ${SPIRV_TOOLS}-static)
else()
add_library(${SPIRV_TOOLS} ${SPIRV_TOOLS_LIBRARY_TYPE} ${SPIRV_SOURCES})
if (SPIRV_TOOLS_USE_MIMALLOC)
target_link_libraries(${SPIRV_TOOLS} PRIVATE mimalloc-static)
endif()
spirv_tools_default_target_options(${SPIRV_TOOLS})
set(SPIRV_TOOLS_TARGETS ${SPIRV_TOOLS} ${SPIRV_TOOLS}-shared)
set(SPIRV_TOOLS_TARGETS ${SPIRV_TOOLS})
endif()
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
+69
View File
@@ -0,0 +1,69 @@
import re
import sys
import os
def process_file(filepath, replacements):
"""Reads a file, applies a series of regex replacements, and writes it back."""
try:
# Create a backup before modifying
backup_path = filepath + '.bak'
with open(filepath, 'r') as f_in, open(backup_path, 'w') as f_out:
content = f_in.read()
f_out.write(content)
except FileNotFoundError:
print(f"Error: File not found at {filepath}", file=sys.stderr)
sys.exit(1)
# Apply all replacements
for pattern, replacement in replacements:
content = re.sub(pattern, replacement, content, flags=re.MULTILINE)
# Write the modified content back to the original file
with open(filepath, 'w') as f:
f.write(content)
def main():
"""Main function to define and process all file changes."""
# Make the script location-aware. It's in third_party/spirv-tools/tnt.
# The files to patch are in third_party/spirv-tools.
script_dir = os.path.dirname(os.path.abspath(__file__))
spirv_tools_dir = os.path.abspath(os.path.join(script_dir, '..'))
# Define replacements for third_party/spirv-tools/CMakeLists.txt
spirv_tools_cmakelist = os.path.join(spirv_tools_dir, "CMakeLists.txt")
spirv_tools_replacements = [
(r"^(set_property\(GLOBAL PROPERTY USE_FOLDERS ON\))",
r"\1\n\n"
r"set(SPIRV-Headers_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../spirv-headers)\n\n"
r"if (APPLE)\n"
r" set(CMAKE_MACOSX_RPATH ON)\n"
r"endif (APPLE)\n"
r"set(SPIRV_SKIP_EXECUTABLES_OPTION ON)\n"
r"set(SPIRV_SKIP_TESTS_OPTION ON)\n"
r"set(SKIP_SPIRV_TOOLS_INSTALL ON)"),
(r"enable_testing\(\)\n", ""),
(r'option\(SKIP_SPIRV_TOOLS_INSTALL "Skip installation" \$\{SKIP_SPIRV_TOOLS_INSTALL\}\)\n', ""),
(r'option\(SPIRV_WERROR "Enable error on warning" ON\)',
r"set(SPIRV_WERROR OFF)"),
(r"add_subdirectory\(test\)\n", ""),
(r"add_subdirectory\(examples\)\n", ""),
(r"^# Build pkg-config file[\s\S]*?^endif\(\)\n", ""),
]
process_file(spirv_tools_cmakelist, spirv_tools_replacements)
# Define replacements for third_party/spirv-tools/source/CMakeLists.txt
spirv_source_cmakelist = os.path.join(spirv_tools_dir, "source", "CMakeLists.txt")
spirv_source_replacements = [
(r"^add_library\(\$\{SPIRV_TOOLS\}\-shared[\s\S]*?^\)", ""),
(r"set\(SPIRV_TOOLS_TARGETS \$\{SPIRV_TOOLS\}-static \$\{SPIRV_TOOLS\}\-shared\)",
r"set(SPIRV_TOOLS_TARGETS ${SPIRV_TOOLS}-static)"),
(r"set\(SPIRV_TOOLS_TARGETS \$\{SPIRV_TOOLS\} \$\{SPIRV_TOOLS\}\-shared\)",
r"set(SPIRV_TOOLS_TARGETS ${SPIRV_TOOLS})"),
]
process_file(spirv_source_cmakelist, spirv_source_replacements)
print("Changes applied successfully using the corrected Python script.")
print("Backup files with .bak extension have been created.")
if __name__ == "__main__":
main()
+3
View File
@@ -91,6 +91,9 @@ mv "${EXTRACTED_DIR}" spirv-tools_new
rsync -a --delete --exclude=tnt/ spirv-tools_new/ spirv-tools/
echo "Applying Filament-specific patches..."
python3 "${SCRIPT_DIR}/filament_changes.py"
echo "Cleaning up..."
rm -rf "${ZIP_FILE_NAME}" spirv-tools_new "${TEMP_DIR}"