-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
110 lines (88 loc) · 4.29 KB
/
CMakeLists.txt
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
103
104
105
106
107
108
109
110
cmake_minimum_required (VERSION 3.17)
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
# only adjust major and minor version - patch is taken from git commit number
project("libBioSmootherCpp" VERSION ${LIB_BIO_SMOOTHER_VERSION})
##############
# PARAMETERS #
##############
set(MAX_NUM_FILTER_ANNOTATIONS "3" CACHE STRING "The maximal number of filter annotations an index can hold.")
# disallow in-source builds
if("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}")
message(SEND_ERROR "In-source builds are not allowed.")
endif("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}")
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
# enable warnings (always good)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wall")
# throw error for undefined symbols
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined")
# Add -O0 to remove optimizations when using gcc
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
ENDIF(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
# Enable Link time optimization
include(CheckIPOSupported)
check_ipo_supported(RESULT supported OUTPUT error)
if( supported )
message(STATUS "IPO / LTO enabled")
set(INTERPROCEDURAL_OPTIMIZATION ON)
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# pybind11 lto is not working with clang
message(STATUS "disabeling pybind11 LTO for Clang")
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()
else()
message(STATUS "IPO / LTO not supported: <${error}>")
endif()
find_package (Python REQUIRED COMPONENTS Interpreter Development.Module)
# configure the version.h.in file
add_custom_target(
cm_config_version ALL
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/generated/inc/cm/"
COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/src/conf_version.h.in.py
"${CMAKE_CURRENT_SOURCE_DIR}/inc/cm/version.h.in"
"${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
"${CMAKE_BINARY_DIR}/generated/inc/cm/version.h"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
VERBATIM)
add_custom_target(
cm_config_build_time ALL
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/generated/inc/cm/"
COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/src/conf_build_time.h.in.py
"${CMAKE_CURRENT_SOURCE_DIR}/inc/cm/build_time.h.in"
"${CMAKE_BINARY_DIR}/generated/inc/cm/build_time.h"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
VERBATIM)
find_package(libsps REQUIRED PATHS ${Python_SITEARCH})
find_package(pybind11 REQUIRED PATHS ${Python_SITEARCH})
if(WITH_STXXL)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STXXL_CXX_FLAGS}")
endif(WITH_STXXL)
pybind11_add_module( libbiosmoothercpp src/main.cpp )
target_compile_definitions( libbiosmoothercpp PRIVATE MAX_NUM_FILTER_ANNOTATIONS=${MAX_NUM_FILTER_ANNOTATIONS} )
target_include_directories( libbiosmoothercpp PUBLIC inc )
target_include_directories( libbiosmoothercpp PUBLIC contrib/inc )
target_include_directories( libbiosmoothercpp PUBLIC ${CMAKE_BINARY_DIR}/generated/inc/ )
target_link_libraries( libbiosmoothercpp PRIVATE libsps )
if(WITH_STXXL)
target_include_directories( libbiosmoothercpp SYSTEM PRIVATE ${STXXL_INCLUDE_DIRS} )
target_link_libraries( libbiosmoothercpp PRIVATE stxxl )
endif(WITH_STXXL)
target_compile_definitions( libbiosmoothercpp PRIVATE WITH_PYTHON )
target_compile_definitions( libbiosmoothercpp PRIVATE CXX_COMPILER_ID="${CMAKE_CXX_COMPILER_ID}" )
add_dependencies( libbiosmoothercpp cm_config_version cm_config_build_time )
file(GLOB format_files
"inc/cm/*.h"
"src/*.cpp"
)
add_custom_target(format
COMMAND "clang-format" "-i" "--style=file" ${format_files}
COMMAND "black" "libbiosmoother/"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} VERBATIM)
# BUILD WHEEL
# https://wheel.readthedocs.io/en/stable/user_guide.html#building-wheels
# python -m pip install build
# python -m build --wheel