-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
114 lines (91 loc) · 3.69 KB
/
CMakeLists.txt
File metadata and controls
114 lines (91 loc) · 3.69 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
103
104
105
106
107
108
109
110
111
112
113
114
cmake_minimum_required (VERSION 3.14)
project (ExternalLibrary)
set(EXTERNAL_LANGUAGE "CPP" CACHE STRING "Language of the external functions")
set_property(CACHE EXTERNAL_LANGUAGE PROPERTY STRINGS CPP Python)
set(PYTHON_EXE CACHE FILEPATH "Python executable")
execute_process(
COMMAND ${PYTHON_EXE} "-c" "import os, sysconfig; print(sysconfig.get_config_var('installed_base').replace(os.sep, '/'))"
OUTPUT_VARIABLE PYTHON_INSTALLED_BASE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND ${PYTHON_EXE} "-c" "import sysconfig; print(sysconfig.get_config_var('py_version_nodot'))"
OUTPUT_VARIABLE PYTHON_VERSION_NODOT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND ${PYTHON_EXE} "-c" "import os, sysconfig; print(sysconfig.get_path('include').replace(os.sep, '/'))"
OUTPUT_VARIABLE PYTHON_INCLUDE_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
message(STATUS "PYTHON_INSTALLED_BASE: ${PYTHON_INSTALLED_BASE}")
message(STATUS "PYTHON_VERSION_NODOT: ${PYTHON_VERSION_NODOT}")
message(STATUS "PYTHON_INCLUDE_DIR: ${PYTHON_INCLUDE_DIR}")
if (MSVC)
# link statically against the the Visual C runtime
string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
string(REPLACE "/MDd" "/MTd" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
string(REPLACE "/MDd" "/MTd" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
# disable CRT deprecation warnings
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
endif ()
if (WIN32)
set(MODELICA_PLATFORM win)
elseif (APPLE)
set(MODELICA_PLATFORM darwin)
else ()
set(MODELICA_PLATFORM linux)
endif ()
if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
set (MODELICA_PLATFORM ${MODELICA_PLATFORM}64)
else ()
set (MODELICA_PLATFORM ${MODELICA_PLATFORM}32)
endif ()
set(SOURCE_FILES
ExternalLibrary/Resources/Include/ModelicaUtilityFunctions.h
C/include/ExternalLibrary.h
)
if ("${EXTERNAL_LANGUAGE}" STREQUAL "CPP")
set (SOURCE_FILES ${SOURCE_FILES} C/src/ExternalLibraryCPP.cpp)
else ()
set (SOURCE_FILES ${SOURCE_FILES} C/src/ExternalLibraryPython.c)
endif ()
add_library(ExternalLibrary SHARED ${SOURCE_FILES})
target_include_directories(ExternalLibrary PUBLIC
ExternalLibrary/Resources/Include
C/include
)
if ("${EXTERNAL_LANGUAGE}" STREQUAL "Python")
if (WIN32)
target_include_directories(ExternalLibrary PUBLIC ${PYTHON_INCLUDE_DIR})
target_link_libraries(ExternalLibrary ${PYTHON_INSTALLED_BASE}/libs/python${PYTHON_VERSION_NODOT}.lib)
set(CMAKE_SHARED_LINKER_FLAGS " /DELAYLOAD:python${PYTHON_VERSION_NODOT}.dll")
else ()
target_include_directories(ExternalLibrary PUBLIC /usr/include/python3.10)
endif ()
endif ()
SET_TARGET_PROPERTIES(ExternalLibrary PROPERTIES PREFIX "")
add_custom_command(TARGET ExternalLibrary POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy
"$<TARGET_FILE:ExternalLibrary>"
"${CMAKE_CURRENT_SOURCE_DIR}/ExternalLibrary/Resources/Library/${MODELICA_PLATFORM}/${CMAKE_SHARED_LIBRARY_PREFIX}ExternalLibrary${CMAKE_SHARED_LIBRARY_SUFFIX}"
)
add_executable(ExternalLibraryTest
C/tests/catch_amalgamated.hpp
C/tests/catch_amalgamated.cpp
C/tests/ExternalLibrary_test.cpp
)
target_compile_definitions(ExternalLibraryTest PUBLIC
DATA_FILE=\"${CMAKE_CURRENT_SOURCE_DIR}/ExternalLibrary/Resources/Data/data.txt\"
PYTHON_EXE=\"${PYTHON_EXE}\"
PYTHON_DLL=\"${PYTHON_INSTALLED_BASE}/python${PYTHON_VERSION_NODOT}.dll\"
# PYTHON_HOME=\"${PYTHON_HOME}\"
)
target_include_directories(ExternalLibraryTest PUBLIC
ExternalLibrary/Resources/Include
C/include
)
if (UNIX)
target_link_libraries(ExternalLibraryTest dl)
endif ()
add_dependencies(ExternalLibraryTest ExternalLibrary)