From 73822277ed936b8fbcb4d39f31e9b203ea0fbaef Mon Sep 17 00:00:00 2001 From: Danilo Piparo Date: Wed, 25 Mar 2026 11:11:54 +0100 Subject: [PATCH 1/4] [cmake] lz4,lzma builtins: propagate the CMAKE_BUILD_TYPE value --- builtins/lz4/CMakeLists.txt | 1 + builtins/lzma/CMakeLists.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/builtins/lz4/CMakeLists.txt b/builtins/lz4/CMakeLists.txt index d7747968ccade..70b0b30b13b50 100644 --- a/builtins/lz4/CMakeLists.txt +++ b/builtins/lz4/CMakeLists.txt @@ -33,6 +33,7 @@ ExternalProject_Add( PREFIX ${ROOT_LZ4_PREFIX} SOURCE_SUBDIR "build/cmake" CMAKE_ARGS -G ${CMAKE_GENERATOR} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=/lib -DCMAKE_POSITION_INDEPENDENT_CODE=ON diff --git a/builtins/lzma/CMakeLists.txt b/builtins/lzma/CMakeLists.txt index dbefca08d2e2b..9e35cf77b5017 100644 --- a/builtins/lzma/CMakeLists.txt +++ b/builtins/lzma/CMakeLists.txt @@ -37,6 +37,7 @@ ExternalProject_Add( URL_HASH SHA256=${ROOT_LZMA_HASH} PREFIX ${ROOT_LZMA_PREFIX} CMAKE_ARGS -G ${CMAKE_GENERATOR} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_INSTALL_PREFIX= -DCMAKE_INSTALL_LIBDIR=/lib -DCMAKE_POSITION_INDEPENDENT_CODE=ON From fd712ca4883abd1197a07636074bd117c71cc7f0 Mon Sep 17 00:00:00 2001 From: Danilo Piparo Date: Wed, 25 Mar 2026 11:34:28 +0100 Subject: [PATCH 2/4] [cmake] Add target and result variables for the newly revamped builtins namely freetype, libgif, libjpeg, libpng, lz4, lzma, zlib, zstd See https://cmake.org/cmake/help/latest/manual/cmake-modules.7.html --- builtins/freetype/CMakeLists.txt | 7 +++++-- builtins/libgif/CMakeLists.txt | 7 +++++++ builtins/libjpeg/CMakeLists.txt | 7 +++++++ builtins/libpng/CMakeLists.txt | 7 +++++++ builtins/lz4/CMakeLists.txt | 7 +++++++ builtins/lzma/CMakeLists.txt | 7 +++++++ builtins/zlib/CMakeLists.txt | 3 ++- builtins/zstd/CMakeLists.txt | 7 +++++++ 8 files changed, 49 insertions(+), 3 deletions(-) diff --git a/builtins/freetype/CMakeLists.txt b/builtins/freetype/CMakeLists.txt index cac21448bea9a..cab920bd0588b 100644 --- a/builtins/freetype/CMakeLists.txt +++ b/builtins/freetype/CMakeLists.txt @@ -47,12 +47,15 @@ ExternalProject_Add( TIMEOUT 600 ) +add_library(Freetype::Freetype IMPORTED STATIC GLOBAL) + # Set the canonical output of find_package according to # https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#standard-variable-names set(FREETYPE_INCLUDE_DIRS ${FREETYPE_PREFIX}/include/freetype2 PARENT_SCOPE) set(FREETYPE_LIBRARIES ${FREETYPE_LIBRARY} PARENT_SCOPE) -set(FREETYPE_FOUND TRUE PARENT_SCOPE) +set(Freetype_FOUND TRUE PARENT_SCOPE) +set(Freetype_VERSION ${FREETYPE_VERSION} PARENT_SCOPE) if(builtin_zlib) add_dependencies(BUILTIN_FREETYPE BUILTIN_ZLIB) -endif() \ No newline at end of file +endif() diff --git a/builtins/libgif/CMakeLists.txt b/builtins/libgif/CMakeLists.txt index eed00c1cf53bf..8e3d4a4bd0fb8 100644 --- a/builtins/libgif/CMakeLists.txt +++ b/builtins/libgif/CMakeLists.txt @@ -48,3 +48,10 @@ set_target_properties(GIF::GIF PROPERTIES IMPORTED_LOCATION ${ROOT_LIBGIF_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES ${ROOT_LIBGIF_PREFIX}/include ) + +# Set the canonical output of find_package according to +# https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#standard-variable-names +set(GIF_INCLUDE_DIRS ${ROOT_LIBGIF_PREFIX}/include PARENT_SCOPE) +set(GIF_LIBRARIES ${ROOT_LIBGIF_LIBRARY} PARENT_SCOPE) +set(GIF_FOUND TRUE PARENT_SCOPE) +set(GIF_VERSION ${ROOT_LIBGIF_VERSION} PARENT_SCOPE) diff --git a/builtins/libjpeg/CMakeLists.txt b/builtins/libjpeg/CMakeLists.txt index 472c72cea3b7e..341347bf83b0e 100644 --- a/builtins/libjpeg/CMakeLists.txt +++ b/builtins/libjpeg/CMakeLists.txt @@ -56,3 +56,10 @@ set_target_properties(JPEG::JPEG PROPERTIES IMPORTED_LOCATION ${ROOT_LIBJPEG_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES ${ROOT_LIBJPEG_PREFIX}/include ) + +# Set the canonical output of find_package according to +# https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#standard-variable-names +set(JPEG_INCLUDE_DIRS ${${ROOT_LIBJPEG_PREFIX}/include} PARENT_SCOPE) +set(JPEG_LIBRARIES ${ROOT_LIBJPEG_LIBRARY} PARENT_SCOPE) +set(JPEG_FOUND TRUE PARENT_SCOPE) +set(JPEG_VERSION ${ROOT_LIBJPEG_VERSION} PARENT_SCOPE) diff --git a/builtins/libpng/CMakeLists.txt b/builtins/libpng/CMakeLists.txt index 378a667191583..1ebd59e0590cd 100644 --- a/builtins/libpng/CMakeLists.txt +++ b/builtins/libpng/CMakeLists.txt @@ -73,3 +73,10 @@ set_target_properties(PNG::PNG PROPERTIES if(builtin_zlib) add_dependencies(BUILTIN_LIBPNG BUILTIN_ZLIB) endif() + +# Set the canonical output of find_package according to +# https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#standard-variable-names +set(PNG_INCLUDE_DIRS ${ROOT_LIBPNG_PREFIX}/include PARENT_SCOPE) +set(PNG_LIBRARIES ${ROOT_LIBPNG_LIBRARY} PARENT_SCOPE) +set(PNG_FOUND TRUE PARENT_SCOPE) +set(PNG_VERSION ${ROOT_LIBPNG_VERSION} PARENT_SCOPE) diff --git a/builtins/lz4/CMakeLists.txt b/builtins/lz4/CMakeLists.txt index 70b0b30b13b50..168960eea55f6 100644 --- a/builtins/lz4/CMakeLists.txt +++ b/builtins/lz4/CMakeLists.txt @@ -58,3 +58,10 @@ add_library(LibLZ4 STATIC IMPORTED GLOBAL) add_library(LZ4::LZ4 ALIAS LibLZ4) target_include_directories(LibLZ4 INTERFACE ${LIBLZ4_INCLUDE_DIR}) set_target_properties(LibLZ4 PROPERTIES IMPORTED_LOCATION ${ROOT_LZ4_LIBRARY}) + +# Set the canonical output of find_package according to +# https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#standard-variable-names +set(LZ4_INCLUDE_DIRS ${LIBLZ4_INCLUDE_DIR} PARENT_SCOPE) +set(LZ4_LIBRARIES ${ROOT_LZ4_LIBRARY} PARENT_SCOPE) +set(LZ4_FOUND TRUE PARENT_SCOPE) +set(LZ4_VERSION ${ROOT_LZ4_VERSION} PARENT_SCOPE) diff --git a/builtins/lzma/CMakeLists.txt b/builtins/lzma/CMakeLists.txt index 9e35cf77b5017..fbe1d4fd7e002 100644 --- a/builtins/lzma/CMakeLists.txt +++ b/builtins/lzma/CMakeLists.txt @@ -65,3 +65,10 @@ add_library(LibLZMA STATIC IMPORTED GLOBAL) add_library(LibLZMA::LibLZMA ALIAS LibLZMA) target_include_directories(LibLZMA INTERFACE ${LIBLZMA_INCLUDE_DIR}) set_target_properties(LibLZMA PROPERTIES IMPORTED_LOCATION ${LIBLZMA_LIBRARIES}) + +# Set the canonical output of find_package according to +# https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#standard-variable-names +set(LIBLZMA_INCLUDE_DIRS ${LibLZMA_INCLUDE_DIR} PARENT_SCOPE) +set(LIBLZMA_LIBRARIES ${LIBLZMA_LIBRARIES} PARENT_SCOPE) +set(LibLZMA_FOUND TRUE PARENT_SCOPE) +set(LibLZMA_VERSION ${ROOT_LZMA_VERSION} PARENT_SCOPE) diff --git a/builtins/zlib/CMakeLists.txt b/builtins/zlib/CMakeLists.txt index 33848a0070b65..3021d6603bc61 100644 --- a/builtins/zlib/CMakeLists.txt +++ b/builtins/zlib/CMakeLists.txt @@ -65,4 +65,5 @@ add_dependencies(ZLIB BUILTIN_ZLIB) # https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#standard-variable-names set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR} PARENT_SCOPE) set(ZLIB_LIBRARIES ${ROOT_ZLIB_LIBRARY} PARENT_SCOPE) -set(ZLIB_FOUND TRUE PARENT_SCOPE) \ No newline at end of file +set(ZLIB_FOUND TRUE PARENT_SCOPE) +set(ZLIB_VERSION ${ROOT_ZLIB_VERSION} PARENT_SCOPE) diff --git a/builtins/zstd/CMakeLists.txt b/builtins/zstd/CMakeLists.txt index e89a5bef5201a..9ee9ee256c8b5 100644 --- a/builtins/zstd/CMakeLists.txt +++ b/builtins/zstd/CMakeLists.txt @@ -55,3 +55,10 @@ set_target_properties(ZSTD::ZSTD PROPERTIES IMPORTED_LOCATION ${ROOT_ZSTD_LIBRARY} INTERFACE_INCLUDE_DIRECTORIES ${ZSTD_INCLUDE_DIR} ) + +# Set the canonical output of find_package according to +# https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#standard-variable-names +set(ZSTD_INCLUDE_DIRS ${ZSTD_INCLUDE_DIR} PARENT_SCOPE) +set(ZSTD_LIBRARIES ${ROOT_ZSTD_LIBRARY} PARENT_SCOPE) +set(ZSTD_FOUND TRUE PARENT_SCOPE) +set(ZSTD_VERSION ${ROOT_ZSTD_VERSION} PARENT_SCOPE) From cbe1950cbf307bf8f9e3c8cb15992228dd416d57 Mon Sep 17 00:00:00 2001 From: Danilo Piparo Date: Wed, 25 Mar 2026 11:37:37 +0100 Subject: [PATCH 3/4] [cmake] Hide symbols for builtin libgif/jpeg/png and lzma --- builtins/libgif/CMakeLists.txt | 1 + builtins/libjpeg/CMakeLists.txt | 1 + builtins/libpng/CMakeLists.txt | 1 + builtins/lzma/CMakeLists.txt | 1 + 4 files changed, 4 insertions(+) diff --git a/builtins/libgif/CMakeLists.txt b/builtins/libgif/CMakeLists.txt index 8e3d4a4bd0fb8..ce2d639773da4 100644 --- a/builtins/libgif/CMakeLists.txt +++ b/builtins/libgif/CMakeLists.txt @@ -35,6 +35,7 @@ ExternalProject_Add( -DCMAKE_INSTALL_PREFIX= -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_VISIBILITY_PRESET=hidden + -DCMAKE_C_VISIBILITY_PRESET=hidden BUILD_COMMAND ${CMAKE_COMMAND} --build . ${ROOT_LIBGIF_BUILD_COMMAND_FLAGS} INSTALL_COMMAND ${CMAKE_COMMAND} --build . ${ROOT_LIBGIF_BUILD_COMMAND_FLAGS} --target install LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 diff --git a/builtins/libjpeg/CMakeLists.txt b/builtins/libjpeg/CMakeLists.txt index 341347bf83b0e..7787f55a68dac 100644 --- a/builtins/libjpeg/CMakeLists.txt +++ b/builtins/libjpeg/CMakeLists.txt @@ -38,6 +38,7 @@ ExternalProject_Add( -DCMAKE_INSTALL_LIBDIR=/lib -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_VISIBILITY_PRESET=hidden + -DCMAKE_C_VISIBILITY_PRESET=hidden -DENABLE_SHARED=OFF -DWITH_TURBOJPEG=OFF -DWITH_SIMD=OFF diff --git a/builtins/libpng/CMakeLists.txt b/builtins/libpng/CMakeLists.txt index 1ebd59e0590cd..877865f8f9902 100644 --- a/builtins/libpng/CMakeLists.txt +++ b/builtins/libpng/CMakeLists.txt @@ -51,6 +51,7 @@ ExternalProject_Add( -DCMAKE_INSTALL_LIBDIR=/lib -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_VISIBILITY_PRESET=hidden + -DCMAKE_C_VISIBILITY_PRESET=hidden -DPNG_SHARED=OFF -DPNG_STATIC=ON -DZLIB_LIBRARY=${ZLIB_LIBRARIES} diff --git a/builtins/lzma/CMakeLists.txt b/builtins/lzma/CMakeLists.txt index fbe1d4fd7e002..7f4360a42a868 100644 --- a/builtins/lzma/CMakeLists.txt +++ b/builtins/lzma/CMakeLists.txt @@ -42,6 +42,7 @@ ExternalProject_Add( -DCMAKE_INSTALL_LIBDIR=/lib -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_VISIBILITY_PRESET=hidden + -DCMAKE_C_VISIBILITY_PRESET=hidden -DBUILD_SHARED_LIBS=OFF -DENABLE_SCRIPTS=OFF -DXZ_TOOL=OFF From 3787a90fd6525601c69472fbe805fc05d2c355f3 Mon Sep 17 00:00:00 2001 From: Danilo Piparo Date: Wed, 25 Mar 2026 11:49:38 +0100 Subject: [PATCH 4/4] [cmake] freetype, gif, jpeg and png: require explicit user opt-in in case the library is not found on the system. --- cmake/modules/SearchInstalledSoftware.cmake | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake index e3992232535bb..3a10385869c94 100644 --- a/cmake/modules/SearchInstalledSoftware.cmake +++ b/cmake/modules/SearchInstalledSoftware.cmake @@ -108,10 +108,19 @@ foreach(suffix FOUND INCLUDE_DIR LIBRARY LIBRARY_DEBUG LIBRARY_RELEASE LIBRARIES unset(ZSTD_${suffix} CACHE) endforeach() -ROOT_FIND_REQUIRED_DEP(ZLIB builtin_zlib) +# Request explicit user opt-in for required dependencies +ROOT_FIND_REQUIRED_DEP(Freetype builtin_freetype) +ROOT_FIND_REQUIRED_DEP(GIF builtin_gif) +ROOT_FIND_REQUIRED_DEP(JPEG builtin_jpeg) +ROOT_FIND_REQUIRED_DEP(LZ4 builtin_lz4) ROOT_FIND_REQUIRED_DEP(LibLZMA builtin_lzma) +# We cannot PNG here because while searching PNG, CMake will also find ZLIB. +# If found, CMake will define the default variables and target: +# see https://cmake.org/cmake/help/latest/module/FindZLIB.html). +# For this reason, the check has to be put below, after ZLIB is searched for. +#ROOT_FIND_REQUIRED_DEP(PNG builtin_png) +ROOT_FIND_REQUIRED_DEP(ZLIB builtin_zlib) ROOT_FIND_REQUIRED_DEP(ZSTD builtin_zstd) -ROOT_FIND_REQUIRED_DEP(LZ4 builtin_lz4) if(NOT "${MISSING_PACKAGES}" STREQUAL "") message(FATAL_ERROR "The following packages need to be installed or enabled to build ROOT: ${MISSING_PACKAGES}") @@ -161,6 +170,10 @@ else() message(STATUS "Zlib detected") endif() +# This check can be added only now because of the reasons explained above, where all +# other required dependencies are checked. +ROOT_FIND_REQUIRED_DEP(PNG builtin_png) + #---Check for nlohmann/json.hpp--------------------------------------------------------- if(NOT builtin_nlohmannjson) message(STATUS "Looking for nlohmann/json.hpp")