From 6b708a5a93350a257587dc8b84281837b629aef0 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Tue, 14 Apr 2026 10:15:19 +0200 Subject: [PATCH 01/10] [ci] enable builtins in alma10-clangninja as dpiparo suggested --- .../root-ci-config/buildconfig/alma10-clang_ninja.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt b/.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt index 1ecdd6500b5d4..0f3e3c454de1b 100644 --- a/.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt +++ b/.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt @@ -2,12 +2,15 @@ CMAKE_C_COMPILER=clang CMAKE_CXX_COMPILER=clang++ CMAKE_GENERATOR=Ninja builtin_freetype=ON +builtin_fftw3=ON builtin_gif=ON builtin_gl2ps=ON +builtin_gsl=ON builtin_jpeg=ON builtin_lz4=ON builtin_lzma=ON builtin_png=ON +builtin_tbb=ON builtin_vdt=ON builtin_zlib=ON builtin_zstd=ON From d47230ffa629f862c8de547b32cef246b9a763d3 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Mon, 13 Apr 2026 15:16:08 +0200 Subject: [PATCH 02/10] [cmake] move ExternalProject_Add to subdir for consistency --- builtins/fftw3/CMakeLists.txt | 17 ++ builtins/gsl/CMakeLists.txt | 33 ++ builtins/gtest/CMakeLists.txt | 111 +++++++ builtins/mathjax/CMakeLists.txt | 10 + builtins/openui5/CMakeLists.txt | 24 ++ builtins/rendercore/CMakeLists.txt | 11 + builtins/tbb/CMakeLists.txt | 68 +++++ builtins/vdt/CMakeLists.txt | 39 +++ cmake/modules/SearchInstalledSoftware.cmake | 323 +------------------- 9 files changed, 322 insertions(+), 314 deletions(-) create mode 100644 builtins/fftw3/CMakeLists.txt create mode 100644 builtins/gsl/CMakeLists.txt create mode 100644 builtins/gtest/CMakeLists.txt create mode 100644 builtins/mathjax/CMakeLists.txt create mode 100644 builtins/openui5/CMakeLists.txt create mode 100644 builtins/rendercore/CMakeLists.txt create mode 100644 builtins/tbb/CMakeLists.txt create mode 100644 builtins/vdt/CMakeLists.txt diff --git a/builtins/fftw3/CMakeLists.txt b/builtins/fftw3/CMakeLists.txt new file mode 100644 index 0000000000000..cd2fad20baba8 --- /dev/null +++ b/builtins/fftw3/CMakeLists.txt @@ -0,0 +1,17 @@ +set(FFTW_VERSION 3.3.10) +message(STATUS "Downloading and building FFTW version ${FFTW_VERSION}") +set(FFTW_LIBRARIES ${CMAKE_BINARY_DIR}/lib/libfftw3.a) +ExternalProject_Add( + FFTW3 + URL ${lcgpackages}/fftw-${FFTW_VERSION}.tar.gz + URL_HASH SHA256=56c932549852cddcfafdab3820b0200c7742675be92179e59e6215b340e26467 + INSTALL_DIR ${CMAKE_BINARY_DIR} + CONFIGURE_COMMAND ./configure --prefix= + BUILD_COMMAND make CFLAGS=-fPIC + LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 + BUILD_IN_SOURCE 1 + BUILD_BYPRODUCTS ${FFTW_LIBRARIES} + TIMEOUT 600 +) +set(FFTW_INCLUDE_DIR ${CMAKE_BINARY_DIR}/include PARENT_SCOPE) +set(FFTW3_TARGET FFTW3 PARENT_SCOPE) diff --git a/builtins/gsl/CMakeLists.txt b/builtins/gsl/CMakeLists.txt new file mode 100644 index 0000000000000..41fe35338cb38 --- /dev/null +++ b/builtins/gsl/CMakeLists.txt @@ -0,0 +1,33 @@ +set(gsl_version 2.8) +message(STATUS "Downloading and building GSL version ${gsl_version}") +set(GSL_LIBRARIES ${GSL_LIBRARIES}) +foreach(l gsl gslcblas) + list(APPEND GSL_LIBRARIES ${CMAKE_BINARY_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${l}${CMAKE_STATIC_LIBRARY_SUFFIX}) +endforeach() +set(GSL_CBLAS_LIBRARY ${CMAKE_BINARY_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gslcblas${CMAKE_STATIC_LIBRARY_SUFFIX}) +if(CMAKE_OSX_SYSROOT) + set(_gsl_cppflags "-isysroot ${CMAKE_OSX_SYSROOT}") + set(_gsl_ldflags "-isysroot ${CMAKE_OSX_SYSROOT}") +endif() +ExternalProject_Add( + GSL + # http://mirror.switch.ch/ftp/mirror/gnu/gsl/gsl-${gsl_version}.tar.gz + URL ${lcgpackages}/gsl-${gsl_version}.tar.gz + URL_HASH SHA256=6a99eeed15632c6354895b1dd542ed5a855c0f15d9ad1326c6fe2b2c9e423190 + SOURCE_DIR GSL-src # prevent "" vs GSL/ macOS warning + INSTALL_DIR ${CMAKE_BINARY_DIR} + CONFIGURE_COMMAND /configure --prefix + --libdir=/lib + --enable-shared=no --with-pic + CC=${CMAKE_C_COMPILER} + CFLAGS=${CMAKE_C_FLAGS} + CPPFLAGS=${_gsl_cppflags} + LDFLAGS=${_gsl_ldflags} + LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 + BUILD_BYPRODUCTS ${GSL_LIBRARIES} + TIMEOUT 600 +) +set(GSL_TARGET GSL PARENT_SCOPE) +# FIXME: one need to find better way to extract path with GSL include files +set(GSL_INCLUDE_DIR ${CMAKE_BINARY_DIR}/GSL-prefix/src/GSL-build PARENT_SCOPE) +set(GSL_FOUND ON PARENT_SCOPE) diff --git a/builtins/gtest/CMakeLists.txt b/builtins/gtest/CMakeLists.txt new file mode 100644 index 0000000000000..6dda508a10aec --- /dev/null +++ b/builtins/gtest/CMakeLists.txt @@ -0,0 +1,111 @@ +# Add googletest +# http://stackoverflow.com/questions/9689183/cmake-googletest + +set(_gtest_byproduct_binary_dir + ${CMAKE_CURRENT_BINARY_DIR}/googletest-prefix/src/googletest-build) +set(_gtest_byproducts + ${_gtest_byproduct_binary_dir}/lib/libgtest.a + ${_gtest_byproduct_binary_dir}/lib/libgtest_main.a + ${_gtest_byproduct_binary_dir}/lib/libgmock.a + ${_gtest_byproduct_binary_dir}/lib/libgmock_main.a + ) + +set(GTEST_CXX_FLAGS "${ROOT_EXTERNAL_CXX_FLAGS}") +if(MSVC) + if(winrtdebug) + set(GTEST_BUILD_TYPE Debug) + else() + set(GTEST_BUILD_TYPE Release) + endif() + set(_gtest_byproducts + ${_gtest_byproduct_binary_dir}/lib/gtest.lib + ${_gtest_byproduct_binary_dir}/lib/gtest_main.lib + ${_gtest_byproduct_binary_dir}/lib/gmock.lib + ${_gtest_byproduct_binary_dir}/lib/gmock_main.lib + ) + if(CMAKE_GENERATOR MATCHES Ninja) + set(GTEST_BUILD_COMMAND "BUILD_COMMAND ${CMAKE_COMMAND} --build ") + else() + set(GTEST_BUILD_COMMAND "BUILD_COMMAND ${CMAKE_COMMAND} --build --config ${GTEST_BUILD_TYPE}") + endif() + if(asan) + if(NOT winrtdebug) + set(gtestbuild "RelWithDebInfo") + endif() + set(GTEST_CXX_FLAGS "${ROOT_EXTERNAL_CXX_FLAGS} ${ASAN_EXTRA_CXX_FLAGS}") + endif() + set(EXTRA_GTEST_OPTS + -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=${_gtest_byproduct_binary_dir}/lib/ + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL:PATH=${_gtest_byproduct_binary_dir}/lib/ + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=${_gtest_byproduct_binary_dir}/lib/ + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO:PATH=${_gtest_byproduct_binary_dir}/lib/ + -Dgtest_force_shared_crt=ON + ${GTEST_BUILD_COMMAND}) +else() + set(GTEST_BUILD_TYPE Release) +endif() +if(APPLE) + set(EXTRA_GTEST_OPTS + -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}) +endif() + +ExternalProject_Add( + googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_SHALLOW 1 + GIT_TAG v1.17.0 + UPDATE_COMMAND "" + # # Force separate output paths for debug and release builds to allow easy + # # identification of correct lib in subsequent TARGET_LINK_LIBRARIES commands + # CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs + # -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs + # -Dgtest_force_shared_crt=ON + CMAKE_ARGS -G ${CMAKE_GENERATOR} + -DCMAKE_BUILD_TYPE=${GTEST_BUILD_TYPE} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_CXX_FLAGS=${GTEST_CXX_FLAGS} + -DCMAKE_AR=${CMAKE_AR} + -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} + ${EXTRA_GTEST_OPTS} + # Disable install step + INSTALL_COMMAND "" + BUILD_BYPRODUCTS ${_gtest_byproducts} + # Wrap download, configure and build steps in a script to log output + LOG_DOWNLOAD ON LOG_CONFIGURE ON LOG_BUILD ON LOG_OUTPUT_ON_FAILURE ON + TIMEOUT 600 +) + +# Specify include dirs for gtest and gmock +ExternalProject_Get_Property(googletest source_dir) +set(GTEST_INCLUDE_DIR ${source_dir}/googletest/include) +set(GMOCK_INCLUDE_DIR ${source_dir}/googlemock/include) +# Create the directories. Prevents bug https://gitlab.kitware.com/cmake/cmake/issues/15052 +file(MAKE_DIRECTORY ${GTEST_INCLUDE_DIR} ${GMOCK_INCLUDE_DIR}) + +# Libraries +ExternalProject_Get_Property(googletest binary_dir) +set(_G_LIBRARY_PATH ${binary_dir}/lib/) + +# Use gmock_main instead of gtest_main because it initializes gtest as well. +# Note: The libraries are listed in reverse order of their dependencies. +foreach(lib gtest gtest_main gmock gmock_main) + add_library(${lib} IMPORTED STATIC GLOBAL) + set_target_properties(${lib} PROPERTIES + IMPORTED_LOCATION "${_G_LIBRARY_PATH}${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}" + ) + add_dependencies(${lib} googletest) + if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND + ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL 9) + target_compile_options(${lib} INTERFACE -Wno-deprecated-copy) + endif() +endforeach() +target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIR}) +target_include_directories(gmock INTERFACE ${GMOCK_INCLUDE_DIR}) + +set_property(TARGET gtest PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}) +set_property(TARGET gtest_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}) +set_property(TARGET gmock PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX}) +set_property(TARGET gmock_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock_main${CMAKE_STATIC_LIBRARY_SUFFIX}) diff --git a/builtins/mathjax/CMakeLists.txt b/builtins/mathjax/CMakeLists.txt new file mode 100644 index 0000000000000..39f2fc88e1f59 --- /dev/null +++ b/builtins/mathjax/CMakeLists.txt @@ -0,0 +1,10 @@ +ExternalProject_Add( + MATHJAX + URL ${CMAKE_SOURCE_DIR}/documentation/doxygen/mathjax.tar.gz # TODO move to LCGpackages + URL_HASH SHA256=c5e22e60430a65963a87ab4dcc8856b9be5bd434d3b3871f27ee65b584c3c3ea + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + SOURCE_DIR ${CMAKE_BINARY_DIR}/js/mathjax/ + TIMEOUT 600 +) diff --git a/builtins/openui5/CMakeLists.txt b/builtins/openui5/CMakeLists.txt new file mode 100644 index 0000000000000..089cd61cd2c28 --- /dev/null +++ b/builtins/openui5/CMakeLists.txt @@ -0,0 +1,24 @@ +if(builtin_openui5) +ExternalProject_Add( + OPENUI5 + URL ${CMAKE_SOURCE_DIR}/builtins/openui5/openui5.tar.gz + URL_HASH SHA256=b9e6495d8640302d9cf2fe3c99331311335aaab0f48794565ebd69ecc7449e58 + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + SOURCE_DIR ${CMAKE_BINARY_DIR}/ui5/distribution + TIMEOUT 600 +) +else() +ExternalProject_Add( + OPENUI5 + URL https://github.com/SAP/openui5/releases/download/1.135.0/openui5-runtime-1.135.0.zip + URL_HASH SHA256=13acdb88a7f3f1d4afef6d1d500b53bccc4b593e7acf442721bb4e3da4e2690b + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + SOURCE_DIR ${CMAKE_BINARY_DIR}/ui5/distribution + TIMEOUT 600 +) +endif() +install(DIRECTORY ${CMAKE_BINARY_DIR}/ui5/distribution/ DESTINATION ${CMAKE_INSTALL_OPENUI5DIR}/distribution/ COMPONENT libraries FILES_MATCHING PATTERN "*") diff --git a/builtins/rendercore/CMakeLists.txt b/builtins/rendercore/CMakeLists.txt new file mode 100644 index 0000000000000..b2c83a898b516 --- /dev/null +++ b/builtins/rendercore/CMakeLists.txt @@ -0,0 +1,11 @@ +ExternalProject_Add( + RENDERCORE + URL ${CMAKE_SOURCE_DIR}/builtins/rendercore/RenderCore-1.9.tar.gz # TODO move to LCG + URL_HASH SHA256=7728f00ee5e907c36b25aad56fbc73881c7c9faf47a36bee5efd2054bc4ecc6c + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + SOURCE_DIR ${CMAKE_BINARY_DIR}/ui5/eve7/rcore + TIMEOUT 600 +) +install(DIRECTORY ${CMAKE_BINARY_DIR}/ui5/eve7/rcore/ DESTINATION ${CMAKE_INSTALL_OPENUI5DIR}/eve7/rcore/ COMPONENT libraries FILES_MATCHING PATTERN "*") diff --git a/builtins/tbb/CMakeLists.txt b/builtins/tbb/CMakeLists.txt new file mode 100644 index 0000000000000..4c916f37feca6 --- /dev/null +++ b/builtins/tbb/CMakeLists.txt @@ -0,0 +1,68 @@ +set(tbb_url ${lcgpackages}/oneTBB-2021.9.0.tar.gz) +set(tbb_sha256 1ce48f34dada7837f510735ff1172f6e2c261b09460e3bf773b49791d247d24e) + +if(MSVC) + if(CMAKE_GENERATOR MATCHES Ninja) + if(CMAKE_BUILD_TYPE MATCHES Debug) + set(tbbsuffix "_debug") + endif() + else() + set(tbb_build Release) + if(winrtdebug) + set(tbb_build Debug) + set(tbbsuffix "_debug") + endif() + endif() + set(TBB_LIBRARIES ${CMAKE_BINARY_DIR}/lib/tbb12${tbbsuffix}.lib) + set(TBB_CXXFLAGS "-D__TBB_NO_IMPLICIT_LINKAGE=1") + install(DIRECTORY ${CMAKE_BINARY_DIR}/bin/ DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries FILES_MATCHING PATTERN "tbb*.dll") + install(DIRECTORY ${CMAKE_BINARY_DIR}/lib/ DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries FILES_MATCHING PATTERN "tbb*.lib") +else() + if (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(tbbsuffix "_debug") + endif() + set(TBB_LIBRARIES ${CMAKE_BINARY_DIR}/lib/libtbb${tbbsuffix}${CMAKE_SHARED_LIBRARY_SUFFIX}) + install(DIRECTORY ${CMAKE_BINARY_DIR}/lib/ DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries FILES_MATCHING PATTERN "libtbb*") +endif() +if(tbb_build) + set(TBB_EXTRA_BUILD_ARGS --config ${tbb_build}) +endif() + +ExternalProject_Add( + TBB + URL ${tbb_url} + URL_HASH SHA256=${tbb_sha256} + INSTALL_DIR ${CMAKE_BINARY_DIR} + CMAKE_ARGS -G ${CMAKE_GENERATOR} + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_CXX_FLAGS=${ROOT_EXTERNAL_CXX_FLAGS} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_BINARY_DIR}/include + -DCMAKE_INSTALL_LIBDIR=${CMAKE_BINARY_DIR}/lib + -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR} + -DTBBMALLOC_BUILD=OFF + -DTBBMALLOC_PROXY_BUILD=OFF + -DTBB_ENABLE_IPO=OFF + -DTBB_STRICT=OFF + -DTBB_TEST=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build . ${TBB_EXTRA_BUILD_ARGS} + INSTALL_COMMAND ${CMAKE_COMMAND} --install . ${TBB_EXTRA_BUILD_ARGS} + LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 + BUILD_BYPRODUCTS ${TBB_LIBRARIES} + TIMEOUT 600 +) + +ExternalProject_Add_Step( + TBB tbb2externals + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/tbb ${CMAKE_BINARY_DIR}/ginclude/tbb + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/oneapi ${CMAKE_BINARY_DIR}/ginclude/oneapi + DEPENDEES install +) +set(TBB_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/ginclude PARENT_SCOPE) +set(TBB_CXXFLAGS "-DTBB_SUPPRESS_DEPRECATED_MESSAGES=1" PARENT_SCOPE) +# The following line is needed to generate the proper dependency with: BUILTINS TBB (in Imt) +# and generated with this syntax: add_dependencies(${library} ${${arg1}_TARGET}) +set(TBB_TARGET TBB PARENT_SCOPE) \ No newline at end of file diff --git a/builtins/vdt/CMakeLists.txt b/builtins/vdt/CMakeLists.txt new file mode 100644 index 0000000000000..f012fea0b504a --- /dev/null +++ b/builtins/vdt/CMakeLists.txt @@ -0,0 +1,39 @@ +set(vdt_version 0.4.6) +set(VDT_FOUND True) +set(VDT_LIBRARIES "${CMAKE_BINARY_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}vdt${CMAKE_SHARED_LIBRARY_SUFFIX}") +ExternalProject_Add( + BUILTIN_VDT + URL ${lcgpackages}/vdt-${vdt_version}.tar.gz + URL_HASH SHA256=1820feae446780763ec8bbb60a0dbcf3ae1ee548bdd01415b1fb905fd4f90c54 + INSTALL_DIR ${CMAKE_BINARY_DIR} + CMAKE_ARGS + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 + -DSSE=OFF # breaks on ARM without this + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} + -DCMAKE_CXX_FLAGS=${ROOT_EXTERNAL_CXX_FLAGS} + -DCMAKE_INSTALL_PREFIX= + LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 + BUILD_BYPRODUCTS ${VDT_LIBRARIES} + TIMEOUT 600 +) +ExternalProject_Add_Step( + BUILTIN_VDT copy2externals + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/vdt ${CMAKE_BINARY_DIR}/ginclude/vdt + DEPENDEES install +) +set(VDT_INCLUDE_DIR ${CMAKE_BINARY_DIR}/ginclude) +set(VDT_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/ginclude) + +add_library(VDT::VDT SHARED IMPORTED GLOBAL) +add_dependencies(VDT::VDT BUILTIN_VDT) +set_target_properties(VDT::VDT PROPERTIES IMPORTED_LOCATION ${VDT_LIBRARIES}) +target_include_directories(VDT::VDT INTERFACE $ $) + +install(FILES ${VDT_LIBRARIES} + DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries) +install(DIRECTORY ${CMAKE_BINARY_DIR}/include/vdt + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT extra-headers) +set_property(GLOBAL APPEND PROPERTY ROOT_BUILTIN_TARGETS VDT::VDT) diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake index ec812855ad905..8de1e8174c8d7 100644 --- a/cmake/modules/SearchInstalledSoftware.cmake +++ b/cmake/modules/SearchInstalledSoftware.cmake @@ -417,38 +417,7 @@ if(mathmore OR builtin_gsl OR (tmva-cpu AND use_gsl_cblas)) endif() endif() else() - set(gsl_version 2.8) - message(STATUS "Downloading and building GSL version ${gsl_version}") - foreach(l gsl gslcblas) - list(APPEND GSL_LIBRARIES ${CMAKE_BINARY_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${l}${CMAKE_STATIC_LIBRARY_SUFFIX}) - endforeach() - set(GSL_CBLAS_LIBRARY ${CMAKE_BINARY_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gslcblas${CMAKE_STATIC_LIBRARY_SUFFIX}) - if(CMAKE_OSX_SYSROOT) - set(_gsl_cppflags "-isysroot ${CMAKE_OSX_SYSROOT}") - set(_gsl_ldflags "-isysroot ${CMAKE_OSX_SYSROOT}") - endif() - ExternalProject_Add( - GSL - # http://mirror.switch.ch/ftp/mirror/gnu/gsl/gsl-${gsl_version}.tar.gz - URL ${lcgpackages}/gsl-${gsl_version}.tar.gz - URL_HASH SHA256=6a99eeed15632c6354895b1dd542ed5a855c0f15d9ad1326c6fe2b2c9e423190 - SOURCE_DIR GSL-src # prevent "" vs GSL/ macOS warning - INSTALL_DIR ${CMAKE_BINARY_DIR} - CONFIGURE_COMMAND /configure --prefix - --libdir=/lib - --enable-shared=no --with-pic - CC=${CMAKE_C_COMPILER} - CFLAGS=${CMAKE_C_FLAGS} - CPPFLAGS=${_gsl_cppflags} - LDFLAGS=${_gsl_ldflags} - LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 - BUILD_BYPRODUCTS ${GSL_LIBRARIES} - TIMEOUT 600 - ) - set(GSL_TARGET GSL) - # FIXME: one need to find better way to extract path with GSL include files - set(GSL_INCLUDE_DIR ${CMAKE_BINARY_DIR}/GSL-prefix/src/GSL-build) - set(GSL_FOUND ON) + add_subdirectory(builtins/gsl) set(mathmore ON CACHE BOOL "Enabled because builtin_gsl requested (${mathmore_description})" FORCE) endif() endif() @@ -654,23 +623,7 @@ if(fftw3) endif() endif() if(builtin_fftw3) - set(FFTW_VERSION 3.3.10) - message(STATUS "Downloading and building FFTW version ${FFTW_VERSION}") - set(FFTW_LIBRARIES ${CMAKE_BINARY_DIR}/lib/libfftw3.a) - ExternalProject_Add( - FFTW3 - URL ${lcgpackages}/fftw-${FFTW_VERSION}.tar.gz - URL_HASH SHA256=56c932549852cddcfafdab3820b0200c7742675be92179e59e6215b340e26467 - INSTALL_DIR ${CMAKE_BINARY_DIR} - CONFIGURE_COMMAND ./configure --prefix= - BUILD_COMMAND make CFLAGS=-fPIC - LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 - BUILD_IN_SOURCE 1 - BUILD_BYPRODUCTS ${FFTW_LIBRARIES} - TIMEOUT 600 - ) - set(FFTW_INCLUDE_DIR ${CMAKE_BINARY_DIR}/include) - set(FFTW3_TARGET FFTW3) + add_subdirectory(builtins/fftw3) set(fftw3 ON CACHE BOOL "Enabled because builtin_fftw3 requested (${fftw3_description})" FORCE) endif() @@ -1013,74 +966,7 @@ if(builtin_tbb) endif() if(builtin_tbb) - set(tbb_url ${lcgpackages}/oneTBB-2021.9.0.tar.gz) - set(tbb_sha256 1ce48f34dada7837f510735ff1172f6e2c261b09460e3bf773b49791d247d24e) - - if(MSVC) - if(CMAKE_GENERATOR MATCHES Ninja) - if(CMAKE_BUILD_TYPE MATCHES Debug) - set(tbbsuffix "_debug") - endif() - else() - set(tbb_build Release) - if(winrtdebug) - set(tbb_build Debug) - set(tbbsuffix "_debug") - endif() - endif() - set(TBB_LIBRARIES ${CMAKE_BINARY_DIR}/lib/tbb12${tbbsuffix}.lib) - set(TBB_CXXFLAGS "-D__TBB_NO_IMPLICIT_LINKAGE=1") - install(DIRECTORY ${CMAKE_BINARY_DIR}/bin/ DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries FILES_MATCHING PATTERN "tbb*.dll") - install(DIRECTORY ${CMAKE_BINARY_DIR}/lib/ DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries FILES_MATCHING PATTERN "tbb*.lib") - else() - if (CMAKE_BUILD_TYPE STREQUAL "Debug") - set(tbbsuffix "_debug") - endif() - set(TBB_LIBRARIES ${CMAKE_BINARY_DIR}/lib/libtbb${tbbsuffix}${CMAKE_SHARED_LIBRARY_SUFFIX}) - install(DIRECTORY ${CMAKE_BINARY_DIR}/lib/ DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries FILES_MATCHING PATTERN "libtbb*") - endif() - if(tbb_build) - set(TBB_EXTRA_BUILD_ARGS --config ${tbb_build}) - endif() - - ExternalProject_Add( - TBB - URL ${tbb_url} - URL_HASH SHA256=${tbb_sha256} - INSTALL_DIR ${CMAKE_BINARY_DIR} - CMAKE_ARGS -G ${CMAKE_GENERATOR} - -DCMAKE_POLICY_VERSION_MINIMUM=3.5 - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_CXX_FLAGS=${ROOT_EXTERNAL_CXX_FLAGS} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_BINARY_DIR}/include - -DCMAKE_INSTALL_LIBDIR=${CMAKE_BINARY_DIR}/lib - -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR} - -DTBBMALLOC_BUILD=OFF - -DTBBMALLOC_PROXY_BUILD=OFF - -DTBB_ENABLE_IPO=OFF - -DTBB_STRICT=OFF - -DTBB_TEST=OFF - BUILD_COMMAND ${CMAKE_COMMAND} --build . ${TBB_EXTRA_BUILD_ARGS} - INSTALL_COMMAND ${CMAKE_COMMAND} --install . ${TBB_EXTRA_BUILD_ARGS} - LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 - BUILD_BYPRODUCTS ${TBB_LIBRARIES} - TIMEOUT 600 - ) - - ExternalProject_Add_Step( - TBB tbb2externals - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/tbb ${CMAKE_BINARY_DIR}/ginclude/tbb - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/oneapi ${CMAKE_BINARY_DIR}/ginclude/oneapi - DEPENDEES install - ) - set(TBB_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/ginclude) - set(TBB_CXXFLAGS "-DTBB_SUPPRESS_DEPRECATED_MESSAGES=1") - # The following line is needed to generate the proper dependency with: BUILTINS TBB (in Imt) - # and generated with this syntax: add_dependencies(${library} ${${arg1}_TARGET}) - set(TBB_TARGET TBB) + add_subdirectory(builtins/tbb) endif() if(builtin_vdt) @@ -1108,45 +994,7 @@ if(vdt OR builtin_vdt) endif() endif() if(builtin_vdt) - set(vdt_version 0.4.6) - set(VDT_FOUND True) - set(VDT_LIBRARIES ${CMAKE_BINARY_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}vdt${CMAKE_SHARED_LIBRARY_SUFFIX}) - ExternalProject_Add( - BUILTIN_VDT - URL ${lcgpackages}/vdt-${vdt_version}.tar.gz - URL_HASH SHA256=1820feae446780763ec8bbb60a0dbcf3ae1ee548bdd01415b1fb905fd4f90c54 - INSTALL_DIR ${CMAKE_BINARY_DIR} - CMAKE_ARGS - -DCMAKE_POLICY_VERSION_MINIMUM=3.5 - -DSSE=OFF # breaks on ARM without this - -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_CXX_FLAGS=${ROOT_EXTERNAL_CXX_FLAGS} - -DCMAKE_INSTALL_PREFIX= - LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 - BUILD_BYPRODUCTS ${VDT_LIBRARIES} - TIMEOUT 600 - ) - ExternalProject_Add_Step( - BUILTIN_VDT copy2externals - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/vdt ${CMAKE_BINARY_DIR}/ginclude/vdt - DEPENDEES install - ) - set(VDT_INCLUDE_DIR ${CMAKE_BINARY_DIR}/ginclude) - set(VDT_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/ginclude) - - add_library(VDT::VDT SHARED IMPORTED GLOBAL) - add_dependencies(VDT::VDT BUILTIN_VDT) - set_target_properties(VDT::VDT PROPERTIES IMPORTED_LOCATION "${VDT_LIBRARIES}") - target_include_directories(VDT::VDT INTERFACE $ $) - - install(FILES ${VDT_LIBRARIES} - DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries) - install(DIRECTORY ${CMAKE_BINARY_DIR}/include/vdt - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT extra-headers) - set_property(GLOBAL APPEND PROPERTY ROOT_BUILTIN_TARGETS VDT::VDT) + add_subdirectory(builtins/vdt) else() BUILD_ROOT_INCLUDE_PATH("${VDT_INCLUDE_DIR}") endif() @@ -1505,118 +1353,7 @@ if (testing OR testsupport) endif() if (builtin_gtest) - # Add googletest - # http://stackoverflow.com/questions/9689183/cmake-googletest - - set(_gtest_byproduct_binary_dir - ${CMAKE_CURRENT_BINARY_DIR}/googletest-prefix/src/googletest-build) - set(_gtest_byproducts - ${_gtest_byproduct_binary_dir}/lib/libgtest.a - ${_gtest_byproduct_binary_dir}/lib/libgtest_main.a - ${_gtest_byproduct_binary_dir}/lib/libgmock.a - ${_gtest_byproduct_binary_dir}/lib/libgmock_main.a - ) - - set(GTEST_CXX_FLAGS "${ROOT_EXTERNAL_CXX_FLAGS}") - if(MSVC) - if(winrtdebug) - set(GTEST_BUILD_TYPE Debug) - else() - set(GTEST_BUILD_TYPE Release) - endif() - set(_gtest_byproducts - ${_gtest_byproduct_binary_dir}/lib/gtest.lib - ${_gtest_byproduct_binary_dir}/lib/gtest_main.lib - ${_gtest_byproduct_binary_dir}/lib/gmock.lib - ${_gtest_byproduct_binary_dir}/lib/gmock_main.lib - ) - if(CMAKE_GENERATOR MATCHES Ninja) - set(GTEST_BUILD_COMMAND "BUILD_COMMAND ${CMAKE_COMMAND} --build ") - else() - set(GTEST_BUILD_COMMAND "BUILD_COMMAND ${CMAKE_COMMAND} --build --config ${GTEST_BUILD_TYPE}") - endif() - if(asan) - if(NOT winrtdebug) - set(gtestbuild "RelWithDebInfo") - endif() - set(GTEST_CXX_FLAGS "${ROOT_EXTERNAL_CXX_FLAGS} ${ASAN_EXTRA_CXX_FLAGS}") - endif() - set(EXTRA_GTEST_OPTS - -DCMAKE_CXX_FLAGS_DEBUG=${CMAKE_CXX_FLAGS_DEBUG} - -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=${_gtest_byproduct_binary_dir}/lib/ - -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL:PATH=${_gtest_byproduct_binary_dir}/lib/ - -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=${_gtest_byproduct_binary_dir}/lib/ - -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO:PATH=${_gtest_byproduct_binary_dir}/lib/ - -Dgtest_force_shared_crt=ON - ${GTEST_BUILD_COMMAND}) - else() - set(GTEST_BUILD_TYPE Release) - endif() - if(APPLE) - set(EXTRA_GTEST_OPTS - -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}) - endif() - - ExternalProject_Add( - googletest - GIT_REPOSITORY https://github.com/google/googletest.git - GIT_SHALLOW 1 - GIT_TAG v1.17.0 - UPDATE_COMMAND "" - # # Force separate output paths for debug and release builds to allow easy - # # identification of correct lib in subsequent TARGET_LINK_LIBRARIES commands - # CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs - # -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs - # -Dgtest_force_shared_crt=ON - CMAKE_ARGS -G ${CMAKE_GENERATOR} - -DCMAKE_BUILD_TYPE=${GTEST_BUILD_TYPE} - -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} - -DCMAKE_CXX_FLAGS=${GTEST_CXX_FLAGS} - -DCMAKE_AR=${CMAKE_AR} - -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} - ${EXTRA_GTEST_OPTS} - # Disable install step - INSTALL_COMMAND "" - BUILD_BYPRODUCTS ${_gtest_byproducts} - # Wrap download, configure and build steps in a script to log output - LOG_DOWNLOAD ON LOG_CONFIGURE ON LOG_BUILD ON LOG_OUTPUT_ON_FAILURE ON - TIMEOUT 600 - ) - - # Specify include dirs for gtest and gmock - ExternalProject_Get_Property(googletest source_dir) - set(GTEST_INCLUDE_DIR ${source_dir}/googletest/include) - set(GMOCK_INCLUDE_DIR ${source_dir}/googlemock/include) - # Create the directories. Prevents bug https://gitlab.kitware.com/cmake/cmake/issues/15052 - file(MAKE_DIRECTORY ${GTEST_INCLUDE_DIR} ${GMOCK_INCLUDE_DIR}) - - # Libraries - ExternalProject_Get_Property(googletest binary_dir) - set(_G_LIBRARY_PATH ${binary_dir}/lib/) - - # Use gmock_main instead of gtest_main because it initializes gtest as well. - # Note: The libraries are listed in reverse order of their dependencies. - foreach(lib gtest gtest_main gmock gmock_main) - add_library(${lib} IMPORTED STATIC GLOBAL) - set_target_properties(${lib} PROPERTIES - IMPORTED_LOCATION "${_G_LIBRARY_PATH}${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) - add_dependencies(${lib} googletest) - if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND - ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL 9) - target_compile_options(${lib} INTERFACE -Wno-deprecated-copy) - endif() - endforeach() - target_include_directories(gtest INTERFACE ${GTEST_INCLUDE_DIR}) - target_include_directories(gmock INTERFACE ${GMOCK_INCLUDE_DIR}) - - set_property(TARGET gtest PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}) - set_property(TARGET gtest_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}) - set_property(TARGET gmock PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX}) - set_property(TARGET gmock_main PROPERTY IMPORTED_LOCATION ${_G_LIBRARY_PATH}/${CMAKE_STATIC_LIBRARY_PREFIX}gmock_main${CMAKE_STATIC_LIBRARY_SUFFIX}) - + add_subdirectory(builtins/gtest) endif() # Starting from cmake 3.23, the GTest targets will have stable names. @@ -1647,52 +1384,10 @@ if(webgui) execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink $ENV{OPENUI5DIR} ${CMAKE_BINARY_DIR}/ui5/distribution) else() - if(builtin_openui5) - ExternalProject_Add( - OPENUI5 - URL ${CMAKE_SOURCE_DIR}/builtins/openui5/openui5.tar.gz - URL_HASH SHA256=b9e6495d8640302d9cf2fe3c99331311335aaab0f48794565ebd69ecc7449e58 - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - SOURCE_DIR ${CMAKE_BINARY_DIR}/ui5/distribution - TIMEOUT 600 - ) - else() - ExternalProject_Add( - OPENUI5 - URL https://github.com/SAP/openui5/releases/download/1.135.0/openui5-runtime-1.135.0.zip - URL_HASH SHA256=13acdb88a7f3f1d4afef6d1d500b53bccc4b593e7acf442721bb4e3da4e2690b - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - SOURCE_DIR ${CMAKE_BINARY_DIR}/ui5/distribution - TIMEOUT 600 - ) - endif() - install(DIRECTORY ${CMAKE_BINARY_DIR}/ui5/distribution/ DESTINATION ${CMAKE_INSTALL_OPENUI5DIR}/distribution/ COMPONENT libraries FILES_MATCHING PATTERN "*") - endif() - ExternalProject_Add( - RENDERCORE - URL ${CMAKE_SOURCE_DIR}/builtins/rendercore/RenderCore-1.9.tar.gz - URL_HASH SHA256=7728f00ee5e907c36b25aad56fbc73881c7c9faf47a36bee5efd2054bc4ecc6c - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - SOURCE_DIR ${CMAKE_BINARY_DIR}/ui5/eve7/rcore - TIMEOUT 600 - ) - ExternalProject_Add( - MATHJAX - URL ${CMAKE_SOURCE_DIR}/documentation/doxygen/mathjax.tar.gz - URL_HASH SHA256=c5e22e60430a65963a87ab4dcc8856b9be5bd434d3b3871f27ee65b584c3c3ea - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - SOURCE_DIR ${CMAKE_BINARY_DIR}/js/mathjax/ - TIMEOUT 600 - ) - install(DIRECTORY ${CMAKE_BINARY_DIR}/ui5/eve7/rcore/ DESTINATION ${CMAKE_INSTALL_OPENUI5DIR}/eve7/rcore/ COMPONENT libraries FILES_MATCHING PATTERN "*") + add_subdirectory(builtins/openui5) + endif() + add_subdirectory(builtins/rendercore) + add_subdirectory(builtins/mathjax) endif() #------------------------------------------------------------------------------------ From be12e35917fe2d91a56273da31e28f72ccf7afde Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Mon, 13 Apr 2026 16:32:40 +0200 Subject: [PATCH 03/10] [gsl] define proper CMake target [cmake] try define proper gsl builtin target canonical names by findgsl [gsl] fix install path --- builtins/gsl/CMakeLists.txt | 44 ++++++++++++++------- cmake/modules/SearchInstalledSoftware.cmake | 12 ++---- math/mathmore/CMakeLists.txt | 5 +-- math/mathmore/test/CMakeLists.txt | 2 +- roofit/roofitmore/CMakeLists.txt | 5 +-- 5 files changed, 37 insertions(+), 31 deletions(-) diff --git a/builtins/gsl/CMakeLists.txt b/builtins/gsl/CMakeLists.txt index 41fe35338cb38..8b5acb95096dd 100644 --- a/builtins/gsl/CMakeLists.txt +++ b/builtins/gsl/CMakeLists.txt @@ -1,21 +1,21 @@ -set(gsl_version 2.8) -message(STATUS "Downloading and building GSL version ${gsl_version}") -set(GSL_LIBRARIES ${GSL_LIBRARIES}) -foreach(l gsl gslcblas) - list(APPEND GSL_LIBRARIES ${CMAKE_BINARY_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}${l}${CMAKE_STATIC_LIBRARY_SUFFIX}) -endforeach() -set(GSL_CBLAS_LIBRARY ${CMAKE_BINARY_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gslcblas${CMAKE_STATIC_LIBRARY_SUFFIX}) +set(ROOT_GSL_VERSION 2.8) +message(STATUS "Downloading and building GSL version ${ROOT_GSL_VERSION}") +set(ROOT_GSL_PREFIX ${CMAKE_BINARY_DIR}/builtins/GSL-prefix) +set(ROOT_GSL_LIBRARY ${ROOT_GSL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gsl${CMAKE_STATIC_LIBRARY_SUFFIX}) +set(ROOT_GSL_CBLAS_LIBRARY ${ROOT_GSL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}gslcblas${CMAKE_STATIC_LIBRARY_SUFFIX}) +set(ROOT_GSL_LIBRARIES ${ROOT_GSL_LIBRARY} ${ROOT_GSL_CBLAS_LIBRARY}) if(CMAKE_OSX_SYSROOT) set(_gsl_cppflags "-isysroot ${CMAKE_OSX_SYSROOT}") set(_gsl_ldflags "-isysroot ${CMAKE_OSX_SYSROOT}") endif() ExternalProject_Add( - GSL - # http://mirror.switch.ch/ftp/mirror/gnu/gsl/gsl-${gsl_version}.tar.gz - URL ${lcgpackages}/gsl-${gsl_version}.tar.gz + BUILTIN_GSL + PREFIX ${ROOT_GSL_PREFIX} + # http://mirror.switch.ch/ftp/mirror/gnu/gsl/gsl-${ROOT_GSL_VERSION}.tar.gz + URL ${lcgpackages}/gsl-${ROOT_GSL_VERSION}.tar.gz URL_HASH SHA256=6a99eeed15632c6354895b1dd542ed5a855c0f15d9ad1326c6fe2b2c9e423190 SOURCE_DIR GSL-src # prevent "" vs GSL/ macOS warning - INSTALL_DIR ${CMAKE_BINARY_DIR} + INSTALL_DIR ${ROOT_GSL_PREFIX} CONFIGURE_COMMAND /configure --prefix --libdir=/lib --enable-shared=no --with-pic @@ -24,10 +24,26 @@ ExternalProject_Add( CPPFLAGS=${_gsl_cppflags} LDFLAGS=${_gsl_ldflags} LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 - BUILD_BYPRODUCTS ${GSL_LIBRARIES} + BUILD_BYPRODUCTS ${ROOT_GSL_LIBRARIES} TIMEOUT 600 ) -set(GSL_TARGET GSL PARENT_SCOPE) + # FIXME: one need to find better way to extract path with GSL include files -set(GSL_INCLUDE_DIR ${CMAKE_BINARY_DIR}/GSL-prefix/src/GSL-build PARENT_SCOPE) +set(ROOT_GSL_INCLUDE_DIR ${ROOT_GSL_PREFIX}/src/BUILTIN_GSL-build) + +file(MAKE_DIRECTORY ${ROOT_GSL_INCLUDE_DIR}) +add_library(GSL::gsl IMPORTED STATIC GLOBAL) +add_dependencies(GSL::gsl BUILTIN_GSL) +set_target_properties(GSL::gsl PROPERTIES + IMPORTED_LOCATION ${ROOT_GSL_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${ROOT_GSL_INCLUDE_DIR}) +add_library(GSL::gslcblas IMPORTED STATIC GLOBAL) +add_dependencies(GSL::gslcblas BUILTIN_GSL) +set_target_properties(GSL::gslcblas PROPERTIES + IMPORTED_LOCATION ${ROOT_GSL_CBLAS_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${ROOT_GSL_INCLUDE_DIR}) + +set(GSL_INCLUDE_DIRS ${ROOT_GSL_INCLUDE_DIR}) set(GSL_FOUND ON PARENT_SCOPE) +set(GSL_VERSION ${ROOT_GSL_VERSION} PARENT_SCOPE) +set(GSL_LIBRARIES ${ROOT_GSL_LIBRARIES} PARENT_SCOPE) diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake index 8de1e8174c8d7..94f9b4554e47a 100644 --- a/cmake/modules/SearchInstalledSoftware.cmake +++ b/cmake/modules/SearchInstalledSoftware.cmake @@ -417,6 +417,7 @@ if(mathmore OR builtin_gsl OR (tmva-cpu AND use_gsl_cblas)) endif() endif() else() + list(APPEND ROOT_BUILTINS BUILTIN_GSL) add_subdirectory(builtins/gsl) set(mathmore ON CACHE BOOL "Enabled because builtin_gsl requested (${mathmore_description})" FORCE) endif() @@ -623,6 +624,7 @@ if(fftw3) endif() endif() if(builtin_fftw3) + list(APPEND ROOT_BUILTINS BUILTIN_FFTW3) add_subdirectory(builtins/fftw3) set(fftw3 ON CACHE BOOL "Enabled because builtin_fftw3 requested (${fftw3_description})" FORCE) endif() @@ -1113,14 +1115,8 @@ if(tmva) add_library(ROOT::BLAS ALIAS Blas) if(use_gsl_cblas) message(STATUS "Using GSL CBLAS for optional parts of TMVA") - if(builtin_gsl) - add_dependencies(Blas GSL) - target_include_directories(Blas INTERFACE ${GSL_INCLUDE_DIR}) - target_link_libraries(Blas INTERFACE ${GSL_CBLAS_LIBRARY}) - else() - if(GSL_FOUND) - target_link_libraries(Blas INTERFACE GSL::gslcblas) - endif() + if(GSL_FOUND) + target_link_libraries(Blas INTERFACE GSL::gslcblas) endif() target_compile_definitions(Blas INTERFACE -DR__USE_CBLAS) else() diff --git a/math/mathmore/CMakeLists.txt b/math/mathmore/CMakeLists.txt index 4356e02e6f091..d33bde74ffe96 100644 --- a/math/mathmore/CMakeLists.txt +++ b/math/mathmore/CMakeLists.txt @@ -79,11 +79,8 @@ SOURCES Math/LinkDef.h DEPENDENCIES MathCore - BUILTINS - GSL ) -target_include_directories(MathMore SYSTEM PRIVATE ${GSL_INCLUDE_DIR}) -target_link_libraries(MathMore PRIVATE ${GSL_LIBRARIES}) +target_link_libraries(MathMore PRIVATE GSL::gsl GSL::gslcblas) ROOT_ADD_TEST_SUBDIRECTORY(test) diff --git a/math/mathmore/test/CMakeLists.txt b/math/mathmore/test/CMakeLists.txt index e4409aeb7f146..5360074515ab5 100644 --- a/math/mathmore/test/CMakeLists.txt +++ b/math/mathmore/test/CMakeLists.txt @@ -45,7 +45,7 @@ add_definitions(-DHAVE_ROOTLIBS) #---Build and add all the defined test in the list--------------- foreach(file ${TestMathMoreSource}) get_filename_component(testname ${file} NAME_WE) - ROOT_EXECUTABLE(${testname} ${file} LIBRARIES ${GSL_LIBRARIES} ${Libraries}) + ROOT_EXECUTABLE(${testname} ${file} LIBRARIES GSL::gsl GSL::gslcblas ${Libraries}) ROOT_ADD_TEST(mathmore-${testname} COMMAND ${testname} LABELS ${${testname}_LABELS}) endforeach() diff --git a/roofit/roofitmore/CMakeLists.txt b/roofit/roofitmore/CMakeLists.txt index 561d55382309f..1130797b255b0 100644 --- a/roofit/roofitmore/CMakeLists.txt +++ b/roofit/roofitmore/CMakeLists.txt @@ -50,13 +50,10 @@ ROOT_STANDARD_LIBRARY_PACKAGE(RooFitMore RIO MathCore Foam - BUILTINS - GSL ${EXTRA_DICT_OPTS} ) -target_include_directories(RooFitMore SYSTEM PRIVATE ${GSL_INCLUDE_DIR}) -target_link_libraries(RooFitMore PRIVATE ${GSL_LIBRARIES}) +target_link_libraries(RooFitMore PRIVATE GSL::gsl GSL::gslcblas) # For recent clang, this can facilitate auto-vectorisation. # In RooFit, the errno side effect is not needed, anyway: From 78a55ce49a79d624785ad5906f10b27178cb9445 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Tue, 14 Apr 2026 01:07:17 +0200 Subject: [PATCH 04/10] [fftw3] use proper CMake target --- builtins/fftw3/CMakeLists.txt | 31 ++- cmake/modules/FindFFTW.cmake | 463 ++++++++++++++++++++++++++++--- math/fftw/CMakeLists.txt | 7 +- roofit/roofitcore/CMakeLists.txt | 1 + 4 files changed, 442 insertions(+), 60 deletions(-) diff --git a/builtins/fftw3/CMakeLists.txt b/builtins/fftw3/CMakeLists.txt index cd2fad20baba8..3f6f18abafa7e 100644 --- a/builtins/fftw3/CMakeLists.txt +++ b/builtins/fftw3/CMakeLists.txt @@ -1,17 +1,30 @@ -set(FFTW_VERSION 3.3.10) -message(STATUS "Downloading and building FFTW version ${FFTW_VERSION}") -set(FFTW_LIBRARIES ${CMAKE_BINARY_DIR}/lib/libfftw3.a) +set(ROOT_FFTW_VERSION 3.3.10) +message(STATUS "Downloading and building FFTW version ${ROOT_FFTW_VERSION}") +set(ROOT_FFTW_PREFIX ${CMAKE_BINARY_DIR}/builtins/FFTW3-prefix) +set(ROOT_FFTW_LIBRARY ${ROOT_FFTW_PREFIX}/lib/libfftw3.a) ExternalProject_Add( - FFTW3 - URL ${lcgpackages}/fftw-${FFTW_VERSION}.tar.gz + BUILTIN_FFTW3 + PREFIX ${ROOT_FFTW_PREFIX} + URL ${lcgpackages}/fftw-${ROOT_FFTW_VERSION}.tar.gz URL_HASH SHA256=56c932549852cddcfafdab3820b0200c7742675be92179e59e6215b340e26467 - INSTALL_DIR ${CMAKE_BINARY_DIR} CONFIGURE_COMMAND ./configure --prefix= BUILD_COMMAND make CFLAGS=-fPIC LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 BUILD_IN_SOURCE 1 - BUILD_BYPRODUCTS ${FFTW_LIBRARIES} + BUILD_BYPRODUCTS ${ROOT_FFTW_LIBRARY} TIMEOUT 600 ) -set(FFTW_INCLUDE_DIR ${CMAKE_BINARY_DIR}/include PARENT_SCOPE) -set(FFTW3_TARGET FFTW3 PARENT_SCOPE) + +set(ROOT_FFTW_INCLUDE_DIR ${ROOT_FFTW_PREFIX}/include) + +file(MAKE_DIRECTORY ${ROOT_FFTW_INCLUDE_DIR}) +add_library(FFTW::Double IMPORTED STATIC GLOBAL) +add_dependencies(FFTW::Double BUILTIN_FFTW3) +set_target_properties(FFTW::Double PROPERTIES + IMPORTED_LOCATION ${ROOT_FFTW_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${ROOT_FFTW_INCLUDE_DIR}) + +set(FFTW_INCLUDE_DIRS ${ROOT_FFTW_INCLUDE_DIR} PARENT_SCOPE) +set(FFTW_FOUND ON PARENT_SCOPE) +set(FFTW_VERSION ${ROOT_FFTW_VERSION} PARENT_SCOPE) +set(FFTW_LIBRARIES ${ROOT_FFTW_LIBRARY} PARENT_SCOPE) diff --git a/cmake/modules/FindFFTW.cmake b/cmake/modules/FindFFTW.cmake index 343d27b89fb7c..7b2788c3fcc23 100644 --- a/cmake/modules/FindFFTW.cmake +++ b/cmake/modules/FindFFTW.cmake @@ -1,48 +1,419 @@ -# Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. -# All rights reserved. +# - Find the FFTW library +# https://github.com/egpbos/findFFTW/ +# Original version of this file: +# Copyright (c) 2015, Wenzel Jakob +# https://github.com/wjakob/layerlab/blob/master/cmake/FindFFTW.cmake, commit 4d58bfdc28891b4f9373dfe46239dda5a0b561c6 +# Modifications: +# Copyright (c) 2017, Patrick Bos # -# For the licensing terms see $ROOTSYS/LICENSE. -# For the list of contributors see $ROOTSYS/README/CREDITS. - -# Find the FFTW includes and library. +# Usage: +# find_package(FFTW [REQUIRED] [QUIET] [COMPONENTS component1 ... componentX] ) +# +# It sets the following variables: +# FFTW_FOUND ... true if fftw is found on the system +# FFTW_[component]_LIB_FOUND ... true if the component is found on the system (see components below) +# FFTW_LIBRARIES ... full paths to all found fftw libraries +# FFTW_[component]_LIB ... full path to one of the components (see below) +# FFTW_INCLUDE_DIRS ... fftw include directory paths +# +# The following variables will be checked by the function +# FFTW_USE_STATIC_LIBS ... if true, only static libraries are found, otherwise both static and shared. +# FFTW_ROOT ... if set, the libraries are exclusively searched +# under this path # -# This module defines -# FFTW_INCLUDE_DIR, where to locate fftw3.h file -# FFTW_LIBRARIES, the libraries to link against to use fftw3 -# FFTW_FOUND. If false, you cannot build anything that requires fftw3. -# FFTW_LIBRARY, where to find the libfftw3 library. - -set(FFTW_FOUND 0) -if(FFTW_LIBRARY AND FFTW_INCLUDE_DIR) - set(FFTW_FIND_QUIETLY TRUE) -endif() - -find_path(FFTW_INCLUDE_DIR fftw3.h - $ENV{FFTW_DIR}/include - $ENV{FFTW3} $ENV{FFTW3}/include $ENV{FFTW3}/api - /usr/local/include - /usr/include - /opt/fftw3/include - DOC "Specify the directory containing fftw3.h" -) - -find_library(FFTW_LIBRARY NAMES fftw3 fftw3-3 PATHS - $ENV{FFTW_DIR}/lib - $ENV{FFTW3} $ENV{FFTW3}/lib $ENV{FFTW3}/.libs - /usr/local/lib - /usr/lib - /opt/fftw3/lib - DOC "Specify the fttw3 library here." -) - -if(FFTW_INCLUDE_DIR AND FFTW_LIBRARY) - set(FFTW_FOUND 1 ) - if(NOT FFTW_FIND_QUIETLY) - message(STATUS "Found fftw3 includes at ${FFTW_INCLUDE_DIR}") - message(STATUS "Found fftw3 library at ${FFTW_LIBRARY}") - endif() -endif() - -set(FFTW_LIBRARIES ${FFTW_LIBRARY}) - -mark_as_advanced(FFTW_FOUND FFTW_LIBRARY FFTW_INCLUDE_DIR) +# This package supports the following components: +# FLOAT_LIB +# DOUBLE_LIB +# LONGDOUBLE_LIB +# FLOAT_THREADS_LIB +# DOUBLE_THREADS_LIB +# LONGDOUBLE_THREADS_LIB +# FLOAT_OPENMP_LIB +# DOUBLE_OPENMP_LIB +# LONGDOUBLE_OPENMP_LIB +# + +# TODO (maybe): extend with ExternalProject download + build option +# TODO: put on conda-forge + + +if( NOT FFTW_ROOT AND DEFINED ENV{FFTWDIR} ) + set( FFTW_ROOT $ENV{FFTWDIR} ) +endif() + +# Check if we can use PkgConfig +find_package(PkgConfig) + +#Determine from PKG +if( PKG_CONFIG_FOUND AND NOT FFTW_ROOT ) + pkg_check_modules( PKG_FFTW QUIET "fftw3" ) +endif() + +#Check whether to search static or dynamic libs +set( CMAKE_FIND_LIBRARY_SUFFIXES_SAV ${CMAKE_FIND_LIBRARY_SUFFIXES} ) + +if( ${FFTW_USE_STATIC_LIBS} ) + set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} ) +else() + set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV} ) +endif() + +if( FFTW_ROOT ) + # find libs + + find_library( + FFTW_DOUBLE_LIB + NAMES "fftw3" libfftw3-3 + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_DOUBLE_THREADS_LIB + NAMES "fftw3_threads" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_DOUBLE_OPENMP_LIB + NAMES "fftw3_omp" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_DOUBLE_MPI_LIB + NAMES "fftw3_mpi" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_FLOAT_LIB + NAMES "fftw3f" libfftw3f-3 + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_FLOAT_THREADS_LIB + NAMES "fftw3f_threads" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_FLOAT_OPENMP_LIB + NAMES "fftw3f_omp" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_FLOAT_MPI_LIB + NAMES "fftw3f_mpi" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_LONGDOUBLE_LIB + NAMES "fftw3l" libfftw3l-3 + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_LONGDOUBLE_THREADS_LIB + NAMES "fftw3l_threads" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_LONGDOUBLE_OPENMP_LIB + NAMES "fftw3l_omp" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + find_library( + FFTW_LONGDOUBLE_MPI_LIB + NAMES "fftw3l_mpi" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "lib" "lib64" + NO_DEFAULT_PATH + ) + + #find includes + find_path(FFTW_INCLUDE_DIRS + NAMES "fftw3.h" + PATHS ${FFTW_ROOT} + PATH_SUFFIXES "include" + NO_DEFAULT_PATH + ) + +else() + + find_library( + FFTW_DOUBLE_LIB + NAMES "fftw3" libfftw3-3 + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library( + FFTW_DOUBLE_THREADS_LIB + NAMES "fftw3_threads" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library( + FFTW_DOUBLE_OPENMP_LIB + NAMES "fftw3_omp" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library( + FFTW_DOUBLE_MPI_LIB + NAMES "fftw3_mpi" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library( + FFTW_FLOAT_LIB + NAMES "fftw3f" libfftw3f-3 + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library( + FFTW_FLOAT_THREADS_LIB + NAMES "fftw3f_threads" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library( + FFTW_FLOAT_OPENMP_LIB + NAMES "fftw3f_omp" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library( + FFTW_FLOAT_MPI_LIB + NAMES "fftw3f_mpi" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library( + FFTW_LONGDOUBLE_LIB + NAMES "fftw3l" libfftw3l-3 + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library( + FFTW_LONGDOUBLE_THREADS_LIB + NAMES "fftw3l_threads" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library(FFTW_LONGDOUBLE_OPENMP_LIB + NAMES "fftw3l_omp" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_library(FFTW_LONGDOUBLE_MPI_LIB + NAMES "fftw3l_mpi" + PATHS ${PKG_FFTW_LIBRARY_DIRS} ${LIB_INSTALL_DIR} + ) + + find_path(FFTW_INCLUDE_DIRS + NAMES "fftw3.h" + PATHS ${PKG_FFTW_INCLUDE_DIRS} ${INCLUDE_INSTALL_DIR} + ) + +endif( FFTW_ROOT ) + +#--------------------------------------- components + +if (FFTW_DOUBLE_LIB) + set(FFTW_DOUBLE_LIB_FOUND TRUE) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_DOUBLE_LIB}) + add_library(FFTW::Double INTERFACE IMPORTED) + set_target_properties(FFTW::Double + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_DOUBLE_LIB}" + ) +else() + set(FFTW_DOUBLE_LIB_FOUND FALSE) +endif() + +if (FFTW_FLOAT_LIB) + set(FFTW_FLOAT_LIB_FOUND TRUE) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_FLOAT_LIB}) + add_library(FFTW::Float INTERFACE IMPORTED) + set_target_properties(FFTW::Float + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_FLOAT_LIB}" + ) +else() + set(FFTW_FLOAT_LIB_FOUND FALSE) +endif() + +if (FFTW_LONGDOUBLE_LIB) + set(FFTW_LONGDOUBLE_LIB_FOUND TRUE) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_LONGDOUBLE_LIB}) + add_library(FFTW::LongDouble INTERFACE IMPORTED) + set_target_properties(FFTW::LongDouble + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_LONGDOUBLE_LIB}" + ) +else() + set(FFTW_LONGDOUBLE_LIB_FOUND FALSE) +endif() + +if (FFTW_DOUBLE_THREADS_LIB) + set(FFTW_DOUBLE_THREADS_LIB_FOUND TRUE) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_DOUBLE_THREADS_LIB}) + add_library(FFTW::DoubleThreads INTERFACE IMPORTED) + set_target_properties(FFTW::DoubleThreads + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_DOUBLE_THREADS_LIB}" + ) +else() + set(FFTW_DOUBLE_THREADS_LIB_FOUND FALSE) +endif() + +if (FFTW_FLOAT_THREADS_LIB) + set(FFTW_FLOAT_THREADS_LIB_FOUND TRUE) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_FLOAT_THREADS_LIB}) + add_library(FFTW::FloatThreads INTERFACE IMPORTED) + set_target_properties(FFTW::FloatThreads + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_FLOAT_THREADS_LIB}" + ) +else() + set(FFTW_FLOAT_THREADS_LIB_FOUND FALSE) +endif() + +if (FFTW_LONGDOUBLE_THREADS_LIB) + set(FFTW_LONGDOUBLE_THREADS_LIB_FOUND TRUE) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_LONGDOUBLE_THREADS_LIB}) + add_library(FFTW::LongDoubleThreads INTERFACE IMPORTED) + set_target_properties(FFTW::LongDoubleThreads + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_LONGDOUBLE_THREADS_LIB}" + ) +else() + set(FFTW_LONGDOUBLE_THREADS_LIB_FOUND FALSE) +endif() + +if (FFTW_DOUBLE_OPENMP_LIB) + set(FFTW_DOUBLE_OPENMP_LIB_FOUND TRUE) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_DOUBLE_OPENMP_LIB}) + add_library(FFTW::DoubleOpenMP INTERFACE IMPORTED) + set_target_properties(FFTW::DoubleOpenMP + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_DOUBLE_OPENMP_LIB}" + ) +else() + set(FFTW_DOUBLE_OPENMP_LIB_FOUND FALSE) +endif() + +if (FFTW_FLOAT_OPENMP_LIB) + set(FFTW_FLOAT_OPENMP_LIB_FOUND TRUE) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_FLOAT_OPENMP_LIB}) + add_library(FFTW::FloatOpenMP INTERFACE IMPORTED) + set_target_properties(FFTW::FloatOpenMP + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_FLOAT_OPENMP_LIB}" + ) +else() + set(FFTW_FLOAT_OPENMP_LIB_FOUND FALSE) +endif() + +if (FFTW_LONGDOUBLE_OPENMP_LIB) + set(FFTW_LONGDOUBLE_OPENMP_LIB_FOUND TRUE) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_LONGDOUBLE_OPENMP_LIB}) + add_library(FFTW::LongDoubleOpenMP INTERFACE IMPORTED) + set_target_properties(FFTW::LongDoubleOpenMP + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_LONGDOUBLE_OPENMP_LIB}" + ) +else() + set(FFTW_LONGDOUBLE_OPENMP_LIB_FOUND FALSE) +endif() + +if (FFTW_DOUBLE_MPI_LIB) + set(FFTW_DOUBLE_MPI_LIB_FOUND TRUE) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_DOUBLE_MPI_LIB}) + add_library(FFTW::DoubleMPI INTERFACE IMPORTED) + set_target_properties(FFTW::DoubleMPI + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_DOUBLE_MPI_LIB}" + ) +else() + set(FFTW_DOUBLE_MPI_LIB_FOUND FALSE) +endif() + +if (FFTW_FLOAT_MPI_LIB) + set(FFTW_FLOAT_MPI_LIB_FOUND TRUE) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_FLOAT_MPI_LIB}) + add_library(FFTW::FloatMPI INTERFACE IMPORTED) + set_target_properties(FFTW::FloatMPI + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_FLOAT_MPI_LIB}" + ) +else() + set(FFTW_FLOAT_MPI_LIB_FOUND FALSE) +endif() + +if (FFTW_LONGDOUBLE_MPI_LIB) + set(FFTW_LONGDOUBLE_MPI_LIB_FOUND TRUE) + set(FFTW_LIBRARIES ${FFTW_LIBRARIES} ${FFTW_LONGDOUBLE_MPI_LIB}) + add_library(FFTW::LongDoubleMPI INTERFACE IMPORTED) + set_target_properties(FFTW::LongDoubleMPI + PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${FFTW_LONGDOUBLE_MPI_LIB}" + ) +else() + set(FFTW_LONGDOUBLE_MPI_LIB_FOUND FALSE) +endif() + +#--------------------------------------- end components + +set( CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_SAV} ) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args(FFTW + REQUIRED_VARS FFTW_INCLUDE_DIRS + HANDLE_COMPONENTS + ) + +mark_as_advanced( + FFTW_INCLUDE_DIRS + FFTW_LIBRARIES + FFTW_FLOAT_LIB + FFTW_DOUBLE_LIB + FFTW_LONGDOUBLE_LIB + FFTW_FLOAT_THREADS_LIB + FFTW_DOUBLE_THREADS_LIB + FFTW_LONGDOUBLE_THREADS_LIB + FFTW_FLOAT_OPENMP_LIB + FFTW_DOUBLE_OPENMP_LIB + FFTW_LONGDOUBLE_OPENMP_LIB + FFTW_FLOAT_MPI_LIB + FFTW_DOUBLE_MPI_LIB + FFTW_LONGDOUBLE_MPI_LIB + ) diff --git a/math/fftw/CMakeLists.txt b/math/fftw/CMakeLists.txt index 0c8d8e936e0c3..2bdb5629f4fad 100644 --- a/math/fftw/CMakeLists.txt +++ b/math/fftw/CMakeLists.txt @@ -20,12 +20,9 @@ ROOT_STANDARD_LIBRARY_PACKAGE(FFTW src/TFFTComplexReal.cxx src/TFFTReal.cxx src/TFFTRealComplex.cxx + LIBRARIES + FFTW::Double DEPENDENCIES Core MathCore - BUILTINS - FFTW3 ) - -target_include_directories(FFTW PRIVATE ${FFTW_INCLUDE_DIR}) -target_link_libraries(FFTW PRIVATE ${FFTW_LIBRARIES}) diff --git a/roofit/roofitcore/CMakeLists.txt b/roofit/roofitcore/CMakeLists.txt index a638e0267b2d0..48fee5a1d4918 100644 --- a/roofit/roofitcore/CMakeLists.txt +++ b/roofit/roofitcore/CMakeLists.txt @@ -491,6 +491,7 @@ endif() if(fftw3) target_compile_definitions(RooFitCore PUBLIC ROOFIT_MATH_FFTW3) + target_link_libraries(RooFitCore PRIVATE FFTW::Double) endif() target_include_directories(RooFitCore PUBLIC $) From a28b8f1105253c7f55200361c479948f260a13f0 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Tue, 14 Apr 2026 10:15:50 +0200 Subject: [PATCH 05/10] [tbb] use proper CMake target --- builtins/tbb/CMakeLists.txt | 47 ++- cmake/modules/FindTBB.cmake | 396 +++++--------------- cmake/modules/SearchInstalledSoftware.cmake | 1 + core/imt/CMakeLists.txt | 11 +- core/imt/test/CMakeLists.txt | 9 +- core/thread/CMakeLists.txt | 8 +- core/thread/test/CMakeLists.txt | 6 +- roottest/root/multicore/CMakeLists.txt | 3 +- tmva/tmva/CMakeLists.txt | 5 +- 9 files changed, 146 insertions(+), 340 deletions(-) diff --git a/builtins/tbb/CMakeLists.txt b/builtins/tbb/CMakeLists.txt index 4c916f37feca6..7262538a829f7 100644 --- a/builtins/tbb/CMakeLists.txt +++ b/builtins/tbb/CMakeLists.txt @@ -1,5 +1,5 @@ -set(tbb_url ${lcgpackages}/oneTBB-2021.9.0.tar.gz) -set(tbb_sha256 1ce48f34dada7837f510735ff1172f6e2c261b09460e3bf773b49791d247d24e) +set(ROOT_TBB_URL ${lcgpackages}/oneTBB-2021.9.0.tar.gz) +set(ROOT_TBB_HASH 1ce48f34dada7837f510735ff1172f6e2c261b09460e3bf773b49791d247d24e) if(MSVC) if(CMAKE_GENERATOR MATCHES Ninja) @@ -13,15 +13,14 @@ if(MSVC) set(tbbsuffix "_debug") endif() endif() - set(TBB_LIBRARIES ${CMAKE_BINARY_DIR}/lib/tbb12${tbbsuffix}.lib) - set(TBB_CXXFLAGS "-D__TBB_NO_IMPLICIT_LINKAGE=1") + set(ROOT_TBB_LIBRARY ${CMAKE_BINARY_DIR}/lib/tbb12${tbbsuffix}.lib) install(DIRECTORY ${CMAKE_BINARY_DIR}/bin/ DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT libraries FILES_MATCHING PATTERN "tbb*.dll") install(DIRECTORY ${CMAKE_BINARY_DIR}/lib/ DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries FILES_MATCHING PATTERN "tbb*.lib") else() if (CMAKE_BUILD_TYPE STREQUAL "Debug") set(tbbsuffix "_debug") endif() - set(TBB_LIBRARIES ${CMAKE_BINARY_DIR}/lib/libtbb${tbbsuffix}${CMAKE_SHARED_LIBRARY_SUFFIX}) + set(ROOT_TBB_LIBRARY ${CMAKE_BINARY_DIR}/lib/libtbb${tbbsuffix}${CMAKE_SHARED_LIBRARY_SUFFIX}) install(DIRECTORY ${CMAKE_BINARY_DIR}/lib/ DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries FILES_MATCHING PATTERN "libtbb*") endif() if(tbb_build) @@ -29,9 +28,9 @@ if(tbb_build) endif() ExternalProject_Add( - TBB - URL ${tbb_url} - URL_HASH SHA256=${tbb_sha256} + BUILTIN_TBB + URL ${ROOT_TBB_URL} + URL_HASH SHA256=${ROOT_TBB_HASH} INSTALL_DIR ${CMAKE_BINARY_DIR} CMAKE_ARGS -G ${CMAKE_GENERATOR} -DCMAKE_POLICY_VERSION_MINIMUM=3.5 @@ -41,6 +40,7 @@ ExternalProject_Add( -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS} -DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_BINARY_DIR}/include + -DCMAKE_INSTALL_BINDIR=${CMAKE_BINARY_DIR}/bin -DCMAKE_INSTALL_LIBDIR=${CMAKE_BINARY_DIR}/lib -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR} -DTBBMALLOC_BUILD=OFF @@ -51,18 +51,31 @@ ExternalProject_Add( BUILD_COMMAND ${CMAKE_COMMAND} --build . ${TBB_EXTRA_BUILD_ARGS} INSTALL_COMMAND ${CMAKE_COMMAND} --install . ${TBB_EXTRA_BUILD_ARGS} LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1 LOG_OUTPUT_ON_FAILURE 1 - BUILD_BYPRODUCTS ${TBB_LIBRARIES} + BUILD_BYPRODUCTS ${ROOT_TBB_LIBRARY} TIMEOUT 600 ) +set(ROOT_TBB_INCLUDE_DIR ${CMAKE_BINARY_DIR}/ginclude) + ExternalProject_Add_Step( - TBB tbb2externals - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/tbb ${CMAKE_BINARY_DIR}/ginclude/tbb - COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/oneapi ${CMAKE_BINARY_DIR}/ginclude/oneapi + BUILTIN_TBB tbb2externals + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/tbb ${ROOT_TBB_INCLUDE_DIR}/tbb + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/include/oneapi ${ROOT_TBB_INCLUDE_DIR}/oneapi DEPENDEES install ) -set(TBB_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/ginclude PARENT_SCOPE) -set(TBB_CXXFLAGS "-DTBB_SUPPRESS_DEPRECATED_MESSAGES=1" PARENT_SCOPE) -# The following line is needed to generate the proper dependency with: BUILTINS TBB (in Imt) -# and generated with this syntax: add_dependencies(${library} ${${arg1}_TARGET}) -set(TBB_TARGET TBB PARENT_SCOPE) \ No newline at end of file + +file(MAKE_DIRECTORY ${ROOT_TBB_INCLUDE_DIR}) +add_library(TBB::tbb IMPORTED STATIC GLOBAL) +add_dependencies(TBB::tbb BUILTIN_TBB) +set_target_properties(TBB::tbb PROPERTIES + IMPORTED_LOCATION ${ROOT_TBB_LIBRARY} + INTERFACE_INCLUDE_DIRECTORIES ${ROOT_TBB_INCLUDE_DIR}) +target_compile_definitions(TBB::tbb INTERFACE TBB_SUPPRESS_DEPRECATED_MESSAGES=1) +if(MSVC) + target_compile_definitions(TBB::tbb INTERFACE __TBB_NO_IMPLICIT_LINKAGE=1) +endif() + +set(TBB_FOUND ON PARENT_SCOPE) +set(TBB_VERSION ${ROOT_TBB_VERSION} PARENT_SCOPE) +set(TBB_INCLUDE_DIRS ${ROOT_TBB_INCLUDE_DIR} PARENT_SCOPE) +set(TBB_LIBRARIES ${ROOT_TBB_LIBRARY} PARENT_SCOPE) diff --git a/cmake/modules/FindTBB.cmake b/cmake/modules/FindTBB.cmake index b4858d7c96a0f..bda28e5a876cf 100644 --- a/cmake/modules/FindTBB.cmake +++ b/cmake/modules/FindTBB.cmake @@ -1,300 +1,106 @@ -# Module for locating Intel's Threading Building Blocks (TBB). +##===-- CMakeLists.txt ----------------------------------------------------===## # -# Customizable variables: -# TBB_ROOT_DIR -# Specifies TBB's root directory. +# Copyright (C) Intel Corporation # -# Read-only variables: -# TBB_FOUND -# Indicates whether the library has been found. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # -# TBB_INCLUDE_DIRS -# Specifies TBB's include directory. +# This file incorporates work covered by the following copyright and permission +# notice: # -# TBB_LIBRARIES -# Specifies TBB libraries that should be passed to target_link_libararies. +# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. # -# TBB__LIBRARIES -# Specifies the libraries of a specific . -# -# TBB__FOUND -# Indicates whether the specified was found. -# -# -# Copyright (c) 2012 Sergiu Dotenco -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTTBBLAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -INCLUDE (FindPackageHandleStandardArgs) - -IF (CMAKE_VERSION VERSION_GREATER 2.8.7) - SET (_TBB_CHECK_COMPONENTS FALSE) -ELSE (CMAKE_VERSION VERSION_GREATER 2.8.7) - SET (_TBB_CHECK_COMPONENTS TRUE) -ENDIF (CMAKE_VERSION VERSION_GREATER 2.8.7) - -FIND_PATH (TBB_ROOT_DIR - NAMES include/tbb/tbb.h - PATHS ENV TBB - ENV TBBROOT - ENV TBB_ROOT - ENV TBB40_INSTALL_DIR - ENV TBB30_INSTALL_DIR - ENV TBB22_INSTALL_DIR - ENV TBB21_INSTALL_DIR - DOC "TBB root directory") - -FIND_PATH (TBB_INCLUDE_DIR - NAMES tbb/tbb.h - HINTS ${TBB_ROOT_DIR} - PATH_SUFFIXES include - DOC "TBB include directory") - -IF (MSVC15) - SET (_TBB_COMPILER vc14) -ELSEIF (MSVC14) - SET (_TBB_COMPILER vc14) -ELSEIF (MSVC12) - SET (_TBB_COMPILER vc12) -ELSEIF (MSVC11) - SET (_TBB_COMPILER vc11) -ELSEIF (MSVC10) - SET (_TBB_COMPILER vc10) -ELSEIF (MSVC90) - SET (_TBB_COMPILER vc9) -ELSEIF (MSVC80) - SET (_TBB_COMPILER vc8) -ELSEIF (WIN32) - SET (_TBB_COMPILER vc_mt) -ENDIF (MSVC15) - -IF (CMAKE_SIZEOF_VOID_P EQUAL 8) - SET (_TBB_POSSIBLE_LIB_SUFFIXES lib/intel64/${_TBB_COMPILER}) - SET (_TBB_POSSIBLE_BIN_SUFFIXES bin/intel64/${_TBB_COMPILER}) -ELSE (CMAKE_SIZEOF_VOID_P EQUAL 8) - SET (_TBB_POSSIBLE_LIB_SUFFIXES lib/ia32/${_TBB_COMPILER}) - SET (_TBB_POSSIBLE_BIN_SUFFIXES bin/ia32/${_TBB_COMPILER}) -ENDIF (CMAKE_SIZEOF_VOID_P EQUAL 8) - -LIST (APPEND _TBB_POSSIBLE_LIB_SUFFIXES lib/$ENV{TBB_ARCH_PLATFORM}) - -FIND_LIBRARY (TBB_LIBRARY_RELEASE - NAMES tbb - HINTS ${TBB_ROOT_DIR} - PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES} - DOC "TBB release library") - -FIND_LIBRARY (TBB_LIBRARY_DEBUG - NAMES tbb_debug - HINTS ${TBB_ROOT_DIR} - PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES} - DOC "TBB debug library") - -IF (TBB_LIBRARY_RELEASE AND TBB_LIBRARY_DEBUG) - IF (NOT TBB_LIBRARY) - SET (TBB_LIBRARY optimized ${TBB_LIBRARY_RELEASE} debug ${TBB_LIBRARY_DEBUG} - CACHE STRING "TBB library" FORCE) - ENDIF (NOT TBB_LIBRARY) -ELSEIF (TBB_LIBRARY_RELEASE) - IF (NOT TBB_LIBRARY) - SET (TBB_LIBRARY ${TBB_LIBRARY_RELEASE} CACHE STRING "TBB library" FORCE) - ENDIF (NOT TBB_LIBRARY) -ENDIF (TBB_LIBRARY_RELEASE AND TBB_LIBRARY_DEBUG) - -IF (TBB_LIBRARY_DEBUG) - LIST (APPEND _TBB_ALL_LIBS ${TBB_LIBRARY_DEBUG}) -ENDIF (TBB_LIBRARY_DEBUG) - -IF (TBB_LIBRARY_RELEASE) - LIST (APPEND _TBB_ALL_LIBS ${TBB_LIBRARY_RELEASE}) -ENDIF (TBB_LIBRARY_RELEASE) - -FOREACH (_TBB_COMPONENT ${TBB_FIND_COMPONENTS}) - STRING (TOUPPER ${_TBB_COMPONENT} _TBB_COMPONENT_UPPER) - SET (_TBB_LIBRARY_BASE TBB_${_TBB_COMPONENT_UPPER}_LIBRARY) - - IF (${_TBB_COMPONENT} STREQUAL preview) - SET (_TBB_LIBRARY_NAME tbb_${_TBB_COMPONENT}) - ELSE (${_TBB_COMPONENT} STREQUAL preview) - SET (_TBB_LIBRARY_NAME tbb${_TBB_COMPONENT}) - ENDIF (${_TBB_COMPONENT} STREQUAL preview) - - FIND_LIBRARY (${_TBB_LIBRARY_BASE}_RELEASE - NAMES ${_TBB_LIBRARY_NAME} - HINTS ${TBB_ROOT_DIR} - PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES} - DOC "TBB ${_TBB_COMPONENT} release library") - - FIND_LIBRARY (${_TBB_LIBRARY_BASE}_DEBUG - NAMES ${_TBB_LIBRARY_NAME}_debug - HINTS ${TBB_ROOT_DIR} - PATH_SUFFIXES ${_TBB_POSSIBLE_LIB_SUFFIXES} - DOC "TBB ${_TBB_COMPONENT} debug library") - - MARK_AS_ADVANCED (${_TBB_LIBRARY_BASE} ${_TBB_LIBRARY_BASE}_DEBUG) - - SET (TBB_${_TBB_COMPONENT_UPPER}_FOUND TRUE) - - IF (${_TBB_LIBRARY_BASE}_DEBUG AND ${_TBB_LIBRARY_BASE}_RELEASE) - SET (${_TBB_LIBRARY_BASE} - debug ${${_TBB_LIBRARY_BASE}_DEBUG} - optimized ${${_TBB_LIBRARY_BASE}_RELEASE} CACHE STRING - "TBB ${_TBB_COMPONENT} library") - ELSEIF (${_TBB_LIBRARY_BASE}_DEBUG) - SET (${_TBB_LIBRARY_BASE} ${${_TBB_LIBRARY_BASE}_DEBUG}) - ELSEIF (${_TBB_LIBRARY_BASE}_RELEASE) - SET (${_TBB_LIBRARY_BASE} ${${_TBB_LIBRARY_BASE}_RELEASE} - CACHE STRING "TBB ${_TBB_COMPONENT} library") - ELSE (${_TBB_LIBRARY_BASE}_DEBUG AND ${_TBB_LIBRARY_BASE}_RELEASE) - # Component missing: record it for a later report - LIST (APPEND _TBB_MISSING_COMPONENTS ${_TBB_COMPONENT}) - SET (TBB_${_TBB_COMPONENT_UPPER}_FOUND FALSE) - ENDIF (${_TBB_LIBRARY_BASE}_DEBUG AND ${_TBB_LIBRARY_BASE}_RELEASE) - - IF (${_TBB_LIBRARY_BASE}_DEBUG) - LIST (APPEND _TBB_ALL_LIBS ${${_TBB_LIBRARY_BASE}_DEBUG}) - ENDIF (${_TBB_LIBRARY_BASE}_DEBUG) - - IF (${_TBB_LIBRARY_BASE}_RELEASE) - LIST (APPEND _TBB_ALL_LIBS ${${_TBB_LIBRARY_BASE}_RELEASE}) - ENDIF (${_TBB_LIBRARY_BASE}_RELEASE) - - SET (TBB_${_TBB_COMPONENT}_FOUND ${TBB_${_TBB_COMPONENT_UPPER}_FOUND}) - - IF (${_TBB_LIBRARY_BASE}) - # setup the TBB__LIBRARIES variable - SET (TBB_${_TBB_COMPONENT_UPPER}_LIBRARIES ${${_TBB_LIBRARY_BASE}}) - LIST (APPEND TBB_LIBRARIES ${${_TBB_LIBRARY_BASE}}) - ELSE (${_TBB_LIBRARY_BASE}) - LIST (APPEND _TBB_MISSING_LIBRARIES ${_TBB_LIBRARY_BASE}) - ENDIF (${_TBB_LIBRARY_BASE}) -ENDFOREACH (_TBB_COMPONENT ${TBB_FIND_COMPONENTS}) - -LIST (APPEND TBB_LIBRARIES ${TBB_LIBRARY}) -SET (TBB_INCLUDE_DIRS ${TBB_INCLUDE_DIR}) - -IF (DEFINED _TBB_MISSING_COMPONENTS AND _TBB_CHECK_COMPONENTS) - IF (NOT TBB_FIND_QUIETLY) - MESSAGE (STATUS "One or more TBB components were not found:") - # Display missing components indented, each on a separate line - FOREACH (_TBB_MISSING_COMPONENT ${_TBB_MISSING_COMPONENTS}) - MESSAGE (STATUS " " ${_TBB_MISSING_COMPONENT}) - ENDFOREACH (_TBB_MISSING_COMPONENT ${_TBB_MISSING_COMPONENTS}) - ENDIF (NOT TBB_FIND_QUIETLY) -ENDIF (DEFINED _TBB_MISSING_COMPONENTS AND _TBB_CHECK_COMPONENTS) - -# Determine library's version - -IF (EXISTS ${TBB_INCLUDE_DIR}/oneapi) - SET (_TBB_VERSION_HEADER ${TBB_INCLUDE_DIR}/oneapi/tbb/version.h) -ELSE (EXISTS ${TBB_INCLUDE_DIR}/oneapi) - SET (_TBB_VERSION_HEADER ${TBB_INCLUDE_DIR}/tbb/version.h) - # ROOT requires at least TBB 2020, but we must be able to determine older - # versions in order to properly warn the user. - IF (NOT EXISTS ${_TBB_VERSION_HEADER}) - SET (_TBB_VERSION_HEADER ${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h) - ENDIF (NOT EXISTS ${_TBB_VERSION_HEADER}) -ENDIF (EXISTS ${TBB_INCLUDE_DIR}/oneapi) - -IF (EXISTS ${_TBB_VERSION_HEADER}) - FILE (READ ${_TBB_VERSION_HEADER} _TBB_VERSION_CONTENTS) - - STRING (REGEX REPLACE ".*#define TBB_VERSION_MAJOR[ \t]+([0-9]+).*" "\\1" TBB_VERSION_MAJOR "${_TBB_VERSION_CONTENTS}") - STRING (REGEX REPLACE ".*#define TBB_VERSION_MINOR[ \t]+([0-9]+).*" "\\1" TBB_VERSION_MINOR "${_TBB_VERSION_CONTENTS}") - - SET (TBB_VERSION ${TBB_VERSION_MAJOR}.${TBB_VERSION_MINOR}) - SET (TBB_VERSION_COMPONENTS 2) -ENDIF (EXISTS ${_TBB_VERSION_HEADER}) - -IF (WIN32) - FIND_PROGRAM (LIB_EXECUTABLE NAMES lib - HINTS "$ENV{VS110COMNTOOLS}/../../VC/bin" - "$ENV{VS100COMNTOOLS}/../../VC/bin" - "$ENV{VS90COMNTOOLS}/../../VC/bin" - "$ENV{VS71COMNTOOLS}/../../VC/bin" - "$ENV{VS80COMNTOOLS}/../../VC/bin" - DOC "Library manager") - - MARK_AS_ADVANCED (LIB_EXECUTABLE) -ENDIF (WIN32) - -MACRO (GET_LIB_REQUISITES LIB REQUISITES) - IF (LIB_EXECUTABLE) - GET_FILENAME_COMPONENT (_LIB_PATH ${LIB_EXECUTABLE} PATH) - - IF (MSVC) - # Do not redirect the output - UNSET (ENV{VS_UNICODE_OUTPUT}) - ENDIF (MSVC) - - EXECUTE_PROCESS (COMMAND ${LIB_EXECUTABLE} /nologo /list ${LIB} - WORKING_DIRECTORY ${_LIB_PATH}/../../Common7/IDE - OUTPUT_VARIABLE _LIB_OUTPUT ERROR_QUIET) - - STRING (REPLACE "\n" ";" "${REQUISITES}" "${_LIB_OUTPUT}") - LIST (REMOVE_DUPLICATES ${REQUISITES}) - ENDIF (LIB_EXECUTABLE) -ENDMACRO (GET_LIB_REQUISITES) - -IF (_TBB_ALL_LIBS) - # collect lib requisites using the lib tool - FOREACH (_TBB_COMPONENT ${_TBB_ALL_LIBS}) - GET_LIB_REQUISITES (${_TBB_COMPONENT} _TBB_REQUISITES) - ENDFOREACH (_TBB_COMPONENT) -ENDIF (_TBB_ALL_LIBS) - -IF (NOT TBB_BINARY_DIR) - SET (_TBB_UPDATE_BINARY_DIR TRUE) -ELSE (NOT TBB_BINARY_DIR) - SET (_TBB_UPDATE_BINARY_DIR FALSE) -ENDIF (NOT TBB_BINARY_DIR) - -SET (_TBB_BINARY_DIR_HINTS ${_TBB_POSSIBLE_BIN_SUFFIXES}) - -IF (_TBB_REQUISITES) - FIND_FILE (TBB_BINARY_DIR NAMES ${_TBB_REQUISITES} - HINTS ${TBB_ROOT_DIR} - PATH_SUFFIXES ${_TBB_BINARY_DIR_HINTS} NO_DEFAULT_PATH) -ENDIF (_TBB_REQUISITES) - -IF (TBB_BINARY_DIR AND _TBB_UPDATE_BINARY_DIR) - SET (_TBB_BINARY_DIR ${TBB_BINARY_DIR}) - UNSET (TBB_BINARY_DIR CACHE) - - IF (_TBB_BINARY_DIR) - GET_FILENAME_COMPONENT (TBB_BINARY_DIR ${_TBB_BINARY_DIR} PATH) - ENDIF (_TBB_BINARY_DIR) -ENDIF (TBB_BINARY_DIR AND _TBB_UPDATE_BINARY_DIR) - -SET (TBB_BINARY_DIR ${TBB_BINARY_DIR} CACHE PATH "TBB binary directory") - -MARK_AS_ADVANCED (TBB_INCLUDE_DIR TBB_LIBRARY TBB_LIBRARY_RELEASE - TBB_LIBRARY_DEBUG TBB_BINARY_DIR) - -IF (NOT _TBB_CHECK_COMPONENTS) - SET (_TBB_FPHSA_ADDITIONAL_ARGS HANDLE_COMPONENTS) -ENDIF (NOT _TBB_CHECK_COMPONENTS) - -IF (CMAKE_VERSION VERSION_GREATER 2.8.2) - LIST (APPEND _TBB_FPHSA_ADDITIONAL_ARGS VERSION_VAR TBB_VERSION) -ENDIF (CMAKE_VERSION VERSION_GREATER 2.8.2) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS (TBB REQUIRED_VARS TBB_ROOT_DIR - TBB_INCLUDE_DIR TBB_LIBRARY ${_TBB_MISSING_LIBRARIES} - ${_TBB_FPHSA_ADDITIONAL_ARGS}) +##===----------------------------------------------------------------------===## + +include(FindPackageHandleStandardArgs) + +find_package(TBB QUIET CONFIG) +if (TBB_FOUND) + find_package_handle_standard_args(TBB CONFIG_MODE) + return() +endif() + +if (NOT TBB_FIND_COMPONENTS) + set(TBB_FIND_COMPONENTS tbb tbbmalloc) + foreach (_tbb_component ${TBB_FIND_COMPONENTS}) + set(TBB_FIND_REQUIRED_${_tbb_component} 1) + endforeach() +endif() + +if (WIN32) + list(APPEND ADDITIONAL_LIB_DIRS ENV PATH ENV LIB) + list(APPEND ADDITIONAL_INCLUDE_DIRS ENV INCLUDE ENV CPATH) +else() + list(APPEND ADDITIONAL_LIB_DIRS ENV LIBRARY_PATH ENV LD_LIBRARY_PATH ENV DYLD_LIBRARY_PATH) + list(APPEND ADDITIONAL_INCLUDE_DIRS ENV CPATH ENV C_INCLUDE_PATH ENV CPLUS_INCLUDE_PATH ENV INCLUDE_PATH) +endif() + +find_path(_tbb_include_dir NAMES oneapi/tbb.h PATHS ${ADDITIONAL_INCLUDE_DIRS}) +if (_tbb_include_dir) + file(READ "${_tbb_include_dir}/oneapi/tbb/version.h" _tbb_version_info LIMIT 2048) + string(REGEX REPLACE ".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1" _tbb_ver_major "${_tbb_version_info}") + string(REGEX REPLACE ".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1" _tbb_ver_minor "${_tbb_version_info}") + string(REGEX REPLACE ".*#define TBB_VERSION_PATCH ([0-9]+).*" "\\1" _tbb_ver_patch "${_tbb_version_info}") + + set(TBB_VERSION "${_tbb_ver_major}.${_tbb_ver_minor}.${_tbb_ver_patch}") + unset(_tbb_version_info) + unset(_tbb_ver_major) + unset(_tbb_ver_minor) + unset(_tbb_ver_patch) + + set(_TBB_BUILD_MODES RELEASE DEBUG) + set(_TBB_DEBUG_SUFFIX _debug) + + foreach (_tbb_component ${TBB_FIND_COMPONENTS}) + if (NOT TARGET TBB::${_tbb_component}) + add_library(TBB::${_tbb_component} SHARED IMPORTED) + set_property(TARGET TBB::${_tbb_component} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${_tbb_include_dir}) + + set_target_properties(TBB::${_tbb_component} PROPERTIES + INTERFACE_COMPILE_DEFINITIONS "__TBB_NO_IMPLICIT_LINKAGE=1") + + foreach(_TBB_BUILD_MODE ${_TBB_BUILD_MODES}) + set(_tbb_component_lib_name ${_tbb_component}${_TBB_${_TBB_BUILD_MODE}_SUFFIX}) + set(_tbb_component_filename ${_tbb_component_lib_name}) + + if (WIN32 AND _tbb_component STREQUAL tbb) + set(_tbb_component_filename ${_tbb_component}12${_TBB_${_TBB_BUILD_MODE}_SUFFIX}) + endif() + + if (WIN32) + find_library(${_tbb_component_lib_name}_lib ${_tbb_component_filename} PATHS ${ADDITIONAL_LIB_DIRS}) + find_file(${_tbb_component_lib_name}_dll ${_tbb_component_filename}.dll PATHS ${ADDITIONAL_LIB_DIRS}) + + set_target_properties(TBB::${_tbb_component} PROPERTIES + IMPORTED_LOCATION_${_TBB_BUILD_MODE} "${${_tbb_component_lib_name}_dll}" + IMPORTED_IMPLIB_${_TBB_BUILD_MODE} "${${_tbb_component_lib_name}_lib}" + ) + else() + find_library(${_tbb_component_lib_name}_so ${_tbb_component_filename} PATHS ${ADDITIONAL_LIB_DIRS}) + + set_target_properties(TBB::${_tbb_component} PROPERTIES + IMPORTED_LOCATION_${_TBB_BUILD_MODE} "${${_tbb_component_lib_name}_so}" + ) + endif() + if (${_tbb_component_lib_name}_lib AND ${_tbb_component_lib_name}_dll OR ${_tbb_component_lib_name}_so) + set_property(TARGET TBB::${_tbb_component} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${_TBB_BUILD_MODE}) + list(APPEND TBB_IMPORTED_TARGETS TBB::${_tbb_component}) + set(TBB_${_tbb_component}_FOUND 1) + endif() + unset(${_tbb_component_lib_name}_lib CACHE) + unset(${_tbb_component_lib_name}_dll CACHE) + unset(${_tbb_component_lib_name}_so CACHE) + unset(_tbb_component_lib_name) + endforeach() + endif() + endforeach() + unset(_TBB_BUILD_MODES) + unset(_TBB_DEBUG_SUFFIX) +endif() +unset(_tbb_include_dir CACHE) + +list(REMOVE_DUPLICATES TBB_IMPORTED_TARGETS) + +find_package_handle_standard_args(TBB + REQUIRED_VARS TBB_IMPORTED_TARGETS + HANDLE_COMPONENTS) diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake index 94f9b4554e47a..9c9e0cc7e008e 100644 --- a/cmake/modules/SearchInstalledSoftware.cmake +++ b/cmake/modules/SearchInstalledSoftware.cmake @@ -968,6 +968,7 @@ if(builtin_tbb) endif() if(builtin_tbb) + list(APPEND ROOT_BUILTINS BUILTIN_TBB) add_subdirectory(builtins/tbb) endif() diff --git a/core/imt/CMakeLists.txt b/core/imt/CMakeLists.txt index edb9a758c4df9..c99e8cd53ece9 100644 --- a/core/imt/CMakeLists.txt +++ b/core/imt/CMakeLists.txt @@ -19,13 +19,13 @@ ROOT_LINKER_LIBRARY(Imt src/TTaskGroup.cxx DEPENDENCIES ${MULTIPROC_LIB} - BUILTINS - TBB ) target_link_libraries(Imt PRIVATE Thread INTERFACE Core) if(imt) + target_link_libraries(Imt PRIVATE TBB::tbb) + ROOT_GENERATE_DICTIONARY(G__Imt STAGE1 ROOT/TTaskGroup.hxx ROOT/RTaskArena.hxx @@ -40,8 +40,7 @@ if(imt) Core Thread ${MULTIPROC_LIB} - BUILTINS - TBB + TBB::tbb ) # G__Imt.cxx is automatically added by ROOT_GENERATE_DICTIONARY() @@ -51,10 +50,6 @@ if(imt) src/TThreadExecutor.cxx ) - target_include_directories(Imt SYSTEM PRIVATE ${TBB_INCLUDE_DIRS}) - target_link_libraries(Imt PRIVATE ${TBB_LIBRARIES}) - set_target_properties(Imt PROPERTIES COMPILE_FLAGS "${TBB_CXXFLAGS}") - ROOT_ADD_TEST_SUBDIRECTORY(test) else() ROOT_GENERATE_DICTIONARY(G__Imt STAGE1 diff --git a/core/imt/test/CMakeLists.txt b/core/imt/test/CMakeLists.txt index 7c27b78d0033c..503fa06fc66a7 100644 --- a/core/imt/test/CMakeLists.txt +++ b/core/imt/test/CMakeLists.txt @@ -4,9 +4,6 @@ # For the licensing terms see $ROOTSYS/LICENSE. # For the list of contributors see $ROOTSYS/README/CREDITS. -ROOT_ADD_GTEST(testTaskArena testRTaskArena.cxx LIBRARIES Imt ${TBB_LIBRARIES} FAILREGEX "" INCLUDE_DIRS ${TBB_INCLUDE_DIRS}) -set_target_properties(testTaskArena PROPERTIES COMPILE_FLAGS "${TBB_CXXFLAGS}") -ROOT_ADD_GTEST(testTBBGlobalControl testTBBGlobalControl.cxx LIBRARIES Imt ${TBB_LIBRARIES} INCLUDE_DIRS ${TBB_INCLUDE_DIRS}) -set_target_properties(testTBBGlobalControl PROPERTIES COMPILE_FLAGS "${TBB_CXXFLAGS}") -ROOT_ADD_GTEST(testEnableImt testEnableImt.cxx LIBRARIES Imt ${TBB_LIBRARIES} INCLUDE_DIRS ${TBB_INCLUDE_DIRS}) -set_target_properties(testEnableImt PROPERTIES COMPILE_FLAGS "${TBB_CXXFLAGS}") +ROOT_ADD_GTEST(testTaskArena testRTaskArena.cxx LIBRARIES Imt TBB::tbb FAILREGEX "") +ROOT_ADD_GTEST(testTBBGlobalControl testTBBGlobalControl.cxx LIBRARIES Imt TBB::tbb) +ROOT_ADD_GTEST(testEnableImt testEnableImt.cxx LIBRARIES Imt TBB::tbb) diff --git a/core/thread/CMakeLists.txt b/core/thread/CMakeLists.txt index 32a8cde377437..8014c5576ef19 100644 --- a/core/thread/CMakeLists.txt +++ b/core/thread/CMakeLists.txt @@ -62,8 +62,6 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Thread -writeEmptyRootPCM DEPENDENCIES Core - BUILTINS - TBB INSTALL_OPTIONS ${installoptions} ) @@ -77,10 +75,8 @@ target_include_directories(Thread PUBLIC $ ) -if((TBB_FOUND OR builtin_tbb) AND NOT MSVC) - target_include_directories(Thread PRIVATE ${TBB_INCLUDE_DIRS}) - target_link_libraries(Thread PRIVATE ${TBB_LIBRARIES}) - set_target_properties(Thread PROPERTIES COMPILE_FLAGS "${TBB_CXXFLAGS}") +if(TBB_FOUND) + target_link_libraries(Thread PRIVATE TBB::tbb) target_compile_definitions(Thread PUBLIC ROOT_CORE_THREAD_TBB) endif() diff --git a/core/thread/test/CMakeLists.txt b/core/thread/test/CMakeLists.txt index 209874d0c968d..2769a2e2c8c79 100644 --- a/core/thread/test/CMakeLists.txt +++ b/core/thread/test/CMakeLists.txt @@ -4,8 +4,10 @@ # For the licensing terms see $ROOTSYS/LICENSE. # For the list of contributors see $ROOTSYS/README/CREDITS. -ROOT_ADD_GTEST(testRWLock testRWLock.cxx LIBRARIES Core Thread Hist ${TBB_LIBRARIES} INCLUDE_DIRS ${TBB_INCLUDE_DIRS}) -set_target_properties(testRWLock PROPERTIES COMPILE_FLAGS "${TBB_CXXFLAGS}") +ROOT_ADD_GTEST(testRWLock testRWLock.cxx LIBRARIES Core Thread Hist) +if(imt) + target_link_libraries(testRWLock PRIVATE TBB::tbb) +endif() ROOT_ADD_GTEST(testTThreadedObject testTThreadedObject.cxx LIBRARIES Hist) diff --git a/roottest/root/multicore/CMakeLists.txt b/roottest/root/multicore/CMakeLists.txt index 1423f4813b77a..9e482339a3ea4 100644 --- a/roottest/root/multicore/CMakeLists.txt +++ b/roottest/root/multicore/CMakeLists.txt @@ -95,10 +95,9 @@ if(NOT MSVC AND NOT dev) endif() if(imt) - include_directories(${TBB_INCLUDE_DIRS}) ROOTTEST_GENERATE_EXECUTABLE(threadExecutor tThreadExecutor.cpp - LIBRARIES Core Imt Hist MathCore + LIBRARIES Core Imt Hist MathCore TBB::tbb FIXTURES_SETUP root-multicore-threadExecutor-fixture) ROOTTEST_ADD_TEST(threadExecutor diff --git a/tmva/tmva/CMakeLists.txt b/tmva/tmva/CMakeLists.txt index b7fd93efc928b..1adae4b59430f 100644 --- a/tmva/tmva/CMakeLists.txt +++ b/tmva/tmva/CMakeLists.txt @@ -409,10 +409,7 @@ if(vdt OR builtin_vdt) endif() if(tmva-cpu) - target_include_directories(TMVA PRIVATE ${TBB_INCLUDE_DIRS}) - target_link_libraries(TMVA PRIVATE ${TBB_LIBRARIES}) - set_target_properties(TMVA PROPERTIES COMPILE_FLAGS "${TBB_CXXFLAGS}") - target_link_libraries(TMVA PRIVATE ROOT::BLAS) + target_link_libraries(TMVA PRIVATE TBB::tbb ROOT::BLAS) endif() if(tmva-gpu) From 2653dad0ccf72e1cb9b414e43c0d7e603b38f1c6 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Wed, 15 Apr 2026 13:33:05 +0200 Subject: [PATCH 06/10] [vdt] export canonical vars to parent scope --- builtins/vdt/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/builtins/vdt/CMakeLists.txt b/builtins/vdt/CMakeLists.txt index f012fea0b504a..ccaf5abd91cb2 100644 --- a/builtins/vdt/CMakeLists.txt +++ b/builtins/vdt/CMakeLists.txt @@ -37,3 +37,8 @@ install(FILES ${VDT_LIBRARIES} install(DIRECTORY ${CMAKE_BINARY_DIR}/include/vdt DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT extra-headers) set_property(GLOBAL APPEND PROPERTY ROOT_BUILTIN_TARGETS VDT::VDT) + +set(VDT_VERSION ${ROOT_GSL_VERSION} PARENT_SCOPE) +set(VDT_FOUND ${vdt_version} PARENT_SCOPE) +set(VDT_LIBRARIES ${VDT_LIBRARIES} PARENT_SCOPE) +set(VDT_INCLUDE_DIRS ${VDT_INCLUDE_DIRS} PARENT_SCOPE) From 78db3b55a82bb76b7681e428b088372a0d4067c1 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Wed, 15 Apr 2026 17:39:16 +0200 Subject: [PATCH 07/10] [cmake] encapsulate builtin dependencies behind CMake target --- builtins/lzma/CMakeLists.txt | 3 ++- core/CMakeLists.txt | 2 +- graf2d/graf/CMakeLists.txt | 2 -- graf2d/win32gdk/CMakeLists.txt | 2 -- graf3d/ftgl/CMakeLists.txt | 2 -- net/http/CMakeLists.txt | 2 +- net/net/CMakeLists.txt | 3 +-- net/rpdutils/CMakeLists.txt | 4 +--- 8 files changed, 6 insertions(+), 14 deletions(-) diff --git a/builtins/lzma/CMakeLists.txt b/builtins/lzma/CMakeLists.txt index 0c10ec273c6a3..d573a16cf0005 100644 --- a/builtins/lzma/CMakeLists.txt +++ b/builtins/lzma/CMakeLists.txt @@ -70,9 +70,10 @@ set(LIBLZMA_INCLUDE_DIR ${ROOT_LZMA_PREFIX}/include) file(MAKE_DIRECTORY ${LIBLZMA_INCLUDE_DIR}) add_library(LibLZMA STATIC IMPORTED GLOBAL) -add_library(LibLZMA::LibLZMA ALIAS LibLZMA) +add_dependencies(LibLZMA LZMA) target_include_directories(LibLZMA INTERFACE ${LIBLZMA_INCLUDE_DIR}) set_target_properties(LibLZMA PROPERTIES IMPORTED_LOCATION ${LIBLZMA_LIBRARIES}) +add_library(LibLZMA::LibLZMA ALIAS LibLZMA) # Set the canonical output of find_package according to # https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#standard-variable-names diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 57a5284ef7e77..f4823dd46b323 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -24,7 +24,7 @@ add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/include/RConfigure.h add_custom_target(rconfigure ALL DEPENDS ${CMAKE_BINARY_DIR}/include/RConfigure.h) -ROOT_LINKER_LIBRARY(Core BUILTINS LZMA) +ROOT_LINKER_LIBRARY(Core) # This sets RUNPATH for libCore, which enables it to dlopen any ROOT library in its directory. # If omitted, Core might try to load libraries from a ROOT that's installed in the system. diff --git a/graf2d/graf/CMakeLists.txt b/graf2d/graf/CMakeLists.txt index f7a0f9703723e..da2585cb59fc2 100644 --- a/graf2d/graf/CMakeLists.txt +++ b/graf2d/graf/CMakeLists.txt @@ -96,6 +96,4 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Graf Matrix MathCore RIO - BUILTINS - FREETYPE ) diff --git a/graf2d/win32gdk/CMakeLists.txt b/graf2d/win32gdk/CMakeLists.txt index fefd4b9b3387a..ab1ae47f1e231 100644 --- a/graf2d/win32gdk/CMakeLists.txt +++ b/graf2d/win32gdk/CMakeLists.txt @@ -124,8 +124,6 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Win32gdk DEPENDENCIES Core Graf - BUILTINS - FREETYPE ) add_dependencies(Win32gdk GDKLIB glib) diff --git a/graf3d/ftgl/CMakeLists.txt b/graf3d/ftgl/CMakeLists.txt index 2aeb51f5d7ab3..40749555a1fb4 100644 --- a/graf3d/ftgl/CMakeLists.txt +++ b/graf3d/ftgl/CMakeLists.txt @@ -40,8 +40,6 @@ ROOT_LINKER_LIBRARY(FTGL OpenGL::GLU Freetype::Freetype ZLIB::ZLIB - BUILTINS - FREETYPE ) target_include_directories(FTGL PRIVATE diff --git a/net/http/CMakeLists.txt b/net/http/CMakeLists.txt index 3121f376cf253..00a8796cbcc2f 100644 --- a/net/http/CMakeLists.txt +++ b/net/http/CMakeLists.txt @@ -97,7 +97,7 @@ if(builtin_civetweb) endif() if(link_ssl) target_compile_definitions(RHTTP PUBLIC -DNO_SSL_DL) - target_link_libraries(RHTTP PRIVATE ${OPENSSL_LIBRARIES}) + target_link_libraries(RHTTP PRIVATE OpenSSL::SSL) endif() else() target_compile_definitions(RHTTP PUBLIC -DNO_SSL) diff --git a/net/net/CMakeLists.txt b/net/net/CMakeLists.txt index ff871b1934bf9..f5e8ec5ab2872 100644 --- a/net/net/CMakeLists.txt +++ b/net/net/CMakeLists.txt @@ -105,8 +105,7 @@ ROOT_STANDARD_LIBRARY_PACKAGE(Net ) if(ssl) - target_include_directories(Net PRIVATE ${OPENSSL_INCLUDE_DIR}) - target_link_libraries(Net PRIVATE ${OPENSSL_LIBRARIES}) + target_link_libraries(Net PRIVATE OpenSSL::SSL) endif() ROOT_ADD_TEST_SUBDIRECTORY(test) \ No newline at end of file diff --git a/net/rpdutils/CMakeLists.txt b/net/rpdutils/CMakeLists.txt index ffde37d2e52a2..ad8dd33df0bb8 100644 --- a/net/rpdutils/CMakeLists.txt +++ b/net/rpdutils/CMakeLists.txt @@ -47,13 +47,11 @@ add_dependencies(rpdutil move_headers) ROOT_LINKER_LIBRARY(SrvAuth rpdutils.cxx DaemonUtils.h DaemonUtils.cxx LIBRARIES - ${OPENSSL_LIBRARIES} + OpenSSL::SSL rpdutil rsa DEPENDENCIES Net - BUILTINS - OPENSSL ) target_include_directories(SrvAuth PRIVATE From c6499ae7fa7f4b598af9a46c8c27f204ade0923d Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Thu, 16 Apr 2026 16:50:56 +0200 Subject: [PATCH 08/10] [fftw] add script license file as header and misc improvements Co-authored-by: Stephan Hageboeck Co-authored-by: ferdymercury --- cmake/modules/FindFFTW.cmake | 29 +++++++++++++++++++++++++++++ core/thread/CMakeLists.txt | 2 +- net/net/CMakeLists.txt | 2 +- 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/cmake/modules/FindFFTW.cmake b/cmake/modules/FindFFTW.cmake index 7b2788c3fcc23..e74637a52013f 100644 --- a/cmake/modules/FindFFTW.cmake +++ b/cmake/modules/FindFFTW.cmake @@ -6,6 +6,35 @@ # Modifications: # Copyright (c) 2017, Patrick Bos # +# LICENSE: +# Copyright (c) 2015, Wenzel Jakob; 2017, Patrick Bos +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# * Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# # Usage: # find_package(FFTW [REQUIRED] [QUIET] [COMPONENTS component1 ... componentX] ) # diff --git a/core/thread/CMakeLists.txt b/core/thread/CMakeLists.txt index 8014c5576ef19..83133efce59a4 100644 --- a/core/thread/CMakeLists.txt +++ b/core/thread/CMakeLists.txt @@ -75,7 +75,7 @@ target_include_directories(Thread PUBLIC $ ) -if(TBB_FOUND) +if(TARGET TBB::tbb) target_link_libraries(Thread PRIVATE TBB::tbb) target_compile_definitions(Thread PUBLIC ROOT_CORE_THREAD_TBB) endif() diff --git a/net/net/CMakeLists.txt b/net/net/CMakeLists.txt index f5e8ec5ab2872..77c8d79c96019 100644 --- a/net/net/CMakeLists.txt +++ b/net/net/CMakeLists.txt @@ -108,4 +108,4 @@ if(ssl) target_link_libraries(Net PRIVATE OpenSSL::SSL) endif() -ROOT_ADD_TEST_SUBDIRECTORY(test) \ No newline at end of file +ROOT_ADD_TEST_SUBDIRECTORY(test) From cc5d6249b0ccd89a17f8ecb4d7fdd0e455ce3d53 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Fri, 17 Apr 2026 14:56:36 +0200 Subject: [PATCH 09/10] [gtest] add proper cmake target Co-authored-by: Stephan Hageboeck --- builtins/gtest/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/builtins/gtest/CMakeLists.txt b/builtins/gtest/CMakeLists.txt index 6dda508a10aec..e1832cdb8c880 100644 --- a/builtins/gtest/CMakeLists.txt +++ b/builtins/gtest/CMakeLists.txt @@ -97,6 +97,7 @@ foreach(lib gtest gtest_main gmock gmock_main) IMPORTED_LOCATION "${_G_LIBRARY_PATH}${CMAKE_STATIC_LIBRARY_PREFIX}${lib}${CMAKE_STATIC_LIBRARY_SUFFIX}" ) add_dependencies(${lib} googletest) + add_library(GTest::${lib} ALIAS ${lib}) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL 9) target_compile_options(${lib} INTERFACE -Wno-deprecated-copy) From afc198754f4173ceab50d783939630601cdddf45 Mon Sep 17 00:00:00 2001 From: ferdymercury Date: Fri, 17 Apr 2026 15:05:00 +0200 Subject: [PATCH 10/10] [ci] enable builtin gtest in clang ninja alma10 as suggested by hageboeck --- .../workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt b/.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt index 0f3e3c454de1b..842fb3a724a54 100644 --- a/.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt +++ b/.github/workflows/root-ci-config/buildconfig/alma10-clang_ninja.txt @@ -5,6 +5,7 @@ builtin_freetype=ON builtin_fftw3=ON builtin_gif=ON builtin_gl2ps=ON +builtin_googletest=ON builtin_gsl=ON builtin_jpeg=ON builtin_lz4=ON