Skip to content

Commit de3d4ae

Browse files
committed
searching libs via cmake
1 parent b4ab954 commit de3d4ae

File tree

20 files changed

+364
-344
lines changed

20 files changed

+364
-344
lines changed

CMakeLists.txt

Lines changed: 11 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,22 @@ set(CMAKE_VERBOSE_MAKEFILE on)
66
set(Python_FIND_VIRTUALENV FIRST)
77
set(Python_FIND_STRATEGY LOCATION)
88

9-
find_package(Python REQUIRED COMPONENTS Interpreter Development NumPy)
10-
119
add_library(${TARGET_NAME} SHARED ${ALL_SRC})
1210

1311
foreach(FOLDER_NAME IN ITEMS layer0 layer1 layer2 layer3 layer4 layer5 ov)
1412
include(${CMAKE_CURRENT_SOURCE_DIR}/${FOLDER_NAME}/sources.cmake)
1513
endforeach()
1614

17-
target_link_options(${TARGET_NAME} PRIVATE
18-
"$<$<PLATFORM_ID:Darwin>:LINKER:-undefined,dynamic_lookup>"
19-
)
15+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
16+
include(Helpers)
17+
include(Dependencies)
18+
# Darwin, Windows, Linux
19+
include(platform/${CMAKE_SYSTEM_NAME})
20+
# MSVC, GCC, Clang
21+
include(compiler/${CMAKE_CXX_COMPILER_FRONTEND_VARIANT})
2022

2123
target_compile_options(${TARGET_NAME} PRIVATE
22-
${ALL_COMP_ARGS}
23-
24-
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:
25-
-Werror=return-type
26-
-Wunused-variable
27-
-Wno-switch
28-
-Wno-narrowing
29-
-Wno-char-subscripts
30-
$<$<CONFIG:Debug>:-Og>
31-
$<$<NOT:$<CONFIG:Debug>>:-O3>
32-
>
33-
$<$<CXX_COMPILER_ID:MSVC>:/MP>
34-
$<$<CXX_COMPILER_ID:MSVC>:/std:c++17>
35-
$<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:MSVC>>:/Z7>
36-
37-
# optimization currently causes a clang segfault on OS X 10.9 when
38-
# compiling layer2/RepCylBond.cpp
39-
$<$<PLATFORM_ID:Darwin>:-fno-strict-aliasing>
24+
${PYMOL_COMPILE_OPTIONS}
4025
)
4126

4227
execute_process(
@@ -45,23 +30,6 @@ execute_process(
4530
OUTPUT_STRIP_TRAILING_WHITESPACE
4631
)
4732

48-
function(set_output_path lib path)
49-
set_target_properties(${lib} PROPERTIES
50-
PREFIX ""
51-
SUFFIX "${PYTHON_MODULE_SUFFIX}"
52-
OUTPUT_NAME "${lib}"
53-
LIBRARY_OUTPUT_DIRECTORY "${path}"
54-
RUNTIME_OUTPUT_DIRECTORY "${path}"
55-
)
56-
57-
foreach(CONFIG IN ITEMS RELEASE DEBUG RELWITHDEBINFO MINSIZEREL)
58-
set_target_properties(${lib} PROPERTIES
59-
LIBRARY_OUTPUT_DIRECTORY_${CONFIG} "${path}"
60-
RUNTIME_OUTPUT_DIRECTORY_${CONFIG} "${path}"
61-
)
62-
endforeach()
63-
endfunction()
64-
6533
set_output_path(${TARGET_NAME} "${Python_SITEARCH}/pymol")
6634

6735
target_compile_features(${TARGET_NAME} PRIVATE cxx_std_17)
@@ -72,31 +40,16 @@ target_include_directories(${TARGET_NAME} PUBLIC
7240
${ALL_INC_DIR}
7341
${Python_INCLUDE_DIRS}
7442
${Python_NumPy_INCLUDE_DIRS}
43+
${PYMOL_INC_DIRS}
7544
)
7645

77-
target_link_directories(${TARGET_NAME} PUBLIC
78-
${ALL_LIB_DIR}
79-
$<$<CXX_COMPILER_ID:MSVC>:${Python_LIBRARY_DIRS}>
80-
)
8146
target_link_libraries(${TARGET_NAME}
82-
${ALL_LIB}
83-
${ALL_EXT_LINK}
84-
# pyconfig.py forces linking against pythonXY.lib on MSVC
85-
$<$<CXX_COMPILER_ID:MSVC>:${Python_LIBRARIES}>
86-
$<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:MSVC>>:/DEBUG>
47+
${PYMOL_LIBS}
8748
)
8849

8950
target_compile_definitions(${TARGET_NAME} PUBLIC
90-
${ALL_DEF}
91-
_PYMOL_LIBPNG
92-
_PYMOL_FREETYPE
51+
${PYMOL_DEF_MACROS}
9352
_PYMOL_NUMPY
94-
$<$<CXX_COMPILER_ID:MSVC>:WIN32>
95-
$<$<PLATFORM_ID:Darwin>:PYMOL_CURVE_VALIDATE>
96-
97-
# bounds checking in STL containers
98-
# if DEBUG and not Windows compiler
99-
$<$<AND:$<CONFIG:Debug>,$<NOT:$<CXX_COMPILER_ID:MSVC>>>:_GLIBCXX_ASSERTIONS>
10053
)
10154

10255
add_subdirectory(contrib/champ)

cmake/Dependencies.cmake

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
include_guard()
2+
3+
set(PYMOL_DEF_MACROS "")
4+
set(PYMOL_INC_DIRS "")
5+
set(PYMOL_LIBS "")
6+
set(PYMOL_COMPILE_OPTIONS "")
7+
8+
if(DEFINED ENV{CONDA_PREFIX})
9+
10+
set(CONDA_PREFIX $ENV{CONDA_PREFIX})
11+
message(STATUS "Found Conda prefix: ${CONDA_PREFIX}")
12+
13+
if(WIN32)
14+
set(CONDA_LIBRARY_DIR ${CONDA_PREFIX}/Library/lib)
15+
set(CONDA_INCLUDE_DIR ${CONDA_PREFIX}/Library/include)
16+
set(CONDA_CMAKE_DIR ${CONDA_PREFIX}/Library/lib/cmake)
17+
else()
18+
set(CONDA_LIBRARY_DIR ${CONDA_PREFIX}/lib)
19+
set(CONDA_INCLUDE_DIR ${CONDA_PREFIX}/include)
20+
set(CONDA_CMAKE_DIR ${CONDA_PREFIX}/lib/cmake)
21+
endif()
22+
23+
list(APPEND CMAKE_PREFIX_PATH ${CONDA_PREFIX} ${CONDA_CMAKE_DIR})
24+
list(APPEND CMAKE_LIBRARY_PATH ${CONDA_LIBRARY_DIR})
25+
list(APPEND CMAKE_INCLUDE_PATH ${CONDA_INCLUDE_DIR})
26+
27+
endif()
28+
29+
find_package(Python REQUIRED COMPONENTS Interpreter Development NumPy)
30+
include(dependencies/Freetype)
31+
include(dependencies/Png)
32+
33+
include(dependencies/GL)
34+
if(PYMOL_LIBXML2)
35+
include(dependencies/XML2)
36+
endif()
37+
if(PYMOL_USE_OPENMP)
38+
include(dependencies/OpenMP)
39+
endif()
40+
if(PYMOL_TESTING)
41+
include(dependencies/Testing)
42+
endif()
43+
if(PYMOL_OPENVR)
44+
include(dependencies/OpenVR)
45+
endif()
46+
if(PYMOL_VMD_PLUGINS)
47+
include(dependencies/VMDPlugins)
48+
endif()
49+
if(PYMOL_USE_VTKM)
50+
include(dependencies/VTKM)
51+
endif()
52+
if(PYMOL_USE_MSGPACKC)
53+
include(dependencies/MsgPack)
54+
else()
55+
list(APPEND PYMOL_DEF_MACROS "_PYMOL_NO_MSGPACKC")
56+
endif()

cmake/Helpers.cmake

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
include_guard()
2+
3+
function(set_output_path lib path)
4+
set_target_properties(${lib} PROPERTIES
5+
PREFIX ""
6+
SUFFIX "${PYTHON_MODULE_SUFFIX}"
7+
OUTPUT_NAME "${lib}"
8+
LIBRARY_OUTPUT_DIRECTORY "${path}"
9+
RUNTIME_OUTPUT_DIRECTORY "${path}"
10+
)
11+
12+
foreach(CONFIG IN ITEMS RELEASE DEBUG RELWITHDEBINFO MINSIZEREL)
13+
set_target_properties(${lib} PROPERTIES
14+
LIBRARY_OUTPUT_DIRECTORY_${CONFIG} "${path}"
15+
RUNTIME_OUTPUT_DIRECTORY_${CONFIG} "${path}"
16+
)
17+
endforeach()
18+
endfunction()
19+

cmake/dependencies/Freetype.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
find_package(Freetype REQUIRED)
2+
3+
list(APPEND PYMOL_LIBS Freetype::Freetype)
4+
list(APPEND PYMOL_DEF_MACROS "_PYMOL_FREETYPE")

cmake/dependencies/GL.cmake

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
if(NOT GLUT)
2+
list(APPEND PYMOL_DEF_MACROS "_PYMOL_NO_MAIN")
3+
endif()
4+
5+
find_package(GLEW REQUIRED)
6+
list(APPEND PYMOL_LIBS GLEW::GLEW)
7+
8+
if(APPLE)
9+
if(PYMOL_OSX_FRAMEWORKS)
10+
list(APPEND PYMOL_LINK_OPTIONS "-framework OpenGL")
11+
if(GLUT)
12+
list(APPEND PYMOL_LINK_OPTIONS "-framework GLUT")
13+
endif()
14+
list(APPEND PYMOL_DEF_MACROS "_PYMOL_OSX")
15+
else()
16+
list(APPEND PYMOL_LIBS "GL")
17+
if(GLUT)
18+
list(APPEND PYMOL_LIBS "glut")
19+
endif()
20+
endif()
21+
22+
elseif(WIN32)
23+
list(APPEND PYMOL_LIBS "Advapi32" "Ws2_32" "glew32" "opengl32")
24+
25+
if(PYMOL_GLUT)
26+
list(APPEND PYMOL_LIBS "freeglut")
27+
endif()
28+
29+
else()
30+
list(APPEND PYMOL_LIBS "GL")
31+
if(GLUT)
32+
list(APPEND PYMOL_LIBS "glut")
33+
endif()
34+
endif()

cmake/dependencies/MsgPack.cmake

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
if(USE_MSGPACKC STREQUAL "C++11")
2+
list(APPEND PYMOL_DEF_MACROS "MMTF_MSGPACK_USE_CPP11" "MSGPACK_NO_BOOST")
3+
find_path(MSGPACK_CXX_INCLUDE_DIR NAMES msgpack.hpp)
4+
list(APPEND PYMOL_INC_DIRS ${MSGPACK_CXX_INCLUDE_DIR})
5+
6+
else()
7+
find_path(MSGPACK_INCLUDE_DIR NAMES msgpack.h)
8+
find_library(MSGPACK_LIBRARY NAMES msgpack msgpackc msgpack-c)
9+
10+
list(APPEND PYMOL_INC_DIRS ${MSGPACK_INCLUDE_DIR})
11+
list(APPEND PYMOL_LIBS ${MSGPACK_LIBRARY})
12+
13+
endif()
14+
15+
include(${PROJECT_SOURCE_DIR}/contrib/mmtf-c/sources.cmake)

cmake/dependencies/OpenMP.cmake

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
find_package(OpenMP)
2+
list(APPEND PYMOL_DEF_MACROS "PYMOL_OPENMP")
3+
4+
if(OpenMP_C_FOUND)
5+
list(APPEND PYMOL_COMPILE_OPTIONS_C ${OpenMP_C_FLAGS})
6+
list(APPEND PYMOL_LIBS ${OpenMP_C_LIBRARIES})
7+
endif()
8+
9+
if(OpenMP_CXX_FOUND)
10+
list(APPEND PYMOL_COMPILE_OPTIONS_CXX ${OpenMP_CXX_FLAGS})
11+
if(OpenMP_CXX_LIBRARIES AND NOT OpenMP_CXX_LIBRARIES STREQUAL
12+
OpenMP_C_LIBRARIES)
13+
list(APPEND PYMOL_LIBS ${OpenMP_CXX_LIBRARIES})
14+
endif()
15+
endif()
16+
17+
if(APPLE)
18+
list(APPEND PYMOL_COMPILE_OPTIONS "-Xpreprocessor" "-fopenmp")
19+
list(APPEND PYMOL_LIBS "omp")
20+
21+
elseif(WIN32)
22+
list(APPEND PYMOL_COMPILE_OPTIONS "/openmp")
23+
24+
else()
25+
list(APPEND PYMOL_COMPILE_OPTIONS "-fopenmp")
26+
list(APPEND PYMOL_LINK_OPTIONS "-fopenmp")
27+
28+
endif()

cmake/dependencies/OpenVR.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
find_package(OpenVR REQUIRED)
2+
3+
include(${PROJECT_SOURCE_DIR}/contrib/vr/sources.cmake)
4+
list(APPEND PYMOL_LIBS OpenVR::OpenVR)
5+
list(APPEND PYMOL_DEF_MACROS "_PYMOL_OPENVR")

cmake/dependencies/Optians.cmake

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
option(PYMOL_GLUT "Disable GLUT" OFF)
2+
option(PYMOL_LIBXML2 "Enable LIBXML2 support" OFF)
3+
option(PYMOL_OSX_FRAMEWORKS "Enable XQuartz instead of native frameworks" ON)
4+
option(PYMOL_USE_OPENMP "Enable OpenMP support" ON)
5+
option(PYMOL_TESTING "Build C-level tests" OFF)
6+
option(PYMOL_OPENVR "Enable openvr support" OFF)
7+
option(PYMOL_VMD_PLUGINS "Disable VMD molfile plugins (libnetcdf dependency)"
8+
ON)
9+
option(PYMOL_USE_VTKM "Use VTK-m for isosurface generation" OFF)
10+
option(
11+
PYMOL_USE_MSGPACKC
12+
"c++11: use msgpack-c header-only library; c: link against shared library; no: disable fast MMTF load support"
13+
ON)

cmake/dependencies/Png.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
find_package(PNG REQUIRED)
2+
3+
list(APPEND PYMOL_LIBS PNG::PNG)
4+
list(APPEND PYMOL_DEF_MACROS "_PYMOL_LIBPNG")

0 commit comments

Comments
 (0)