From 0555523c9848673d558071bbcab502f00e71698e Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Thu, 4 Dec 2025 18:39:15 +0500 Subject: [PATCH] cmake - move all cgal related stuff to `CGAL::CGAL` target --- cmake/CMakeLists.txt | 26 +---------- cmake/FindCGAL.cmake | 30 ++++++++++--- src/ifcconvert/CMakeLists.txt | 7 ++- src/ifcgeom/CMakeLists.txt | 12 ++++-- src/ifcgeom/kernels/CMakeLists.txt | 5 ++- src/ifcwrap/CMakeLists.txt | 6 +++ src/svgfill/CMakeLists.txt | 69 ++---------------------------- 7 files changed, 53 insertions(+), 102 deletions(-) diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index f62a9813ff..cf6e56a68e 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -197,11 +197,7 @@ endforeach() if(WITH_CGAL) find_package(CGAL REQUIRED) - if(TARGET CGAL::CGAL) - link_libraries(CGAL::CGAL) - endif() - add_definitions(-DIFOPSH_WITH_CGAL) - set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) + set(CGAL_LIBRARIES CGAL::CGAL) list(APPEND GEOMETRY_KERNELS cgal) endif() @@ -451,7 +447,7 @@ endif(MSVC) include_directories(${INCLUDE_DIRECTORIES} ${OPENCOLLADA_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR} ${JSON_INCLUDE_DIR} ${HDF5_INCLUDE_DIR} - ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${USD_INCLUDE_DIR} + ${USD_INCLUDE_DIR} ${TBB_INCLUDE_DIR} ) @@ -544,24 +540,6 @@ add_subdirectory(../src/ifcparse ifcparse) set(IFCOPENSHELL_LIBRARIES IfcParse) if(BUILD_IFCGEOM) - # CGAL::CGAL target already has dependencies resolved. - if(WITH_CGAL AND CGAL_DIR) - set(CGAL_LIBRARIES CGAL::CGAL) - message(STATUS "Using found CGAL package at '${CGAL_DIR}'") - elseif(WITH_CGAL AND NOT CGAL_DIR) - find_library(libGMP NAMES gmp mpir PATHS ${GMP_LIBRARY_DIR} NO_DEFAULT_PATH) - find_library(libMPFR NAMES mpfr PATHS ${MPFR_LIBRARY_DIR} NO_DEFAULT_PATH) - if(NOT libGMP) - message(FATAL_ERROR "Unable to find GMP library files, aborting") - endif() - if(NOT libMPFR) - message(FATAL_ERROR "Unable to find MPFR library files, aborting") - endif() - - list(APPEND CGAL_LIBRARIES "${libMPFR}") - list(APPEND CGAL_LIBRARIES "${libGMP}") - endif() - add_subdirectory(../src/ifcgeom ifcgeom) endif(BUILD_IFCGEOM) diff --git a/cmake/FindCGAL.cmake b/cmake/FindCGAL.cmake index caf13ec791..1511d2be80 100644 --- a/cmake/FindCGAL.cmake +++ b/cmake/FindCGAL.cmake @@ -9,10 +9,14 @@ # If input variables are not specified, try to find HDF5 config. # Input variables could also be provided as environment variables. # -# Output variables: -# - `CGAL_INCLUDE_DIR` +# Output targets: +# - `CGAL::CGAL` # +if(TARGET CGAL::CGAL) + return() +endif() + UNIFY_ENVVARS_AND_CACHE(CGAL_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(CGAL_LIBRARY_DIR) UNIFY_ENVVARS_AND_CACHE(GMP_INCLUDE_DIR) @@ -20,7 +24,21 @@ UNIFY_ENVVARS_AND_CACHE(GMP_LIBRARY_DIR) UNIFY_ENVVARS_AND_CACHE(MPFR_INCLUDE_DIR) UNIFY_ENVVARS_AND_CACHE(MPFR_LIBRARY_DIR) -if(NOT CGAL_INCLUDE_DIR) +if(CGAL_INCLUDE_DIR) + find_library(libGMP NAMES gmp mpir PATHS ${GMP_LIBRARY_DIR} NO_DEFAULT_PATH) + find_library(libMPFR NAMES mpfr PATHS ${MPFR_LIBRARY_DIR} NO_DEFAULT_PATH) + if(NOT libGMP) + message(FATAL_ERROR "Unable to find GMP library files, aborting") + endif() + if(NOT libMPFR) + message(FATAL_ERROR "Unable to find MPFR library files, aborting") + endif() + + add_library(CGAL::CGAL INTERFACE IMPORTED) + target_include_directories(CGAL::CGAL INTERFACE "${CGAL_INCLUDE_DIR}") + target_include_directories(CGAL::CGAL INTERFACE "${GMP_INCLUDE_DIR}" "${MPFR_INCLUDE_DIR}") + target_link_libraries(CGAL::CGAL INTERFACE "${libMPFR}" "${libGMP}") +else() # CGAL is not respecting default Boost_USE_STATIC_LIBS value # and sometiems it's getting in the way. if(NOT DEFINED Boost_USE_STATIC_LIBS) @@ -28,8 +46,8 @@ if(NOT CGAL_INCLUDE_DIR) else() set(CGAL_Boost_USE_STATIC_LIBS "${Boost_USE_STATIC_LIBS}") endif() - find_package(CGAL CONFIG REQUIRED) - if(NOT CGAL_DIR) + find_package(CGAL CONFIG) + if(NOT CGAL::CGAL) message( FATAL_ERROR "CGAL_SUPPORT enabled, but CGAL_INCLUDE_DIR wasn't provided and CGAL package couldn't be found." @@ -38,5 +56,5 @@ if(NOT CGAL_INCLUDE_DIR) message(STATUS "CGAL: found config at '${CGAL_DIR}'.") endif() -add_definitions(-DIFOPSH_WITH_CGAL) +target_compile_definitions(CGAL::CGAL INTERFACE IFOPSH_WITH_CGAL) set(SWIG_DEFINES ${SWIG_DEFINES} -DIFOPSH_WITH_CGAL) diff --git a/src/ifcconvert/CMakeLists.txt b/src/ifcconvert/CMakeLists.txt index a9dbe6e1b7..85b6d16e30 100644 --- a/src/ifcconvert/CMakeLists.txt +++ b/src/ifcconvert/CMakeLists.txt @@ -9,6 +9,11 @@ endif() set(IFCCONVERT_FILES ${IFCCONVERT_CPP_FILES} ${IFCCONVERT_H_FILES}) add_executable(IfcConvert ${IFCCONVERT_FILES}) -target_link_libraries(IfcConvert IfcGeom IfcParse Serializers ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES}) +target_link_libraries(IfcConvert + PRIVATE + IfcGeom IfcParse Serializers + ${OpenCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${HDF5_LIBRARIES} ${USD_LIBRARIES} + ${CGAL_LIBRARIES} +) install(TARGETS IfcConvert) diff --git a/src/ifcgeom/CMakeLists.txt b/src/ifcgeom/CMakeLists.txt index 143caf2159..1d24e7c762 100644 --- a/src/ifcgeom/CMakeLists.txt +++ b/src/ifcgeom/CMakeLists.txt @@ -22,11 +22,15 @@ endif() find_package(Eigen3 REQUIRED) -if(WASM_BUILD) - target_link_libraries(IfcGeom ${kernel_libraries} ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen") -else() - target_link_libraries(IfcGeom IfcParse ${kernel_libraries} ${mapping_libraries} ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen") +target_link_libraries(IfcGeom + ${kernel_libraries} ${mapping_libraries} + ${CMAKE_THREAD_LIBS_INIT} "Eigen3::Eigen" + ${CGAL_LIBRARIES} +) +if(NOT WASM_BUILD) + target_link_libraries(IfcGeom IfcParse) endif() +target_link_libraries(IfcGeom ) install(FILES ${SCHEMA_AGNOSTIC_H_FILES} DESTINATION ${INCLUDEDIR}/ifcgeom diff --git a/src/ifcgeom/kernels/CMakeLists.txt b/src/ifcgeom/kernels/CMakeLists.txt index 6ead320c16..d6ba92cc05 100644 --- a/src/ifcgeom/kernels/CMakeLists.txt +++ b/src/ifcgeom/kernels/CMakeLists.txt @@ -16,13 +16,16 @@ foreach(kernel ${GEOMETRY_KERNELS}) install(TARGETS ${KERNEL_TARGET}) if(${kernel} STREQUAL "cgal") + find_package(CGAL REQUIRED) + target_link_libraries(${KERNEL_TARGET} CGAL::CGAL) set_property(TARGET ${KERNEL_TARGET} APPEND_STRING PROPERTY COMPILE_FLAGS " -DCGAL_HAS_THREADS") - + set(KERNEL_TARGET_SIMPLE "${KERNEL_TARGET}_simple") add_library(${KERNEL_TARGET_SIMPLE} OBJECT ${IFCGEOM_FILES}) set_target_properties(${KERNEL_TARGET_SIMPLE} PROPERTIES COMPILE_FLAGS "-DIFC_GEOM_EXPORTS -DIFOPSH_SIMPLE_KERNEL -DCGAL_HAS_THREADS") list(APPEND kernel_libraries ${KERNEL_TARGET_SIMPLE}) target_link_libraries(${KERNEL_TARGET_SIMPLE} ${${KERNEL_UPPER}_LIBRARIES} Eigen3::Eigen) + target_link_libraries(${KERNEL_TARGET_SIMPLE} CGAL::CGAL) install(TARGETS ${KERNEL_TARGET_SIMPLE}) elseif(${kernel} STREQUAL "opencascade") target_link_libraries(${KERNEL_TARGET} ${OpenCASCADE_LIBRARIES}) diff --git a/src/ifcwrap/CMakeLists.txt b/src/ifcwrap/CMakeLists.txt index d752cc6650..bbbe428795 100644 --- a/src/ifcwrap/CMakeLists.txt +++ b/src/ifcwrap/CMakeLists.txt @@ -119,6 +119,11 @@ else() ) endif() +if(WITH_CGAL) + find_package(CGAL REQUIRED) + target_link_libraries(ifcopenshell_wrapper PRIVATE CGAL::CGAL) +endif() + target_link_libraries(ifcopenshell_wrapper PRIVATE Python::Module) SET_PROPERTY(TARGET ifcopenshell_wrapper PROPERTY SWIG_DEPENDS ${IFCOPENSHELL_LIBRARIES}) if (WASM_BUILD) @@ -147,6 +152,7 @@ target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${O else() target_link_libraries(ifcopenshell_wrapper PRIVATE ${IFCOPENSHELL_LIBRARIES} ${LIBSVGFILL}) endif() +target_link_libraries(ifcopenshell_wrapper PRIVATE ${CGAL_LIBRARIES}) if ((NOT WIN32) AND BUILD_SHARED_LIBS) SET_INSTALL_RPATHS(ifcopenshell_wrapper "${IFCDIRS};${OCC_LIBRARY_DIR}") endif() diff --git a/src/svgfill/CMakeLists.txt b/src/svgfill/CMakeLists.txt index 78dc83b5b0..9464980bdf 100644 --- a/src/svgfill/CMakeLists.txt +++ b/src/svgfill/CMakeLists.txt @@ -23,65 +23,6 @@ if(NOT IS_ABSOLUTE ${INCLUDEDIR}) endif() message(STATUS "INCLUDEDIR: ${INCLUDEDIR}") -set(CGAL_LIBRARY_NAMES libCGAL_Core libCGAL_ImageIO libCGAL) - -if(NOT CGAL_INCLUDE_DIR) - find_package(CGAL REQUIRED) - if(NOT CGAL_DIR) - message( - FATAL_ERROR - "CGAL_SUPPORT enabled, but CGAL_INCLUDE_DIR wasn't provided and CGAL package couldn't be found." - ) - endif() - message(STATUS "CGAL: found config at '${CGAL_DIR}'.") - set(CGAL_LIBRARIES CGAL::CGAL) -else() - set(CGAL_INCLUDE_DIR ${CGAL_INCLUDE_DIR} CACHE FILEPATH "CGAL header files") - message(STATUS "Looking for CGAL include files in: ${CGAL_INCLUDE_DIR}") - - if(NOT "${CGAL_LIBRARY_DIR}" STREQUAL "") - set(CGAL_LIBRARY_DIR ${CGAL_LIBRARY_DIR} CACHE FILEPATH "CGAL library files") - message(STATUS "Looking for CGAL library files in: ${CGAL_LIBRARY_DIR}") - endif() - - if(WASM_BUILD) - set(CMAKE_FIND_ROOT_PATH_BACKUP "${CMAKE_FIND_ROOT_PATH}") - set(CMAKE_FIND_ROOT_PATH "") - endif() - - find_library(libCGAL NAMES CGAL PATHS ${CGAL_LIBRARY_DIR} NO_DEFAULT_PATH) - - if(libCGAL) - message(STATUS "CGAL library files found") - foreach(lib ${CGAL_LIBRARY_NAMES}) - string(REPLACE libCGAL "${lib}" lib_path "${libCGAL}") - list(APPEND CGAL_LIBRARIES "${lib_path}") - endforeach() - else() - if(NOT "${CGAL_LIBRARY_DIR}" STREQUAL "") - file(GLOB CGAL_LIBRARIES ${CGAL_LIBRARY_DIR}/CGAL*.lib) - list(LENGTH CGAL_LIBRARY_NAMES num_cgal_library_names) - list(LENGTH CGAL_LIBRARIES num_cgal_libraries) - link_directories("${CGAL_LIBRARY_DIR}") - if(NOT "${num_cgal_library_names}" STREQUAL "${num_cgal_libraries}") - message(FATAL_ERROR "Unable to find CGAL library files, aborting") - endif() - message(STATUS "CGAL library files found") - endif() - endif() - find_library(libGMP NAMES gmp mpir PATHS ${GMP_LIBRARY_DIR} NO_DEFAULT_PATH) - find_library(libMPFR NAMES mpfr PATHS ${MPFR_LIBRARY_DIR} NO_DEFAULT_PATH) - if(NOT libGMP) - message(FATAL_ERROR "Unable to find GMP library files, aborting") - endif() - if(NOT libMPFR) - message(FATAL_ERROR "Unable to find MPFR library files, aborting") - endif() - - list(APPEND CGAL_LIBRARIES "${libMPFR}") - list(APPEND CGAL_LIBRARIES "${libGMP}") -endif(NOT CGAL_INCLUDE_DIR) - if(WIN32 AND ("$ENV{CONDA_BUILD}" STREQUAL "")) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTITHREADED ON) @@ -106,22 +47,18 @@ endif() find_package(Boost) message(STATUS "Boost include files found in ${Boost_INCLUDE_DIRS}") find_package(LibXml2 REQUIRED) - -if(WASM_BUILD) - set(CMAKE_FIND_ROOT_PATH "${CMAKE_FIND_ROOT_PATH_BACKUP}") -endif() - +find_package(CGAL REQUIRED) include_directories(${Boost_INCLUDE_DIRS} - ${CGAL_INCLUDE_DIR} ${GMP_INCLUDE_DIR} ${MPFR_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/svgpp/include + ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/svgpp/include ) file(GLOB LIB_H_FILES src/*.h) file(GLOB LIB_CPP_FILES src/svgfill.cpp src/arrange_polygons.cpp) set(LIB_SRC_FILES ${LIB_H_FILES} ${LIB_CPP_FILES}) add_library(svgfill ${LIB_SRC_FILES}) -target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} LibXml2::LibXml2 ${CGAL_LIBRARIES}) +target_link_libraries(svgfill ${Boost_LIBRARIES} ${BCRYPT_LIBRARIES} LibXml2::LibXml2 CGAL::CGAL) add_executable(svgfill_exe src/main.cpp) target_link_libraries(svgfill_exe svgfill)