Unbundles basis-universal dependency. patch by Lilah Tascheter diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index 46c0c26e1..d13934abc 100644 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -112,52 +112,7 @@ set_property(TARGET qjs PROPERTY FOLDER "3rdparty") if (WZ_ENABLE_BASIS_UNIVERSAL AND NOT WZ_CI_DISABLE_BASIS_COMPRESS_TEXTURES) # basis-universal - set(_ORIGINAL_CMAKE_PROGRAM_PATH "${CMAKE_PROGRAM_PATH}") - if(DEFINED VCPKG_INSTALLED_DIR AND DEFINED VCPKG_HOST_TRIPLET) - # Partial workaround for: https://github.com/microsoft/vcpkg/issues/17001 - # Explicitly add the HOST_TRIPLET paths to CMAKE_PROGRAM_PATH - list(APPEND CMAKE_PROGRAM_PATH "${VCPKG_INSTALLED_DIR}/${VCPKG_HOST_TRIPLET}") - endif() - find_program(BASIS_UNIVERSAL_CLI NAMES basisu PATH_SUFFIXES "tools/basisu" NO_CACHE) - set(CMAKE_PROGRAM_PATH "${_ORIGINAL_CMAKE_PROGRAM_PATH}") - if(NOT BASIS_UNIVERSAL_CLI) - message(STATUS "Pre-installed basisu tool not found - attempting to build for host system") - - # Build the tool for the host system at configure time - set(BASISU_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/basis_universal_host_tool/") - execute_process( - COMMAND ${CMAKE_COMMAND} -E make_directory "${BASISU_BINARY_DIR}" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal_host_build" - RESULT_VARIABLE _basis_result - ) - if(NOT _basis_result EQUAL 0) - message(FATAL_ERROR "Failed to create directory for basis_universal_host_build") - endif() - execute_process( - COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal_host_build" - WORKING_DIRECTORY "${BASISU_BINARY_DIR}" - RESULT_VARIABLE _basis_result - ) - if(NOT _basis_result EQUAL 0) - message(FATAL_ERROR "Failed to configure basis_universal_host_build") - endif() - execute_process( - COMMAND ${CMAKE_COMMAND} --build "${BASISU_BINARY_DIR}" --config Release - WORKING_DIRECTORY "${BASISU_BINARY_DIR}" - RESULT_VARIABLE _basis_result - ) - if(NOT _basis_result EQUAL 0) - message(FATAL_ERROR "Basis-Universal host tool build failed") - endif() - message(STATUS "Basis-Universal Host Tool Built") - - find_program(BASIS_UNIVERSAL_CLI NAMES basisu PATHS "${BASISU_BINARY_DIR}/basis_install/bin" NO_CACHE NO_DEFAULT_PATH) - if(NOT BASIS_UNIVERSAL_CLI) - message(FATAL_ERROR "Built basisu CLI tool not found!") - endif() - else() - message(STATUS "Pre-installed basisu tool found: ${BASIS_UNIVERSAL_CLI}") - endif() + find_program(BASIS_UNIVERSAL_CLI NAMES basisu REQUIRED) # Test basisu -version execute_process( @@ -175,99 +130,6 @@ if (WZ_ENABLE_BASIS_UNIVERSAL AND NOT WZ_CI_DISABLE_BASIS_COMPRESS_TEXTURES) endif() -if (WZ_ENABLE_BASIS_UNIVERSAL) - - # basis-universal transcoder - - add_library(basis_transcoder STATIC "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal/transcoder/basisu_transcoder.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal/transcoder/basisu_transcoder.h" "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal/zstd/zstddeclib.c") - set_property(TARGET basis_transcoder PROPERTY FOLDER "3rdparty") - target_include_directories(basis_transcoder SYSTEM PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/basis_universal/transcoder") - - if(NOT MSVC) - set(_supported_basistranscoder_cxx_compiler_flags "") - - # -fno-strict-aliasing (GCC, Clang) - check_compiler_flags_output("-Werror -fno-strict-aliasing -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-fno-strict-aliasing" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) - - # -Wcast-align (GCC 3.4+, Clang 3.2+) - check_compiler_flags_output("-Werror -Wno-cast-align -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-cast-align" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) - - # -Wdeprecated-declarations - check_compiler_flags_output("-Werror -Wno-deprecated-declarations -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-deprecated-declarations" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) - - # -Wunused-but-set-variable - check_compiler_flags_output("-Werror -Wno-unused-but-set-variable -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unused-but-set-variable" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) - - # -Wunused-function - check_compiler_flags_output("-Werror -Wno-unused-function -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unused-function" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) - - # -Wunused-const-variable - check_compiler_flags_output("-Werror -Wno-unused-const-variable -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unused-const-variable" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) - - # -Wunknown-warning-option - check_compiler_flags_output("-Werror -Wno-unknown-warning-option -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-unknown-warning-option" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) - - # -Wnontrivial-memcall - check_compiler_flags_output("-Werror -Wno-nontrivial-memcall -Wno-error=cpp" COMPILER_TYPE CXX OUTPUT_FLAGS "-Wno-nontrivial-memcall" OUTPUT_VARIABLE _supported_basistranscoder_cxx_compiler_flags APPEND) - - if (NOT _supported_basistranscoder_cxx_compiler_flags STREQUAL "") - string(REPLACE " " ";" _supported_basistranscoder_cxx_compiler_flags "${_supported_basistranscoder_cxx_compiler_flags}") - target_compile_options(basis_transcoder PRIVATE ${_supported_basistranscoder_cxx_compiler_flags}) - endif() - endif() - - # Must also set BASISD_IS_BIG_ENDIAN if the target platform is big-endian! - if (NOT DEFINED CMAKE_CXX_BYTE_ORDER AND CMAKE_VERSION VERSION_LESS 3.20) - # CMake < 3.20 does not have CMAKE__BYTE_ORDER - # Instead, use the older TestBigEndian module (although this may not work for cross-compilation) - if (NOT CMAKE_CROSSCOMPILING) - include(TestBigEndian) - test_big_endian(IS_BIGENDIAN) - if (IS_BIGENDIAN) - set(CMAKE_CXX_BYTE_ORDER "BIG_ENDIAN") - endif() - else() - message(WARNING "Unable to determine endianness for target architecture. Either upgrade to CMake 3.20+, or - if big endian - manually set the CMAKE_CXX_BYTE_ORDER cache variable to \"BIG_ENDIAN\". Otherwise, assuming little endian.") - endif() - endif() - if (DEFINED CMAKE_CXX_BYTE_ORDER AND CMAKE_CXX_BYTE_ORDER STREQUAL "BIG_ENDIAN") - message(STATUS "Defining BASISD_IS_BIG_ENDIAN=1") - target_compile_definitions(basis_transcoder PRIVATE "-DBASISD_IS_BIG_ENDIAN=1") - endif() - - # Must set BASISU_HAVE_STD_TRIVIALLY_COPYABLE if the target supports std::is_trivially_copyable - include(CheckCXXSourceCompiles) - check_cxx_source_compiles(" - #include - const bool val = std::is_trivially_copyable::value; - int main() - { - return 0; - }" - HAVE_STD_IS_TRIVIALLY_COPYABLE - ) - if (HAVE_STD_IS_TRIVIALLY_COPYABLE) - target_compile_definitions(basis_transcoder PUBLIC "-DBASISU_HAVE_STD_TRIVIALLY_COPYABLE") - endif() - - # Disable certain transcoder formats - target_compile_definitions(basis_transcoder PRIVATE "-DBASISD_SUPPORT_ATC=0" "-DBASISD_SUPPORT_PVRTC1=0" "-DBASISD_SUPPORT_PVRTC2=0") - -endif(WZ_ENABLE_BASIS_UNIVERSAL) - -if (WZ_PROFILING_NVTX) - include(FetchContent) - FetchContent_Declare( - nvtx - GIT_REPOSITORY https://github.com/NVIDIA/NVTX.git - GIT_TAG a1ceb0677f67371ed29a2b1c022794f077db5fe7 - ) - - FetchContent_MakeAvailable(nvtx) - set(PROFILING_NVTX_INCLUDE ${CUDAToolkit_INCLUDE_DIRS} PARENT_SCOPE) - -endif () - set(PLUM_NO_EXAMPLE ON CACHE BOOL "Disable example build" FORCE) add_subdirectory(libplum EXCLUDE_FROM_ALL) set_target_properties(plum plum-static PROPERTIES FOLDER "3rdparty") diff --git a/CMakeLists.txt b/CMakeLists.txt index 5012b2881..ccc08af46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.16...3.31) - +find_package(PkgConfig QUIET) set(_OLD_CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}") set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) include(WZVcpkgInit) # Must come before project() command diff --git a/lib/ivis_opengl/CMakeLists.txt b/lib/ivis_opengl/CMakeLists.txt index fd2d62a2c..5ad9845bc 100644 --- a/lib/ivis_opengl/CMakeLists.txt +++ b/lib/ivis_opengl/CMakeLists.txt @@ -118,8 +118,11 @@ if(TARGET etcpak) target_link_libraries(ivis-opengl PRIVATE etcpak) target_compile_definitions(ivis-opengl PRIVATE "-DETCPAK_ENABLED") endif() -if(WZ_ENABLE_BASIS_UNIVERSAL AND TARGET basis_transcoder) - target_link_libraries(ivis-opengl PRIVATE basis_transcoder) +if(WZ_ENABLE_BASIS_UNIVERSAL) + find_package(PkgConfig QUIET) + pkg_check_modules(BASIS REQUIRED basisu_encoder) + target_include_directories(ivis-opengl PUBLIC ${BASIS_INCLUDE_DIRS}) + target_link_libraries(ivis-opengl PRIVATE ${BASIS_LINK_LIBRARIES}) target_compile_definitions(ivis-opengl PRIVATE "-DBASIS_ENABLED") else() message(WARNING "Basis-universal support is disabled")