-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCMakeLists.txt
61 lines (49 loc) · 1.83 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
cmake_minimum_required(VERSION 3.17.2...3.29)
project(${SKBUILD_PROJECT_NAME} LANGUAGES C Fortran)
find_package(
Python 3.8
COMPONENTS Interpreter Development.Embed Development.Module NumPy
REQUIRED)
set(CMAKE_VERBOSE_MAKEFILE ON)
# F2PY headers
execute_process(
COMMAND "${PYTHON_EXECUTABLE}" -c
"import numpy.f2py; print(numpy.f2py.get_include())"
OUTPUT_VARIABLE F2PY_INCLUDE_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE)
add_library(fortranobject OBJECT "${F2PY_INCLUDE_DIR}/fortranobject.c")
target_link_libraries(fortranobject PUBLIC Python::NumPy)
target_include_directories(fortranobject PUBLIC "${F2PY_INCLUDE_DIR}")
set_property(TARGET fortranobject PROPERTY POSITION_INDEPENDENT_CODE ON)
set(fortran_src_file "${CMAKE_BINARY_DIR}/src/calc11/calc11.f90")
# Generate param11.in file in cmake build directory
file(READ ${CMAKE_SOURCE_DIR}/src/calc11/param11.i.in CONTENTS)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/src/calc11/param11.i ${CONTENTS})
add_subdirectory(src)
file(GLOB includes ${CMAKE_SOURCE_DIR}"/src/calc11/*.i")
add_custom_command(
OUTPUT calc11module.c calc11-f2pywrappers.f calc11-f2pywrappers2.f90
DEPENDS ${includes}
VERBATIM
COMMAND "${Python_EXECUTABLE}" -m numpy.f2py
"${fortran_src_file}" -m calc11 --lower
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
python_add_library(
calc11
MODULE
"${CMAKE_CURRENT_BINARY_DIR}/calc11-f2pywrappers2.f90"
"${CMAKE_CURRENT_BINARY_DIR}/calc11-f2pywrappers.f"
"${CMAKE_CURRENT_BINARY_DIR}/calc11module.c"
"${fortran_src_file}"
WITH_SOABI)
target_link_libraries(calc11 PRIVATE fortranobject)
if ("${SKBUILD_STATE}" STREQUAL "editable")
set(build_dest "${CMAKE_SOURCE_DIR}/src/pycalc11")
else()
set(build_dest ${SKBUILD_PROJECT_NAME})
endif()
install(
TARGETS calc11
DESTINATION ${build_dest}
)