-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
102 lines (82 loc) · 2.96 KB
/
CMakeLists.txt
File metadata and controls
102 lines (82 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
cmake_minimum_required(VERSION 3.15...4.3)
project(hopsy LANGUAGES CXX)
include(FetchContent)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if(MSVC)
# Check for both ARM64 and the "experimental" ARM64EC
if(CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64" OR CMAKE_GENERATOR_PLATFORM MATCHES "ARM64")
message(STATUS "Forcing Little Endian for Windows ARM64 build")
add_compile_options(/DPCG_LITTLE_ENDIAN=1)
add_compile_definitions(PCG_LITTLE_ENDIAN=1)
endif()
endif()
option(USE_SYSTEM_EIGEN "Use system Eigen" OFF)
option(HOPSY_NO_EIGEN_VECTORIZE "Disable Eigen vectorization" OFF)
if(HOPSY_NO_EIGEN_VECTORIZE)
add_compile_definitions(EIGEN_DONT_VECTORIZE)
endif()
if(USE_SYSTEM_EIGEN)
find_package(Eigen3 3.4 REQUIRED NO_MODULE)
get_target_property(_eigen_inc Eigen3::Eigen INTERFACE_INCLUDE_DIRECTORIES)
set(EIGEN3_INCLUDE_DIR "${_eigen_inc}" CACHE PATH "Eigen3 include dir" FORCE)
else()
FetchContent_Declare(
eigen3
GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
GIT_TAG 3.4.0
GIT_SHALLOW TRUE
# Populate only. Do not add Eigen's own CMake project.
SOURCE_SUBDIR __unused__
)
FetchContent_MakeAvailable(eigen3)
# extern/hops still expects this cache variable via its legacy FindEigen3.cmake
set(EIGEN3_INCLUDE_DIR "${eigen3_SOURCE_DIR}" CACHE PATH "Eigen3 include dir" FORCE)
# Provide a modern imported target for this project
if(NOT TARGET Eigen3::Eigen)
add_library(Eigen3::Eigen INTERFACE IMPORTED)
set_target_properties(Eigen3::Eigen PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${EIGEN3_INCLUDE_DIR}"
)
endif()
endif()
set(HOPS_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/extern/hops/include/hops")
set(HOPS_LIBRARY_TYPE STATIC CACHE STRING "use static library" FORCE)
set(HOPS_BUILD_NATIVE OFF CACHE BOOL "")
set(HOPS_BINARIES OFF CACHE BOOL "")
set(HOPS_TUNING ON CACHE BOOL "")
set(HOPS_EXAMPLES OFF CACHE BOOL "" FORCE)
set(HOPS_TESTS OFF CACHE BOOL "" FORCE)
set(HOPS_MPI OFF CACHE BOOL "" FORCE)
set(HOPS_OPENMP OFF CACHE BOOL "" FORCE)
set(HOPS_GUROBI OFF CACHE BOOL "" FORCE)
set(HOPS_DNEST4_SUPPORT OFF CACHE BOOL "" FORCE)
set(HOPS_NO_INSTALL ON CACHE BOOL "" FORCE)
set(EVENT__DISABLE_TESTS ON CACHE BOOL "" FORCE)
add_subdirectory(extern/hops)
find_package(pybind11 CONFIG REQUIRED)
pybind11_add_module(core
src/hopsy/hopsy.cpp
src/hopsy/doc.cpp
)
target_link_libraries(core PRIVATE
hops
pybind11::module
Eigen3::Eigen
)
# Treat Eigen headers as system headers to reduce warning noise
target_include_directories(core
SYSTEM PRIVATE
"${EIGEN3_INCLUDE_DIR}"
PRIVATE
"${HOPS_INCLUDE_DIR}"
)
target_compile_definitions(core PRIVATE
HOPS_WITHIN_HOPSY
BUILD_INFO="${HOPSY_BUILD_INFO}"
VERSION_INFO="${HOPSY_VERSION_INFO}"
$<$<CONFIG:Debug>:IS_DEBUG>
)
install(TARGETS core DESTINATION hopsy)