123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- cmake_minimum_required(VERSION 3.15)
- project(scattnlay VERSION 2.3)
- cmake_host_system_information(RESULT HOSTNAME QUERY HOSTNAME)
- message("Build type is: ${CMAKE_BUILD_TYPE}")
- message("Host OS System: ${CMAKE_HOST_SYSTEM}")
- message("Hostname: ${HOSTNAME}")
- message("CMake version: ${CMAKE_VERSION}")
- # Select flags.
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
- set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g ")
- set(CMAKE_CXX_FLAGS_RELEASE "-O3")
- set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
- set(CMAKE_CXX_STANDARD 17)
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
- set(CMAKE_CXX_EXTENSIONS OFF)
- add_compile_options(-W -Wall -pedantic -Werror)
- add_compile_options(-funroll-loops -fstrict-aliasing)
- # compiler details
- message(" C++ Compiler: ${CMAKE_CXX_COMPILER_ID} "
- "${CMAKE_CXX_COMPILER_VERSION} "
- "${CMAKE_CXX_COMPILER_WRAPPER}")
- # installation details
- message(" Installation prefix: ${CMAKE_INSTALL_PREFIX}")
- # Find Boost
- set(BOOSTROOT $ENV{BOOST_DIR})
- if (USE_STATIC_LIBRARIES)
- set(Boost_USE_STATIC_LIBS ON)
- endif ()
- set(Boost_USE_MULTITHREADED OFF)
- set(Boost_USE_STATIC_RUNTIME OFF)
- find_package(Boost)
- # Set options
- option(ENABLE_MP "Use multiple precision" OFF)
- if (Boost_FOUND)
- if (${ENABLE_MP})
- add_compile_options(-DMULTI_PRECISION=100)
- endif ()
- if (Boost_INCLUDE_DIRS)
- if (${Boost_VERSION} VERSION_LESS 1.60.0)
- message(FATAL_ERROR
- "Found Boost library is too old; required is version 1.60.0 or newer!")
- endif ()
- message("Found Boost include dir: ${Boost_INCLUDE_DIR}")
- message("Found Boost library dir: ${Boost_LIBRARY_DIR}")
- message("Found Boost libraries: ${Boost_LIBRARIES}")
- include_directories(${Boost_INCLUDE_DIRS})
- endif ()
- endif()
- #Find Python, NumPy and PyBind11
- find_package(Python COMPONENTS Interpreter Development)
- include_directories(${Python_INCLUDE_DIRS})
- message("Python_EXECUTABLE: ${Python_EXECUTABLE}")
- message("Python_FOUND: ${Python_FOUND}")
- message("Python_VERSION: ${Python_VERSION}")
- message("Python_Development_FOUND: ${Python_Development_FOUND}")
- message("Python_LIBRARIES: ${Python_LIBRARIES}")
- message("Python_INCLUDE_DIRS: ${Python_INCLUDE_DIRS}")
- # Ensure that numpy is installed and read its include dir
- exec_program(${Python_EXECUTABLE}
- ARGS "-c \"import numpy; print(numpy.get_include())\""
- OUTPUT_VARIABLE NUMPY_INCLUDE_DIR
- RETURN_VALUE NUMPY_NOT_FOUND
- )
- if (NUMPY_NOT_FOUND)
- message(FATAL_ERROR "NumPy headers not found")
- endif ()
- # Ensure that pybind11 is installed and read its include dir
- exec_program(${Python_EXECUTABLE}
- ARGS "-c \"import pybind11; print(pybind11.get_include())\""
- OUTPUT_VARIABLE PYBIND11_INCLUDE_DIR
- RETURN_VALUE PYBIND11_NOT_FOUND
- )
- if (PYBIND11_NOT_FOUND)
- message(FATAL_ERROR "PyBind11 headers not found")
- endif ()
- # Determine correct extension suffix
- exec_program(${Python_EXECUTABLE}
- ARGS "-c \"import distutils.sysconfig; print(distutils.sysconfig.get_config_var('EXT_SUFFIX'))\""
- OUTPUT_VARIABLE EXT_SUFFIX
- RETURN_VALUE SUFFIX_NOT_FOUND
- )
- if (SUFFIX_NOT_FOUND)
- message(FATAL_ERROR "Extension suffix not found")
- endif ()
- #include_directories(src)
- add_subdirectory(src)
- add_subdirectory(examples)
- #
- # Copy all python scripts to the build directory.
- #
- set(Python_SCRIPTS scattnlay/__init__.py scattnlay/main.py)
- foreach (_script ${Python_SCRIPTS})
- configure_file(
- ${PROJECT_SOURCE_DIR}/${_script}
- ${PROJECT_BINARY_DIR}/${_script}
- COPYONLY
- )
- endforeach ()
- enable_testing()
- add_subdirectory(tests)
|