-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathCMakeLists.txt
138 lines (117 loc) · 5.56 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
cmake_minimum_required(VERSION 3.0)
project(rif)
message("============== CMAKE ==============================================================")
function(main)
message("-------------- CMAKE main ---------------------------------------------------------")
print_config()
add_subdirectory(external/pybind11)
# execute_process(COMMAND rm -f ${CMAKE_CURRENT_BINARY_DIR}/rif.gen.cpp)
build_python_bindings("")
build_gtests()
summary()
endfunction()
if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY)
message("CMAKE_LIBRARY_OUTPUT_DIRECTORY not defined, setting to .")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY .)
endif()
if(DEFINED BOOST_ROOT)
message("cmake: using BOOST_ROOT " ${BOOST_ROOT})
include_directories(${BOOST_ROOT}/include)
link_directories(${BOOST_ROOT}/lib)
else()
message("cmake: NOT using BOOST_ROOT")
endif()
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
message("cmake: using ccache ${CCACHE_PROGRAM}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
else()
message("cmake: not using ccache")
endif()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{CXXFLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DCXX11 -DCXX14")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} $ENV{LDFLAGS}")
if(${CMAKE_BUILD_TYPE} MATCHES "Release")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math") # eigen xform perf worse!!
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -funroll-loops")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
endif()
include_directories("external/include")
include_directories("src/rif")
include_directories("/usr/local/include")
include_directories("/opt/local/include")
link_directories("/usr/local/lib")
#link_directories("/opt/local/lib")
list(APPEND extra_libs boost_system)
list(APPEND extra_libs boost_iostreams)
function(print_config)
message("-------------- CMAKE print_config -------------------------------------------------")
message("cmake: CC: " $ENV{CC})
message("cmake: CXX: " $ENV{CXX})
message("cmake: CXXFLAGS: " $ENV{CXXFLAGS})
message("cmake: CMAKE_CXX_COMPILER: " ${CMAKE_CXX_COMPILER})
message("cmake: CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE})
message("cmake: CMAKE_CXX_FLAGS: " ${CMAKE_CXX_FLAGS})
message("cmake: extra_libs: " ${extra_libs})
message("cmake: CMAKE_OPTIONS: " $ENV{CMAKE_OPTIONS})
message("cmake: BOOST_ROOT: " $ENV{BOOST_ROOT})
message("PYTHON_EXECUTABLE: " ${PYTHON_EXECUTABLE})
endfunction()
function(make_any_missing__init__py_and_copy_py_to_liboutdir)
message("-------------- CMAKE make_any_missing__init__py_and_copy_py_to_liboutdir ----------")
execute_process(COMMAND python ${CMAKE_SOURCE_DIR}/tools/gen__init__.py src/rif
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} RESULT_VARIABLE STATUS)
if(NOT "${STATUS}" STREQUAL "0")
message(FATAL_ERROR "gen__init__.py failed: ${STATUS}")
endif()
execute_process(COMMAND python ${CMAKE_SOURCE_DIR}/tools/cp_filtered.py .py
${CMAKE_SOURCE_DIR}/src/rif ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/rif
RESULT_VARIABLE STATUS)
if(NOT "${STATUS}" STREQUAL "0")
message(FATAL_ERROR "cp_filtered.py failed: ${STATUS}")
endif()
endfunction()
function(build_python_bindings)
message("-------------- CMAKE build_python_bindings ----------------------------------------")
make_any_missing__init__py_and_copy_py_to_liboutdir()
set(SRCGEN ${CMAKE_SOURCE_DIR}/tools/pybind_source_gen.py)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/rif.gen.cpp COMMAND python ${SRCGEN} ${CMAKE_SOURCE_DIR}/src/rif ${CMAKE_CURRENT_BINARY_DIR} DEPENDS src/rif/rif.gen.cpp.jinja)
FILE(GLOB_RECURSE PY_CPP "./src/rif/[0-9a-zA-Z_]*.pybind.cpp")
pybind11_add_module(rif_cpp ${CMAKE_CURRENT_BINARY_DIR}/rif.gen.cpp ${PY_CPP})
target_link_libraries( rif_cpp PRIVATE ${extra_libs} )
endfunction()
function(build_gtests)
message("-------------- CMAKE build_gtests -------------------------------------------------")
add_subdirectory(external/googletest)
include_directories("external/googletest/include")
list(APPEND extra_libs gtest)
# shitty "data" files to compile faster TODO: remove these
list(APPEND LIB_CPP src/rif/rosetta/score/EtableParams_init.lib.cpp
src/rif/rosetta/atype_map.lib.cpp
src/rif/chem/ligand_factory.lib.cpp)
set_source_files_properties(${LIB_CPP} PROPERTIES COMPILE_FLAGS -O0)
add_library(rif_data ${LIB_CPP})
file(GLOB_RECURSE TEST_CPP "src/rif/[0-9a-zA-Z_]*.gtest.cpp")
add_executable(gtest_all src/rif/test/gtest_all.cpp ${TEST_CPP})
target_link_libraries(gtest_all rif_data ${extra_libs})
add_executable(gtest_wip src/rif/test/gtest_wip.cpp)
target_link_libraries(gtest_wip rif_data ${extra_libs})
endfunction()
function(summary)
message("-------------- CMAKE summary ------------------------------------------------------")
if(CCACHE_PROGRAM)
message("cmake: add_custom_target: ccache -s")
add_custom_target(ccache_stats ALL
COMMAND ${CCACHE_PROGRAM} -s
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMENT "!!!!!!!!!!!!!!!!!!!! getting ccache stats !!!!!!!!!!!!!!!!!!!!!!!!!!"
DEPENDS rif_cpp gtest_all
)
endif()
endfunction()
main()
message("============== CMAKE DONE =========================================================")