From f4614b0a3db9409261a0e5fc036ab8d2edd9d787 Mon Sep 17 00:00:00 2001 From: Richard Geldreich Date: Sat, 8 Nov 2025 09:05:15 -0500 Subject: [PATCH] Adding EXAMPLES option so they can be optionally compiled (partially from PR 383) --- CMakeLists.txt | 54 ++++++++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f945c62..d147d1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,12 @@ # Important: The Basis Universal encoder and transcoder libraries must be compiled with -fno-strict-aliasing (MSVC's default, and also the Linux kernel). # It should also work without this option, but we do not test with it. -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.20) project(basisu C CXX) set(CMAKE_CXX_STANDARD 17) option(STATIC "static linking" FALSE) option(SAN "sanitize" FALSE) +option(EXAMPLES "build examples" TRUE) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) @@ -32,6 +33,7 @@ message("Initial SSE=${SSE}") message("Initial ZSTD=${ZSTD}") message("Initial OPENCL=${OPENCL}") message("Initial SAN=${SAN}") +message("Initial EXAMPLES=${EXAMPLES}") if ((NOT MSVC) AND OPENCL) # With MSVC builds we use the Khronos lib/include files in the project's "OpenCL" directory, to completely avoid requiring fiddly to install vendor SDK's. @@ -218,15 +220,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) @@ -236,7 +244,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() @@ -247,22 +257,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) @@ -288,12 +306,14 @@ if (MSVC) 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()