diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fcc82a2322a232bb9b27ea9ff73116aabc6b523f..0ed5c2dcfcda51d85c228dad863138a2ac1832dc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,7 +18,7 @@ build-intel: - export LD_LIBRARY_PATH=$I_MPI_ROOT/lib/:$I_MPI_ROOT/lib/release:$MKLROOT/lib/intel64:$INTEL_COMP_ROOT/lib/:$INTEL_COMP_ROOT/compiler/lib/intel64/:$LD_LIBRARY_PATH:$HOME/intel/oneapi/intelpython/latest/lib/:$HOME/intel/oneapi/intelpython/latest/lib/python3.7 - export PYTHONPATH=$HOME/intel/oneapi/intelpython/latest/lib/python3.7/site-packages/:sissopp_env/lib/python3.7/site-packages/ - export PATH=$INTEL_COMP_ROOT/bin/:$INTEL_COMP_ROOT/bin/intel64:$I_MPI_ROOT/bin:$PATH - - cmake -C ../cmake/toolchains/intel_param_py.cmake ../ + - cmake -C ../cmake/toolchains/intel_param_py.cmake -DBUILD_TESTS=ON ../ - make - make install - cd ../ @@ -105,7 +105,7 @@ build-gnu: - export PYTHONPATH=$HOME/intel/oneapi/intelpython/latest/lib/python3.7/site-packages/:sissopp_env/lib/python3.7/site-packages/ - mkdir build_gcc/ - cd build_gcc/ - - cmake -C ../cmake/toolchains/gnu_param_py.cmake ../ + - cmake -C ../cmake/toolchains/gnu_param_py.cmake -DBUILD_TESTS=ON ../ - make - make install - cd ../ diff --git a/CMakeLists.txt b/CMakeLists.txt index a7f423765350f3601bc78d5af3759287c184f268..5556a11ebcf31ec43c2c34de73100facebd670c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,24 +21,33 @@ set(CMAKE_CXX_EXTENSIONS OFF) # compiler options option(EXTERNAL_BOOST "Use an external boost library" OFF) -option(USE_PYTHON "Whether to compile with python binding support" ON) -option(USE_PARAMS "If true use non-linear parameterization" OFF) +option(BUILD_PYTHON "Whether to compile with python binding support" ON) +option(BUILD_PARAMS "If true use non-linear parameterization" OFF) +option(BUILD_TESTS "Whether to compile with python binding support" OFF) -if(USE_PARAMS) - message(STATUS "USE_PARAMS True") +if(BUILD_PARAMS) + message(STATUS "BUILD_PARAMS True") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPARAMETERIZE") - set(USE_PARAMS TRUE) -else(USE_PARAMS) - message(STATUS "USE_PARAMS False") - set(USE_PARAMS FALSE) + set(BUILD_PARAMS TRUE) +else(BUILD_PARAMS) + message(STATUS "BUILD_PARAMS False") + set(BUILD_PARAMS FALSE) endif() -if(USE_PYTHON) - message(STATUS "USE PYTHON True") - set(USE_PYTHON TRUE) -else(USE_PYTHON) - message(STATUS "USE PYTHON False") - set(USE_PYTHON FALSE) +if(BUILD_PYTHON) + message(STATUS "BUILD_PYTHON True") + set(BUILD_PYTHON TRUE) +else(BUILD_PYTHON) + message(STATUS "BUILD_PYTHON False") + set(BUILD_PYTHON FALSE) +endif() + +if(BUILD_TESTS) + message(STATUS "Building tests") + set(BUILD_TESTS TRUE) +else(BUILD_TESTS) + message(STATUS "Not building tests") + set(BUILD_TESTS FALSE) endif() if(EXTERNAL_BOOST) @@ -61,7 +70,7 @@ if (OPENMP_FOUND) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") endif(OPENMP_FOUND) -if(USE_PYTHON) +if(BUILD_PYTHON) # Check python settings find_package(PythonInterp 3 REQUIRED) execute_process( @@ -144,7 +153,7 @@ if(EXTERNAL_BOOST) find_package(Boost REQUIRED COMPONENTS filesystem system mpi serialization) set(Boost_LIBS ${Boost_LIBRARIES}) - if(USE_PYTHON) + if(BUILD_PYTHON) if(${Boost_VERSION} VERSION_LESS 106700) find_package(Boost ${NEEDED_Boost_VERSION} REQUIRED COMPONENTS python3 numpy3) else() @@ -217,7 +226,7 @@ else(EXTERNAL_BOOST) endif() message(STATUS "building boost with toolset: ${Boost_TOOLSET}") set(Boost_CONFIGURE_COMMAND bash ${CMAKE_CURRENT_LIST_DIR}/cmake/boost/boost_configure.sh ${Boost_INSTALL_DIR} ${Boost_TOOLSET} ${Boost_LIBRARY_DIRS}) - if(USE_PYTHON) + if(BUILD_PYTHON) set(Boost_CONFIGURE_COMMAND ${Boost_CONFIGURE_COMMAND} ${PYTHON_VERSION} ${PYTHON_PREFIX} ${PYTHON_INCLUDE_PATH} ${PYTHON_LIBDIR}) endif() @@ -262,7 +271,7 @@ else(EXTERNAL_BOOST) list(APPEND Boost_LIBRARIES ${Boost_LIBRARY_DIRS}/${Boost_LIBRARY_PREFIX}boost_serialization${Boost_LIBRARY_SUFFIX}) list(APPEND Boost_LIBRARIES ${Boost_LIBRARY_DIRS}/${Boost_LIBRARY_PREFIX}boost_system${Boost_LIBRARY_SUFFIX}) list(APPEND Boost_LIBRARIES ${Boost_LIBRARY_DIRS}/${Boost_LIBRARY_PREFIX}boost_filesystem${Boost_LIBRARY_SUFFIX}) - if(USE_PYTHON) + if(BUILD_PYTHON) add_library( boost::python${BOOST_PYTHON_VERSION} SHARED IMPORTED ) set_property( TARGET boost::python${BOOST_PYTHON_VERSION} PROPERTY IMPORTED_LOCATION ${Boost_LIBRARY_DIRS}/${Boost_LIBRARY_PREFIX}boost_python${BOOST_PYTHON_VERSION}${Boost_LIBRARY_SUFFIX} ) set_property( TARGET boost::python${BOOST_PYTHON_VERSION} PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIRS} ) @@ -295,7 +304,7 @@ get_filename_component(LAPACK_DIR ${LAPACK_LIBRARY} DIRECTORY) message(STATUS "LAPACK_LIBRARIES = ${LAPACK_LIBRARIES}") -if(USE_PYTHON) +if(BUILD_PYTHON) foreach(LIB ${LAPACK_LIBRARIES}) get_filename_component(LAPACK_FILE ${LIB} NAME) list(APPEND PYTHON_LAPACK_LIBRARIES ${LAPACK_FILE}) @@ -362,25 +371,27 @@ ExternalProject_Add( set(COIN_CLP_LIBRARIES "${COIN_CLP_LIBRARY_DIRS}/libClp.so;${COIN_CLP_LIBRARY_DIRS}/libCoinUtils.so") include_directories(${COIN_CLP_INCLUDE_DIRS}) -find_package(GTest) -if(NOT GTEST_FOUND) - set(GTEST_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/external/gtest/build/") - set(GTEST_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/external/gtest/bin/") - set(GTEST_INCLUDE_DIRS "${GTEST_INSTALL_DIR}/include") - set(GTEST_LIBRARY_DIRS "${CMAKE_CURRENT_LIST_DIR}/lib/gtest/") - - ExternalProject_Add( - external_gtest - PREFIX "external/gtest" - GIT_REPOSITORY "https://github.com/google/googletest.git" - GIT_TAG "v1.10.x" - CMAKE_ARGS "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER};-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER};-DCMAKE_INSTALL_PREFIX=${GTEST_INSTALL_DIR};-DCMAKE_INSTALL_LIBDIR=${GTEST_LIBRARY_DIRS};-DBUILD_SHARED_LIBS=ON;" - BINARY_DIR "${GTEST_BUILD_DIR}" - INSTALL_DIR "${GTEST_INSTALL_DIR}" - ) - set(GTEST_BOTH_LIBRARIES "${GTEST_LIBRARY_DIRS}/libgtest.so;${GTEST_LIBRARY_DIRS}/libgtest_main.so;${GTEST_LIBRARY_DIRS}/libgmock.so;${GTEST_LIBRARY_DIRS}/libgmock_main.so") +if(BUILD_TESTS) + find_package(GTest) + if(NOT GTEST_FOUND) + set(GTEST_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/external/gtest/build/") + set(GTEST_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/external/gtest/bin/") + set(GTEST_INCLUDE_DIRS "${GTEST_INSTALL_DIR}/include") + set(GTEST_LIBRARY_DIRS "${CMAKE_CURRENT_LIST_DIR}/lib/gtest/") + + ExternalProject_Add( + external_gtest + PREFIX "external/gtest" + GIT_REPOSITORY "https://github.com/google/googletest.git" + GIT_TAG "v1.10.x" + CMAKE_ARGS "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER};-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER};-DCMAKE_INSTALL_PREFIX=${GTEST_INSTALL_DIR};-DCMAKE_INSTALL_LIBDIR=${GTEST_LIBRARY_DIRS};-DBUILD_SHARED_LIBS=ON;" + BINARY_DIR "${GTEST_BUILD_DIR}" + INSTALL_DIR "${GTEST_INSTALL_DIR}" + ) + set(GTEST_BOTH_LIBRARIES "${GTEST_LIBRARY_DIRS}/libgtest.so;${GTEST_LIBRARY_DIRS}/libgtest_main.so;${GTEST_LIBRARY_DIRS}/libgmock.so;${GTEST_LIBRARY_DIRS}/libgmock_main.so") + endif() + include_directories(${GTEST_INCLUDE_DIRS}) endif() -include_directories(${GTEST_INCLUDE_DIRS}) set(FMT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/external/fmt/build/") set(FMT_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/external/fmt/bin/") @@ -402,4 +413,7 @@ message(STATUS "FMT_LIBRARIES: ${FMT_LIBRARIES}") include_directories(${CMAKE_CURRENT_LIST_DIR}/src) add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/src) -add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/tests/googletest/) + +if(BUILD_TESTS) + add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/tests/googletest/) +endif() diff --git a/README.md b/README.md index 4f1880ef15d6784d27cedfb29ec5fbc33701811c..b2d66feeb41bb12e79fcf9db5286feb0fc166253 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ set(CMAKE_CXX_FLAGS "-O2" CACHE STRING "") ################# # Feature Flags # ################# -set(USE_PYTHON ON CACHE BOOL "") +set(BUILD_PYTHON ON CACHE BOOL "") set(EXTERNAL_BOOST OFF CACHE BOOL "") ``` Here the `-O2` flag is for optimizations, it is recommended to stay as `-O2` or `-O3`, but it can be changed to match compiler requirements. @@ -64,7 +64,7 @@ make install Once all the commands are run `sisso++` should be in the `~/cpp_sisso/main directory/bin/` directory. ### Install `_sisso` -To install the python bindings first ensure your python path matches the path used to configure `boost` and then repeat the same commands as above but set `USE_PYTHON` in `initial_config.cmake` to `ON`. +To install the python bindings first ensure your python path matches the path used to configure `boost` and then repeat the same commands as above but set `BUILD_PYTHON` in `initial_config.cmake` to `ON`. Once installed you should have access to the python interface via `import cpp_sisso`. diff --git a/cmake/toolchains/gnu_base.cmake b/cmake/toolchains/gnu_base.cmake index cc2df6b5ec11b5803e7ff1867ab4e5e87b8fa3d2..b99c14b3b28ef1baf7f05703441e6014e9f08f31 100644 --- a/cmake/toolchains/gnu_base.cmake +++ b/cmake/toolchains/gnu_base.cmake @@ -8,5 +8,5 @@ set(CMAKE_CXX_FLAGS "-O3 -march=native" CACHE STRING "") ################# # Feature Flags # ################# -set(USE_PARAMS OFF CACHE BOOL "") -set(USE_PYTHON OFF CACHE BOOL "") +set(BUILD_PARAMS OFF CACHE BOOL "") +set(BUILD_PYTHON OFF CACHE BOOL "") diff --git a/cmake/toolchains/gnu_param.cmake b/cmake/toolchains/gnu_param.cmake index a83410f57cdcf6e8647aca171b691e22677e41c7..5a9e4937f9dbd341a5a7d23e5866cac2bee87c5f 100644 --- a/cmake/toolchains/gnu_param.cmake +++ b/cmake/toolchains/gnu_param.cmake @@ -8,5 +8,5 @@ set(CMAKE_CXX_FLAGS "-O3 -march=native" CACHE STRING "") ################# # Feature Flags # ################# -set(USE_PYTHON OFF CACHE BOOL "") -set(USE_PARAMS ON CACHE BOOL "") +set(BUILD_PYTHON OFF CACHE BOOL "") +set(BUILD_PARAMS ON CACHE BOOL "") diff --git a/cmake/toolchains/gnu_param_py.cmake b/cmake/toolchains/gnu_param_py.cmake index 9c07e6463058e5df5bb2a655fb764be9ef14e177..4f09990cacf4d26cd445440e16474631617f46c2 100644 --- a/cmake/toolchains/gnu_param_py.cmake +++ b/cmake/toolchains/gnu_param_py.cmake @@ -8,5 +8,5 @@ set(CMAKE_CXX_FLAGS "-O3 -march=native" CACHE STRING "") ################# # Feature Flags # ################# -set(USE_PYTHON ON CACHE BOOL "") -set(USE_PARAMS ON CACHE BOOL "") +set(BUILD_PYTHON ON CACHE BOOL "") +set(BUILD_PARAMS ON CACHE BOOL "") diff --git a/cmake/toolchains/gnu_py.cmake b/cmake/toolchains/gnu_py.cmake index 38fb700dcfda2915b9c2e19289ef7cfa92b06f3e..3cf38dd59635118bb31309347797989b837f3a82 100644 --- a/cmake/toolchains/gnu_py.cmake +++ b/cmake/toolchains/gnu_py.cmake @@ -8,5 +8,5 @@ set(CMAKE_CXX_FLAGS "-O3 -march=native" CACHE STRING "") ################# # Feature Flags # ################# -set(USE_PARAMS OFF CACHE BOOL "") -set(USE_PYTHON ON CACHE BOOL "") +set(BUILD_PARAMS OFF CACHE BOOL "") +set(BUILD_PYTHON ON CACHE BOOL "") diff --git a/cmake/toolchains/intel_base.cmake b/cmake/toolchains/intel_base.cmake index 4d7336a6dd2e40c12e1dc7df03806a08403c5f84..84930b386dc8fa86848bd3b3505ab419ca830915 100644 --- a/cmake/toolchains/intel_base.cmake +++ b/cmake/toolchains/intel_base.cmake @@ -8,6 +8,6 @@ set(CMAKE_CXX_FLAGS "-O3 -xhost" CACHE STRING "") ################# # Feature Flags # ################# -set(USE_PARAMS OFF CACHE BOOL "") -set(USE_PYTHON OFF CACHE BOOL "") +set(BUILD_PARAMS OFF CACHE BOOL "") +set(BUILD_PYTHON OFF CACHE BOOL "") diff --git a/cmake/toolchains/intel_param.cmake b/cmake/toolchains/intel_param.cmake index 66e01cbf46fda085c43c8eab4b86c3b996e117aa..a1e5fc24064fed683c7b667fdc3c93176634255e 100644 --- a/cmake/toolchains/intel_param.cmake +++ b/cmake/toolchains/intel_param.cmake @@ -8,6 +8,6 @@ set(CMAKE_CXX_FLAGS "-O3 -xhost" CACHE STRING "") ################# # Feature Flags # ################# -set(USE_PARAMS ON CACHE BOOL "") -set(USE_PYTHON OFF CACHE BOOL "") +set(BUILD_PARAMS ON CACHE BOOL "") +set(BUILD_PYTHON OFF CACHE BOOL "") set(EXTERNAL_BOOST OFF CACHE BOOL "") diff --git a/cmake/toolchains/intel_param_py.cmake b/cmake/toolchains/intel_param_py.cmake index 3b88a27cba789fef2ef0d555e9fdb71221f57d74..07a20b7281e51dd7e377383ea5b2adb14f8e5a10 100644 --- a/cmake/toolchains/intel_param_py.cmake +++ b/cmake/toolchains/intel_param_py.cmake @@ -8,6 +8,6 @@ set(CMAKE_CXX_FLAGS "-O3 -xhost" CACHE STRING "") ################# # Feature Flags # ################# -set(USE_PARAMS ON CACHE BOOL "") -set(USE_PYTHON ON CACHE BOOL "") +set(BUILD_PARAMS ON CACHE BOOL "") +set(BUILD_PYTHON ON CACHE BOOL "") diff --git a/cmake/toolchains/intel_py.cmake b/cmake/toolchains/intel_py.cmake index 419538c4975326ee9a0d09b1c07c2dde157f3856..36932d7deeccabca4abb9973d5d52ae7aa22baea 100644 --- a/cmake/toolchains/intel_py.cmake +++ b/cmake/toolchains/intel_py.cmake @@ -8,6 +8,6 @@ set(CMAKE_CXX_FLAGS "-O3 -xhost" CACHE STRING "") ################# # Feature Flags # ################# -set(USE_PARAMS OFF CACHE BOOL "") -set(USE_PYTHON ON CACHE BOOL "") +set(BUILD_PARAMS OFF CACHE BOOL "") +set(BUILD_PYTHON ON CACHE BOOL "") set(EXTERNAL_BOOST OFF CACHE BOOL "") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 28ba57bfeb4c5534e6b291b27b07e2dbcaf5e696..9e10ecf9cb9c765641069c666ec00d819d48c41f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -11,7 +11,7 @@ file(GLOB_RECURSE NOT_SISSOPP_SOURCES python/*.cpp) list(REMOVE_ITEM SISSOPP_SOURCES ${NOT_SISSOPP_SOURCES}) list(REMOVE_ITEM SISSOPP_SOURCES ${CMAKE_CURRENT_LIST_DIR}/main.cpp) -if(NOT USE_PARAMS) +if(NOT BUILD_PARAMS) file(GLOB_RECURSE NOT_SISSOPP_SOURCES */parameterize*.cpp) list(REMOVE_ITEM SISSOPP_SOURCES ${NOT_SISSOPP_SOURCES}) @@ -47,7 +47,7 @@ set_target_properties(sisso++ target_link_libraries(sisso++ libsisso ${LAPACK_LIBRARIES} ${MPI_LIBRARIES} -Wl,--rpath=${Boost_LIB_DIR} -Wl,--rpath=${LAPACK_DIR} ${Boost_LIBRARIES} ${COIN_CLP_LIBRARIES} ${NLOPT_LIBRARIES} ${OPENMP_LIBRARIES} ${FMT_LIBRARIES}) install(TARGETS sisso++ DESTINATION ${CMAKE_CURRENT_LIST_DIR}/../bin/) -if(USE_PYTHON) +if(BUILD_PYTHON) include(${CMAKE_CURRENT_LIST_DIR}/../cmake/TransferDocStrings.cmake) set(CMAKE_INSTALL_RPATH ${PYTHON_PREFIX}/lib/;${Boost_LIBRARY_DIRS};${LAPACK_DIR};${MPI_DIR};${COIN_CLP_LIBRARY_DIRS};${NLOPT_LIBRARY_DIRS};${COIN_UTILS_LIBRARY_DIRS};${CMAKE_CURRENT_LIST_DIR}/../lib/;${PYTHON_INSTDIR}/cpp_sisso/;${FMT_LIBRARY_DIRS}) @@ -57,7 +57,7 @@ if(USE_PYTHON) file(GLOB_RECURSE SISSOLIB_SOURCES ${CMAKE_CURRENT_LIST_DIR}/python/*cpp) list(REMOVE_ITEM SISSOLIB_SOURCES ${CMAKE_CURRENT_LIST_DIR}/main.cpp) list(REMOVE_ITEM SISSOLIB_SOURCES ${CMAKE_CURRENT_LIST_DIR}/python/bindings_docstring_keyed.cpp) - if(NOT USE_PARAMS) + if(NOT BUILD_PARAMS) file(GLOB_RECURSE NOT_SISSOLIB_SOURCES */parameterize*.cpp) list(REMOVE_ITEM SISSOLIB_SOURCES ${NOT_SISSOLIB_SOURCES}) list(REMOVE_ITEM SISSOLIB_SOURCES ${CMAKE_CURRENT_LIST_DIR}/feature_creation/node/operator_nodes/allowed_parameter_ops.cpp) @@ -99,7 +99,7 @@ endif() if(NOT EXTERNAL_BOOST) add_dependencies(sisso++ external_boost) - if(USE_PYTHON) + if(BUILD_PYTHON) add_dependencies(_sisso external_boost) endif() endif() diff --git a/tests/googletest/CMakeLists.txt b/tests/googletest/CMakeLists.txt index a1675e225c43a6c63b76ba6e93154379cbe169c7..5f9bde1bab30bd1e4d2215421927130b8c6274db 100644 --- a/tests/googletest/CMakeLists.txt +++ b/tests/googletest/CMakeLists.txt @@ -1,7 +1,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations") set(CMAKE_INSTALL_RPATH ${Boost_LIBRARY_DIRS};${LAPACK_DIR};${MPI_DIR};${COIN_CLP_LIBRARY_DIRS};${COIN_UTILS_LIBRARY_DIRS};${GTEST_LIBRARY_DIRS};${NLOPT_LIBRARY_DIRS};${FMT_LIBRARY_DIRS};${CMAKE_CURRENT_LIST_DIR}/../../lib/) -file(GLOB_RECURSE SISSO_TEST_SOURCES *.cc) +file(GLOB_RECURSE SISSO_TEST_SOURCES feature_creation/*.cc) add_executable(sisso_test ${SISSO_TEST_SOURCES}) set_target_properties(sisso_test