From e4d2662015233f2bd111d73d49981a75ed8f2a6d Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Fri, 1 Nov 2024 04:02:32 -0700 Subject: [PATCH 1/4] build: add option to disable examples in CMake --- CMakeLists.txt | 55 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8345623d..f4ed6708 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,7 @@ cmake_minimum_required(VERSION 3.5) project(basisu) option(STATIC "static linking" FALSE) option(SAN "sanitize" FALSE) +option(EXAMPLES "Build examples" TRUE) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) @@ -174,15 +175,21 @@ add_executable(basisu basisu_tool.cpp) target_link_libraries(basisu PRIVATE basisu_encoder) # Create the new example executable and link against the static library -add_executable(examples example/example.cpp) -target_link_libraries(examples PRIVATE basisu_encoder) +if(EXAMPLES) + add_executable(examples example/example.cpp) + target_link_libraries(examples PRIVATE basisu_encoder) +endif() if (ZSTD) target_compile_definitions(basisu PRIVATE BASISD_SUPPORT_KTX2_ZSTD=1) - target_compile_definitions(examples PRIVATE BASISD_SUPPORT_KTX2_ZSTD=1) + if(EXAMPLES) + target_compile_definitions(examples PRIVATE BASISD_SUPPORT_KTX2_ZSTD=1) + endif() else() target_compile_definitions(basisu PRIVATE BASISD_SUPPORT_KTX2_ZSTD=0) - target_compile_definitions(examples PRIVATE BASISD_SUPPORT_KTX2_ZSTD=0) + if(EXAMPLES) + target_compile_definitions(examples PRIVATE BASISD_SUPPORT_KTX2_ZSTD=0) + endif() endif() if (NOT MSVC) @@ -192,7 +199,9 @@ if (NOT MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBASISU_SUPPORT_OPENCL=1") target_include_directories(basisu PRIVATE ${OpenCL_INCLUDE_DIRS}) - target_include_directories(examples PRIVATE ${OpenCL_INCLUDE_DIRS}) + if(EXAMPLES) + target_include_directories(examples PRIVATE ${OpenCL_INCLUDE_DIRS}) + endif() target_include_directories(basisu_encoder PRIVATE ${OpenCL_INCLUDE_DIRS}) set(BASISU_EXTRA_LIBS ${OpenCL_LIBRARIES}) endif() @@ -203,22 +212,30 @@ else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBASISU_SUPPORT_OPENCL=1") target_include_directories(basisu PRIVATE "OpenCL") - target_include_directories(examples PRIVATE "OpenCL") + if(EXAMPLES) + target_include_directories(examples PRIVATE "OpenCL") + endif() target_include_directories(basisu_encoder PRIVATE "OpenCL") if (BUILD_X64) target_link_libraries(basisu PRIVATE "${CMAKE_SOURCE_DIR}/OpenCL/lib/OpenCL64.lib") - target_link_libraries(examples PRIVATE "${CMAKE_SOURCE_DIR}/OpenCL/lib/OpenCL64.lib") + if(EXAMPLES) + target_link_libraries(examples PRIVATE "${CMAKE_SOURCE_DIR}/OpenCL/lib/OpenCL64.lib") + endif() else() target_link_libraries(basisu PRIVATE "${CMAKE_SOURCE_DIR}/OpenCL/lib/OpenCL.lib") - target_link_libraries(examples PRIVATE "${CMAKE_SOURCE_DIR}/OpenCL/lib/OpenCL.lib") + if(EXAMPLES) + target_link_libraries(examples PRIVATE "${CMAKE_SOURCE_DIR}/OpenCL/lib/OpenCL.lib") + endif() endif() endif() endif() if (NOT MSVC) target_link_libraries(basisu PRIVATE m pthread ${BASISU_EXTRA_LIBS}) - target_link_libraries(examples PRIVATE m pthread ${BASISU_EXTRA_LIBS}) + if(EXAMPLES) + target_link_libraries(examples PRIVATE m pthread ${BASISU_EXTRA_LIBS}) + endif() endif() if (NOT EMSCRIPTEN) @@ -242,13 +259,15 @@ if (MSVC) RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - ) - - set_target_properties(examples PROPERTIES - RUNTIME_OUTPUT_NAME "examples" - RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - ) + ) + + if(EXAMPLES) + set_target_properties(examples PROPERTIES + RUNTIME_OUTPUT_NAME "examples" + RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + ) + endif() endif() From 28d6f71ee33003a8ccbdf6ecf1174d003f2ffc2d Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Fri, 1 Nov 2024 04:10:24 -0700 Subject: [PATCH 2/4] build: fix strip for Ninja Multi-config and LLVM --- CMakeLists.txt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f4ed6708..e4e7c7e6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -240,15 +240,16 @@ endif() if (NOT EMSCRIPTEN) if (UNIX) - if (CMAKE_BUILD_TYPE STREQUAL Release) - if (APPLE) - add_custom_command(TARGET basisu POST_BUILD COMMAND strip -X -x ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/basisu) - #message("strip command: strip -X -x ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/basisu") - else() - add_custom_command(TARGET basisu POST_BUILD COMMAND strip -g -X -x ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/basisu) - #message("strip command: strip -g -X -x ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/basisu") - endif() + set(STRIP_ARGS -X -x) + if (NOT APPLE) + list(APPEND STRIP_ARGS -g) endif() + add_custom_command( + TARGET basisu POST_BUILD + DEPENDS basisu + COMMAND $<$:${CMAKE_STRIP}> + ARGS ${STRIP_ARGS} $ + ) endif() endif() From 56fedfe14ebd21dfec68e8f71f23feabad6c1b44 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Fri, 1 Nov 2024 04:49:41 -0700 Subject: [PATCH 3/4] build: support find_package(basisu CONFIG) --- CMakeLists.txt | 32 ++++++++++++++++++++++++++++++++ basisu-config.cmake.in | 7 +++++++ 2 files changed, 39 insertions(+) create mode 100644 basisu-config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index e4e7c7e6..46818dc4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -169,6 +169,10 @@ endif() # Create the static library add_library(basisu_encoder STATIC ${ENCODER_LIB_SRC_LIST}) +target_include_directories(basisu_encoder PUBLIC + $ + $ + $) # Create the basisu executable and link against the static library add_executable(basisu basisu_tool.cpp) @@ -272,3 +276,31 @@ if (MSVC) ) endif() endif() + +# Target Installation +install(TARGETS basisu_encoder basisu EXPORT basisu-targets) +install(DIRECTORY "./transcoder" DESTINATION "include/basisu/" + FILES_MATCHING PATTERN "*.h" PATTERN "*.inc" +) +install(DIRECTORY "./encoder" DESTINATION "include/basisu/" + FILES_MATCHING PATTERN "*.h" +) + +# CMake Export +include(CMakePackageConfigHelpers) +include(GNUInstallDirs) +configure_package_config_file( + ${PROJECT_SOURCE_DIR}/basisu-config.cmake.in + ${PROJECT_BINARY_DIR}/basisu-config.cmake + INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/basisu) +export( + TARGETS basisu_encoder basisu + NAMESPACE basisu:: + FILE ${PROJECT_BINARY_DIR}/basisu-targets.cmake) +install( + FILES ${PROJECT_BINARY_DIR}/basisu-config.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/basisu) +install( + EXPORT basisu-targets + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/basisu + NAMESPACE basisu::) diff --git a/basisu-config.cmake.in b/basisu-config.cmake.in new file mode 100644 index 00000000..6ac330ed --- /dev/null +++ b/basisu-config.cmake.in @@ -0,0 +1,7 @@ +@PACKAGE_INIT@ + +if (NOT TARGET basisu::basisu_encoder) + include(${CMAKE_CURRENT_LIST_DIR}/basisu-targets.cmake) +endif () + +check_required_components(basisu) From 872aca5dc25036c12cb31b3916923b16bdd70fe3 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Sat, 2 Nov 2024 03:51:56 -0700 Subject: [PATCH 4/4] build: forward BASISD options to the targets if defined externally --- CMakeLists.txt | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 46818dc4..6931bdad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -277,6 +277,35 @@ if (MSVC) endif() endif() +# Forward BASISD options to the targets if they are defined externally +set(BASISD_OPTIONS + BASISD_SUPPORT_KTX2 + BASISD_SUPPORT_KTX2_ZSTD + BASISD_SUPPORT_DXT1 + BASISD_SUPPORT_DXT5A + BASISD_SUPPORT_BC7 + BASISD_SUPPORT_BC7_MODE5 + BASISD_SUPPORT_PVRTC1 + BASISD_SUPPORT_PVRTC2 + BASISD_SUPPORT_ETC2_EAC_A8 + BASISD_SUPPORT_ETC2_EAC_RG11 + BASISD_SUPPORT_UASTC + BASISD_SUPPORT_UASTC_HDR + BASISD_SUPPORT_ATC + BASISD_SUPPORT_ASTC + BASISD_SUPPORT_ASTC_HIGHER_OPAQUE_QUALITY + BASISD_SUPPORT_FXT1) +foreach(BASISD_OPTION ${BASISD_OPTIONS}) + if(DEFINED ${BASISD_OPTION}) + message(${BASISD_OPTION}=${${BASISD_OPTION}}) + target_compile_definitions(basisu PRIVATE ${BASISD_OPTION}=${${BASISD_OPTION}}) + target_compile_definitions(basisu_encoder PRIVATE ${BASISD_OPTION}=${${BASISD_OPTION}}) + if(EXAMPLES) + target_compile_definitions(examples PRIVATE ${BASISD_OPTION}=${${BASISD_OPTION}}) + endif() + endif() +endforeach() + # Target Installation install(TARGETS basisu_encoder basisu EXPORT basisu-targets) install(DIRECTORY "./transcoder" DESTINATION "include/basisu/"