Skip to content

Commit 283e17f

Browse files
author
Sam Rensenhouse
committed
updated build to no longer need libpython so that we can build manylinux wheels
1 parent 9a926ae commit 283e17f

1 file changed

Lines changed: 80 additions & 77 deletions

File tree

owa-epanet/CMakeLists.txt

Lines changed: 80 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,100 +1,103 @@
11
cmake_minimum_required(VERSION 3.8)
22

3-
project(OWA-EPANET)
3+
project(owa-epanet)
44

55
if(SKBUILD)
66
message(STATUS "The project is built using scikit-build")
77
endif()
88

9-
find_package(PythonLibs 3 REQUIRED)
10-
find_package(PythonInterp ${PYTHONLIBS_VERSION_STRING} REQUIRED)
11-
# If find_package() has difficulty finding the appropriate python
12-
# directories and libraries (especially in Windows with multiple
13-
# versions of python) set them manually as in the next three lines
14-
# below (and comment out the above two find_package() lines):
15-
# set(PYTHON_EXECUTABLE "c:/python/python38/python.exe")
16-
# set(PYTHON_INCLUDE_PATH "c:/python/python38/include")
17-
# set(PYTHON_LIBRARIES "c:/python/python38/libs/python38.lib")
9+
# Setup python
10+
if(NOT MSVC)
11+
find_package (Python3 ${PYTHON_VERSION_STRING} COMPONENTS Interpreter Development.Module EXACT REQUIRED)
12+
else()
13+
find_package (Python3 ${PYTHON_VERSION_STRING} COMPONENTS Interpreter Development EXACT REQUIRED)
14+
endif()
1815

16+
# Setup swig
1917
find_package(SWIG REQUIRED)
18+
cmake_policy(SET CMP0078 NEW)
19+
cmake_policy(SET CMP0086 NEW)
2020
include(${SWIG_USE_FILE})
2121
set(CMAKE_SWIG_FLAGS -py3)
2222

2323
message("PYTHONLIBS_VERSION_STRING: ${PYTHONLIBS_VERSION_STRING}")
2424
message("CMAKE_SWIG_FLAGS: ${CMAKE_SWIG_FLAGS}")
2525

26-
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
27-
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
28-
INCLUDE_DIRECTORIES(EPANET/include)
29-
INCLUDE_DIRECTORIES(EPANET/src/outfile/include)
30-
31-
SET(CMAKE_SWIG_FLAGS "")
32-
33-
SET_SOURCE_FILES_PROPERTIES(toolkit.i PROPERTIES CPLUSPLUS ON)
34-
SET_SOURCE_FILES_PROPERTIES(toolkit.i PROPERTIES SWIG_FLAGS "-includeall")
35-
36-
37-
# build the EPANET library
26+
# Build the EPANET library
3827
ADD_SUBDIRECTORY(EPANET)
3928

40-
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
41-
42-
SWIG_ADD_LIBRARY( toolkit LANGUAGE python SOURCES wrapper/toolkit.i )
43-
set_property(SOURCE toolkit.i PROPERTY USE_LIBRARY_INCLUDE_DIRECTORIES TRUE)
44-
set_property(TARGET epanet2 PROPERTY SWIG_USE_TARGET_INCLUDE_DIRECTORIES TRUE)
45-
SWIG_LINK_LIBRARIES(toolkit epanet2)
29+
# Set up rpath on MacOS and Linux
30+
if(APPLE)
31+
set(PACKAGE_RPATH "@loader_path")
32+
else()
33+
set(PACKAGE_RPATH "$ORIGIN")
34+
endif()
4635

47-
SWIG_LINK_LIBRARIES(toolkit ${PYTHON_LIBRARIES})
48-
set_property(TARGET _toolkit PROPERTY INSTALL_RPATH "$ORIGIN")
4936

50-
#SWIG_ADD_LIBRARY( output LANGUAGE python SOURCES wrapper/output.i )
51-
#SET_PROPERTY( SOURCE output.i PROPERTY USE_LIBRARY_INCLUDE_DIRECTORIES TRUE )
52-
#SET_PROPERTY( TARGET epanet-output PROPERTY SWIG_USE_TARGET_INCLUDE_DIRECTORIES TRUE )
53-
#SWIG_LINK_LIBRARIES( output epanet-output)
54-
#SWIG_LINK_LIBRARIES( output ${PYTHON_LIBRARIES} )
55-
#SET_PROPERTY( TARGET _output PROPERTY INSTALL_RPATH "$ORIGIN" )
37+
# Include files for swig
38+
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
39+
INCLUDE_DIRECTORIES(EPANET/include)
40+
INCLUDE_DIRECTORIES(EPANET/src/outfile/include)
5641

57-
IF (APPLE)
58-
set_target_properties(_toolkit PROPERTIES INSTALL_RPATH "@loader_path")
59-
ENDIF (APPLE)
6042

61-
install(TARGETS _toolkit LIBRARY DESTINATION packages/epanet)
43+
# Allow target_include_directories to be used later
44+
set_property(SOURCE wrapper/toolkit.i
45+
PROPERTY
46+
USE_TARGET_INCLUDE_DIRECTORIES TRUE
47+
)
48+
set_property(TARGET epanet2
49+
PROPERTY
50+
USE_TARGET_INCLUDE_DIRECTORIES TRUE
51+
)
52+
53+
# Create cmake target
54+
swig_add_library(toolkit
55+
TYPE
56+
MODULE
57+
LANGUAGE
58+
python
59+
SOURCES
60+
wrapper/toolkit.i
61+
)
62+
63+
target_include_directories(toolkit
64+
PUBLIC
65+
${Python3_INCLUDE_DIRS}
66+
)
67+
68+
target_link_options(toolkit
69+
PUBLIC
70+
$<$<BOOL:${APPLE}>:-undefined dynamic_lookup>
71+
)
72+
73+
74+
75+
swig_link_libraries(toolkit
76+
PUBLIC
77+
$<$<BOOL:$<C_COMPILER_ID:MSVC>>:Python3::Module>
78+
epanet2
79+
)
80+
81+
set_target_properties(toolkit
82+
PROPERTIES
83+
SWIG_COMPILE_DEFINITIONS EXPORT_OUT_API
84+
MACOSX_RPATH TRUE
85+
SKIP_BUILD_RPATH FALSE
86+
BUILD_WITH_INSTALL_RPATH FALSE
87+
INSTALL_RPATH "${PACKAGE_RPATH}"
88+
INSTALL_RPATH_USE_LINK_PATH TRUE
89+
)
90+
91+
install(TARGETS toolkit LIBRARY DESTINATION packages/epanet)
6292

6393
add_custom_command(
64-
TARGET _toolkit POST_BUILD
65-
COMMAND ${CMAKE_COMMAND} -E copy
66-
${CMAKE_CURRENT_BINARY_DIR}/toolkit.py
67-
${CMAKE_CURRENT_BINARY_DIR}/../../../packages/epanet/toolkit.py)
68-
69-
IF(WIN32)
70-
add_custom_command(
71-
TARGET _toolkit POST_BUILD
72-
COMMAND ${CMAKE_COMMAND} -E copy
73-
${CMAKE_CURRENT_BINARY_DIR}/lib/_toolkit.pyd
74-
${CMAKE_CURRENT_BINARY_DIR}/../../../packages/epanet/_toolkit.pyd)
75-
add_custom_command(
76-
TARGET _toolkit POST_BUILD
77-
COMMAND ${CMAKE_COMMAND} -E copy
78-
${CMAKE_CURRENT_BINARY_DIR}/bin/epanet2.dll
79-
${CMAKE_CURRENT_BINARY_DIR}/../../../packages/epanet/epanet2.dll)
80-
ELSE(True)
81-
add_custom_command(
82-
TARGET _toolkit POST_BUILD
83-
COMMAND ${CMAKE_COMMAND} -E copy
84-
${CMAKE_CURRENT_BINARY_DIR}/lib/libepanet2.*
85-
${CMAKE_CURRENT_BINARY_DIR}/../../../packages/epanet/)
86-
ENDIF(WIN32)
87-
88-
89-
90-
#add_custom_command(
91-
# TARGET _toolkit POST_BUILD
92-
# COMMAND ${CMAKE_COMMAND} -E copy
93-
# ${CMAKE_CURRENT_BINARY_DIR}/output.py
94-
# ${CMAKE_CURRENT_BINARY_DIR}/../../../packages/epanet/output.py)
95-
96-
#add_custom_command(
97-
# TARGET _toolkit POST_BUILD
98-
# COMMAND ${CMAKE_COMMAND} -E copy
99-
# ${CMAKE_CURRENT_BINARY_DIR}/lib/libepanet-output.*
100-
# ${CMAKE_CURRENT_BINARY_DIR}/../../../packages/epanet/)
94+
TARGET toolkit
95+
POST_BUILD
96+
COMMAND ${CMAKE_COMMAND} -E copy
97+
"${CMAKE_CURRENT_BINARY_DIR}/toolkit.py"
98+
$<$<BOOL:${WIN32}>:${CMAKE_CURRENT_BINARY_DIR}/_toolkit.pyd>
99+
$<$<BOOL:${WIN32}>:${CMAKE_CURRENT_BINARY_DIR}/bin/epanet2.dll>
100+
$<$<NOT:$<BOOL:${WIN32}>>:${CMAKE_CURRENT_BINARY_DIR}/lib/libepanet2.*>
101+
${CMAKE_SOURCE_DIR}/packages/epanet
102+
)
103+

0 commit comments

Comments
 (0)