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:
+10
-44
@@ -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
@@ -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
@@ -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()
|
||||
@@ -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}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user