From 6898eac76ef68c2946126363644010cb7b28ff7b Mon Sep 17 00:00:00 2001 From: Dhruv Totala Date: Fri, 6 Feb 2026 01:20:15 +0530 Subject: [PATCH] Modernized CMakeLists.txt, removed deprecated CGAL macros, made LEDA-dependent targets optional --- respol/CMakeLists.txt | 337 +++++++++++++++++------------------------- 1 file changed, 136 insertions(+), 201 deletions(-) diff --git a/respol/CMakeLists.txt b/respol/CMakeLists.txt index 45cd675c..d2624cef 100644 --- a/respol/CMakeLists.txt +++ b/respol/CMakeLists.txt @@ -1,214 +1,149 @@ -# Created by the script cgal_create_cmake_script -# This is the CMake script for compiling a CGAL application. +cmake_minimum_required(VERSION 3.14) + +project(Resultant_enumeration_example LANGUAGES CXX) + +# ================================ +# C++ Standard +# ================================ +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# ================================ +# Find Dependencies +# ================================ +find_package(CGAL REQUIRED) +find_package(Boost REQUIRED) + +# ================================ +# OPTIONS & CONFIGURATION +# ================================ +include(CMakeDependentOption) + +option(RESPOL_USE_FLAT_SET "use boost flat set to store normals" OFF) +option(RESPOL_USE_HASHED_DET "hash computed determinant minors" ON) + +CMAKE_DEPENDENT_OPTION(RESPOL_HASH_STATS "print hashed determinants statistics" OFF "RESPOL_USE_HASHED_DET" OFF) +CMAKE_DEPENDENT_OPTION(RESPOL_HASH_SORTED_INDICES "used sorted indices in hash" ON "RESPOL_USE_HASHED_DET" OFF) +CMAKE_DEPENDENT_OPTION(RESPOL_HASH_CLEAR "clear the hash when memory consumption is high" ON "RESPOL_USE_HASHED_DET" OFF) +CMAKE_DEPENDENT_OPTION(RESPOL_HASH_ONLY_CAYLEY "use hash only for determinants in Cayley space" ON "RESPOL_USE_HASHED_DET" OFF) +CMAKE_DEPENDENT_OPTION(RESPOL_HASH_DET_TIME "output determinant computation time" OFF "RESPOL_USE_HASHED_DET" OFF) + +option(RESPOL_VOL "compute volume of output polytope" ON) +option(RESPOL_EXTREME_SPECIALIZED_POINTS_ONLY "preprocess input" OFF) +option(RESPOL_BUILD_RANDOMIZED "build randomized version" OFF) +option(RESPOL_BUILD_CONVERTERS "build input converters" OFF) + +# ================================ +# PREPROCESSOR DEFINITIONS +# ================================ +add_compile_definitions(USE_HACKED_KERNEL_ORIENTATION) +add_compile_definitions(USE_HACKED_GAUSSIAN_ELIMINATION) + +if(RESPOL_USE_FLAT_SET) + add_compile_definitions(USE_BOOST_FLAT_SET) +endif() + +if(RESPOL_USE_HASHED_DET) + add_compile_definitions(USE_HASHED_DETERMINANTS) +else() + add_compile_definitions(USE_CGAL_DET) +endif() + +if(RESPOL_HASH_STATS) + add_compile_definitions(HASH_STATISTICS) +endif() + +if(RESPOL_HASH_SORTED_INDICES) + add_compile_definitions(USE_SORTED_INDICES) +endif() + +if(RESPOL_EXTREME_SPECIALIZED_POINTS_ONLY) + add_compile_definitions(USE_EXTREME_SPECIALIZED_POINTS_ONLY) +endif() + +if(NOT DEFINED RESPOL_HASH_CLEAR_DETS) + set(RESPOL_HASH_CLEAR_DETS 1000000 CACHE STRING "Clear hash when it stores this amount of determinants") +endif() +if(RESPOL_HASH_CLEAR) + add_compile_definitions(USE_CLEAR_DET_HASH) + add_compile_definitions(CLEAR_DET_NUMBER=${RESPOL_HASH_CLEAR_DETS}) +endif() + +if(RESPOL_HASH_ONLY_CAYLEY) + add_compile_definitions(USE_ONLY_CAYLEY_DET_HASH) +endif() -project( Resultant_enumeration_example ) +if(RESPOL_VOL) + add_compile_definitions(COMPUTE_VOL) +endif() -CMAKE_MINIMUM_REQUIRED(VERSION 2.4.5) +if(RESPOL_HASH_DET_TIME) + add_compile_definitions(LOG_DET_TIME) +endif() -if ( COMMAND cmake_policy ) - cmake_policy( SET CMP0005 NEW ) +# ================================ +# INCLUDE DIRECTORIES +# ================================ +include_directories( + ${CMAKE_SOURCE_DIR}/../external/triangulation/include + ${CMAKE_SOURCE_DIR}/../external/spatial_sorting/include + ${CMAKE_SOURCE_DIR}/../external/extreme_points_d/include + ${CMAKE_SOURCE_DIR}/../external/kernel_d/include + ${CMAKE_SOURCE_DIR}/../external + ${CMAKE_SOURCE_DIR}/../include + ${CMAKE_SOURCE_DIR}/../patches/include + ${CMAKE_SOURCE_DIR}/../external/leda/incl +) + +# ================================ +# LEDA (OPTIONAL) +# ================================ +find_library(LEDA_LIB NAMES libleda.a leda PATHS ${CMAKE_SOURCE_DIR}/../external/leda/) + +if(LEDA_LIB) + message(STATUS "Found LEDA: ${LEDA_LIB}") +else() + message(WARNING "LEDA not found. Building without LEDA support.") endif() -set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) - -find_package(CGAL QUIET COMPONENTS Core ) - -if ( CGAL_FOUND ) - - # COMPILATION OPTIONS - ###################################################################### - - include ( CMakeDependentOption ) - option ( RESPOL_USE_FLAT_SET "use boost flat set to store normals" OFF ) - option ( RESPOL_USE_HASHED_DET "hash computed determinant minors" ON ) - CMAKE_DEPENDENT_OPTION ( RESPOL_HASH_STATS - "print hashed determinants statistics" OFF - "RESPOL_USE_HASHED_DET" OFF ) - CMAKE_DEPENDENT_OPTION ( RESPOL_HASH_SORTED_INDICES - "used sorted indices in hash" ON - "RESPOL_USE_HASHED_DET" OFF ) - CMAKE_DEPENDENT_OPTION ( RESPOL_HASH_CLEAR - "clear the hash when memory consumption is high" ON - "RESPOL_USE_HASHED_DET" OFF ) - CMAKE_DEPENDENT_OPTION ( RESPOL_HASH_ONLY_CAYLEY - "use hash only for determinants in Cayley space" ON - "RESPOL_USE_HASHED_DET" OFF ) - option ( RESPOL_VOL "compute the volume of the output polytope" ON ) - CMAKE_DEPENDENT_OPTION ( RESPOL_HASH_DET_TIME - "output the determinant computation time" OFF - "RESPOL_USE_HASHED_DET" OFF ) - #option ( RESPOL_USE_LINBOX "use LinBox to compute determinants" OFF ) - #option ( RESPOL_USE_MAPLE "use Maple to check convex hulls" OFF ) - #set ( RESPOL_USE_MAPLE_EXEC - # "/opt/maple13/bin/maple" - # CACHE - # FILEPATH - # "path to Maple executable" ) - #option ( RESPOL_USE_LRS "use LRS to compute convex hulls" OFF ) - #CMAKE_DEPENDENT_OPTION ( RESPOL_LRS_DEBUG - # "show info about LRS execution" OFF - # "RESPOL_USE_LRS" OFF ) - #option ( RESPOL_USE_EIGEN "use Eigen to compute determinants" OFF ) - option ( RESPOL_EXTREME_SPECIALIZED_POINTS_ONLY "preprocess the input" OFF ) - option ( RESPOL_BUILD_RANDOMIZED "also build randomized init version" OFF ) - option ( RESPOL_BUILD_CONVERTERS "build input file converters" OFF ) - - # INCLUDES - ###################################################################### - - include( ${CGAL_USE_FILE} ) - include( CGAL_CreateSingleSourceCGALProgram ) - include_directories (BEFORE ../external/triangulation/include) - include_directories (BEFORE ../external/spatial_sorting/include) - include_directories (BEFORE ../external/extreme_points_d/include) - include_directories (BEFORE ../external/kernel_d/include) - include_directories (BEFORE ../external) - include_directories (BEFORE ../include) - include_directories (BEFORE ../external/leda/incl) - include_directories (BEFORE ../patches/include) - - # OTHER COMPILATION DEFINITIONS - ###################################################################### - - #add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_ORIENTATION_DET") - add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_HACKED_KERNEL_ORIENTATION") - #add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_HACKED_KERNEL_ORIENTATION_FOR_CONVEX_HULL") - add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_HACKED_GAUSSIAN_ELIMINATION") - #add_definitions(${CMAKE_CXX_FLAGS} "-DRESTRICTED_RES") - #add_definitions(${CMAKE_CXX_FLAGS} "-DRANDOM_RES") - - # CMAKE OPTIONS PROCESSING - ###################################################################### - - if( RESPOL_USE_FLAT_SET ) - add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_BOOST_FLAT_SET") - endif( RESPOL_USE_FLAT_SET ) - - if( RESPOL_USE_HASHED_DET ) - add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_HASHED_DETERMINANTS") - else( RESPOL_USE_HASHED_DET ) - add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_CGAL_DET") - endif( RESPOL_USE_HASHED_DET ) - - if( RESPOL_HASH_STATS ) - add_definitions(${CMAKE_CXX_FLAGS} "-DHASH_STATISTICS") - endif( RESPOL_HASH_STATS ) - - if( RESPOL_HASH_SORTED_INDICES ) - add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_SORTED_INDICES") - endif( RESPOL_HASH_SORTED_INDICES ) - - if( RESPOL_EXTREME_SPECIALIZED_POINTS_ONLY ) - add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_EXTREME_SPECIALIZED_POINTS_ONLY") - endif( RESPOL_EXTREME_SPECIALIZED_POINTS_ONLY ) - - # Set the default value of RESPOL_HASH_CLEAR_DETS or use the cached value - # if it exists. - if( RESPOL_HASH_CLEAR_DETS ) - set ( RESPOL_HASH_CLEAR_DETS ${RESPOL_HASH_CLEAR_DETS} CACHE INTERNAL - "cached setting of disabled option" ) - else( RESPOL_HASH_CLEAR_DETS ) - set ( RESPOL_HASH_CLEAR_DETS 1000000 CACHE INTERNAL "default setting" ) - endif( RESPOL_HASH_CLEAR_DETS ) - - if( RESPOL_HASH_CLEAR ) - add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_CLEAR_DET_HASH") - # This line makes this option visible in the GUI. - set ( RESPOL_HASH_CLEAR_DETS ${RESPOL_HASH_CLEAR_DETS} CACHE INTEGER - "clear the hash when it stores this amount of determinants" FORCE ) - add_definitions(${CMAKE_CXX_FLAGS} - "-DCLEAR_DET_NUMBER=${RESPOL_HASH_CLEAR_DETS}") - endif( RESPOL_HASH_CLEAR ) - - if( RESPOL_HASH_ONLY_CAYLEY ) - add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_ONLY_CAYLEY_DET_HASH") - endif( RESPOL_HASH_ONLY_CAYLEY ) - - if ( RESPOL_VOL ) - add_definitions(${CMAKE_CXX_FLAGS} "-DCOMPUTE_VOL") - endif ( RESPOL_VOL ) - - if( RESPOL_HASH_DET_TIME ) - add_definitions(${CMAKE_CXX_FLAGS} "-DLOG_DET_TIME") - endif( RESPOL_HASH_DET_TIME ) - - if( RESPOL_USE_LINBOX ) - # TODO: let the user choose these directories - include_directories (BEFORE /home/vissarion/src/LinBox/include) - include_directories (BEFORE /home/vissarion/src/linbox-1.2.0) - include_directories (BEFORE /home/vissarion/src/fflas-ffpack-1.4.1) - add_definitions(${CMAKE_CXX_FLAGS} "-DLinBoxSrcOnly") - add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_LINBOX_DET") - link_libraries("blas") - link_libraries("lapack") - link_libraries("givaro") - endif( RESPOL_USE_LINBOX ) - - if( RESPOL_USE_MAPLE ) - add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_MAPLE_CONVEX_HULL") - add_definitions(${CMAKE_CXX_FLAGS} - "-DMAPLE_EXECUTABLE=${RESPOL_USE_MAPLE_EXEC}") - endif( RESPOL_USE_MAPLE ) - - #if( RESPOL_USE_LRS ) - # add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_LRSLIB") - # add_definitions(${CMAKE_CXX_FLAGS} "-DSIGNALS") - # add_definitions(${CMAKE_CXX_FLAGS} "-DGMP") - # if ( ${CMAKE_SYSTEM_PROCESSOR} MATCHES ".*64.*" ) - # add_definitions(${CMAKE_CXX_FLAGS} "-DB64") - # endif ( ${CMAKE_SYSTEM_PROCESSOR} MATCHES ".*64.*" ) - # include_directories (BEFORE ../external/lrslib-042c/include) - # set ( RESPOL_AUX_PROGS "../external/lrslib-042c/include/lrslib.c" - # "../external/lrslib-042c/include/lrsgmp.c") - # create_single_source_cgal_program("test_lrs.cpp" ${RESPOL_AUX_PROGS}) - #endif( RESPOL_USE_LRS ) - - if ( RESPOL_USE_EIGEN ) - add_definitions(${CMAKE_CXX_FLAGS} "-DUSE_EIGEN_DET") - endif ( RESPOL_USE_EIGEN ) - - #if( RESPOL_LRS_DEBUG ) - # add_definitions(${CMAKE_CXX_FLAGS} "-DTIMES") - # add_definitions(${CMAKE_CXX_FLAGS} "-DLRS_DEBUG") - #endif( RESPOL_LRS_DEBUG ) - - if( RESPOL_BUILD_CONVERTERS ) - create_single_source_cgal_program("parse_input.cpp") - endif( RESPOL_BUILD_CONVERTERS ) - - if( RESPOL_BUILD_RANDOMIZED ) - create_single_source_cgal_program("res_enum_d_rand.cpp" ${RESPOL_AUX_PROGS}) - endif( RESPOL_BUILD_RANDOMIZED ) - - find_library(LEDA NAMES libleda.a PATHS ../external/leda/) - - if (NOT LEDA) - - message(FATAL_ERROR "This program requires the leda library, and will not be compiled.") - - else () - - message(STATUS "Library leda found: ${LEDA}") - link_libraries(${LEDA}) - - # COMPILATION - ###################################################################### - - create_single_source_cgal_program("res_enum_d.cpp" ${RESPOL_AUX_PROGS}) - create_single_source_cgal_program("test_suite.cpp") - #create_single_source_cgal_program("tropli_disc.cpp") - #create_single_source_cgal_program("compute_ch.cpp") - - enable_testing() - add_test(NAME test_suite COMMAND "test_suite") - set_tests_properties(test_suite PROPERTIES FAIL_REGULAR_EXPRESSION "FAIL") - endif() +# ================================ +# Helper Macro +# ================================ +macro(add_respol_executable target_name source_file) + add_executable(${target_name} ${source_file}) + target_link_libraries(${target_name} PRIVATE CGAL::CGAL Boost::boost) + if(LEDA_LIB) + target_link_libraries(${target_name} PRIVATE ${LEDA_LIB}) + endif() + +endmacro() + +# ================================ +# EXECUTABLES +# ================================ +if(LEDA_LIB) + add_respol_executable(res_enum_d res_enum_d.cpp) else() + message(WARNING "Skipping res_enum_d because LEDA is missing") +endif() - message(STATUS "This program requires the CGAL library, and will not be compiled.") +add_respol_executable(test_suite test_suite.cpp) +if(RESPOL_BUILD_RANDOMIZED) + add_respol_executable(res_enum_d_rand res_enum_d_rand.cpp) endif() + +if(RESPOL_BUILD_CONVERTERS) + add_respol_executable(parse_input parse_input.cpp) +endif() + +# ================================ +# TESTING +# ================================ +enable_testing() +add_test(NAME test_suite COMMAND test_suite) +set_tests_properties(test_suite PROPERTIES FAIL_REGULAR_EXPRESSION "FAIL")