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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
|
###############################################################################
#
#
#
# Description : CMake build script for compiling and linking the
# python bindings
# Original author(s): Frank Bergmann <fbergman@caltech.edu>
# Organization : California Institute of Technology
#
# This file is supposed to be called by buildPython32.bat / buildPython64.bat
#
###############################################################################
cmake_minimum_required(VERSION 2.8...3.19)
project(_libsbml)
include (CMakeTestCCompiler)
include (CheckCSourceCompiles)
include (CheckCXXSourceCompiles)
include (CheckStructHasMember)
include (CheckLibraryExists)
include (CheckFunctionExists)
include (CheckCCompilerFlag)
include (CheckCSourceRuns)
include (CheckSymbolExists)
include (CheckTypeSize)
find_package(PythonInterp REQUIRED)
# determine the library path and include path
# for the given interpreter
get_filename_component(path "${PYTHON_EXECUTABLE}" PATH)
file(GLOB python_lib "${path}/libs/python*.lib")
set(PYTHON_LIBRARY ${python_lib})
set(PYTHON_INCLUDE_DIR ${path}/include)
find_package(PythonLibs REQUIRED)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../swig)
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
include_directories(${CMAKE_SOURCE_DIR}/../../../win32/include)
else()
include_directories(${CMAKE_SOURCE_DIR}/../../../win64/include)
endif()
include_directories(${PYTHON_INCLUDE_DIRS})
include_directories(${DEP_DIR}/include)
add_definitions(-DUSE_COMP
-DUSE_FBC
-DUSE_QUAL
-DUSE_LAYOUT
-DUSE_MULTI
-DUSE_GROUPS
-DUSE_RENDER
-DUSE_L3V2EXTENDEDMATH
)
# set build type default
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: None (CMAKE_CXX_FLAGS or CMAKE_C_FLAGS are used), Debug, Release, RelWithDebInfo, MinSizeRel" FORCE )
###############################################################################
#
# Set up remaining variables, add option for universal binaries
#
set(BUILD_DEFINITIONS)
if(UNIX)
if(APPLE)
add_definitions(-DMACOSX)
set(BUILD_DEFINITIONS "${BUILD_DEFINITIONS} -DMACOSX")
# On OSX it is common to build universal binaries to support multiple
# processor architectures. The default behavior is not to build
# multiple architectures, as most users might not need that.
option(ENABLE_UNIVERSAL "Create Universal Binaries" OFF)
set(CMAKE_OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}" CACHE STRING "A semicolon separated list of build architectures to be used")
if(ENABLE_UNIVERSAL)
# if universal binaries are requested and none defined so far
# overwrite them with all three common architectures. If the user
# specified their own list of architectures do not touch!
if (CMAKE_OSX_ARCHITECTURES STREQUAL "")
set(CMAKE_OSX_ARCHITECTURES "i386;ppc;x86_64" CACHE STRING "A semicolon separated list of build architectures to be used" FORCE)
endif()
endif(ENABLE_UNIVERSAL)
else(APPLE)
add_definitions(-DLINUX)
if (NOT CYGWIN)
# on cygwin all code is position independent so -fPIC is not needed
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing -fPIC")
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-strict-aliasing -fPIC")
endif()
set(BUILD_DEFINITIONS "${BUILD_DEFINITIONS} -DLINUX")
endif(APPLE)
add_definitions( -DPACKAGE_VERSION=\"${PACKAGE_VERSION}\" -DPACKAGE_NAME=\"${PROJECT_NAME}\")
set(BUILD_DEFINITIONS "${BUILD_DEFINITIONS} -DPACKAGE_VERSION=\"${PACKAGE_VERSION}\" -DPACKAGE_NAME=\"${PROJECT_NAME}\"")
else(UNIX)
add_definitions(-DWIN32 -DLIBSBML_EXPORTS -DLIBLAX_EXPORTS)
set(BUILD_DEFINITIONS "${BUILD_DEFINITIONS} -DWIN32 -DLIBSBML_EXPORTS -DLIBLAX_EXPORTS")
if(MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
set(BUILD_DEFINITIONS "${BUILD_DEFINITIONS} -D_CRT_SECURE_NO_WARNINGS")
option(WITH_STATIC_RUNTIME "Compile using the static MSVC Runtime" OFF)
if (NOT WITHOUT_STATIC_RUNTIME)
foreach(flag_var
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
if(${flag_var} MATCHES "/MD")
string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
endif(${flag_var} MATCHES "/MD")
endforeach(flag_var)
add_definitions( -D_MT)
endif(NOT WITHOUT_STATIC_RUNTIME)
file(GLOB WIN32_BINARIES ${CMAKE_SOURCE_DIR}/dependencies/bin/*.dll)
INSTALL(FILES ${WIN32_BINARIES} DESTINATION bin)
elseif(CYGWIN)
add_definitions(-DCYGWIN)
set(BUILD_DEFINITIONS "${BUILD_DEFINITIONS} -DCYGWIN")
elseif(MINGW)
if(WITH_LIBXML)
# this is necessary to build with libxml2 on mingw
add_definitions(-DLIBXML_STATIC)
endif(WITH_LIBXML)
endif(MSVC)
endif(UNIX)
set(LIB_PATH)
if (CMAKE_SIZEOF_VOID_P EQUAL 4)
set(LIB_PATH "${CMAKE_SOURCE_DIR}/../../../win32/lib")
else()
set(LIB_PATH "${CMAKE_SOURCE_DIR}/../../../win64/lib")
endif()
find_library(SBML_LIBRARY
NAMES libsbml-static.lib
PATHS ${LIB_PATH} ${DEP_DIR}/lib
)
find_library(XML_LIBRARY
NAMES libxml2.lib
PATHS ${LIB_PATH} ${DEP_DIR}/lib
)
find_library(ICONV_LIBRARY
NAMES libiconv.lib iconv.lib
PATHS ${LIB_PATH} ${DEP_DIR}/lib
)
find_library(BZ2_LIBRARY
NAMES libbz2.lib bzip2.lib
PATHS ${LIB_PATH} ${DEP_DIR}/lib
)
find_library(ZLIB_LIBRARY
NAMES zdll.lib zlib.lib
PATHS ${LIB_PATH} ${DEP_DIR}/lib
)
if (MSVC)
add_definitions(/bigobj)
endif()
set(LIBS
${LIBS} ${SBML_LIBRARY}
${XML_LIBRARY} ${ICONV_LIBRARY}
${BZ2_LIBRARY} ${ZLIB_LIBRARY}
${PYTHON_LIBRARIES}
)
# remove additional list for python3
foreach(lib ${LIBS})
get_filename_component(name "${lib}" NAME)
string(TOLOWER "${name}" lower)
if ("${lower}" STREQUAL "python3.lib" OR "${lower}" MATCHES "_d.lib$" )
list(REMOVE_ITEM LIBS "${lib}")
endif()
endforeach()
add_library(binding_python_lib SHARED libsbml_wrap.cpp)
set_target_properties (binding_python_lib PROPERTIES OUTPUT_NAME "_libsbml")
if (UNIX)
set_target_properties (binding_python_lib PROPERTIES PREFIX "")
set_target_properties (binding_python_lib PROPERTIES SUFFIX ".so")
else()
if (CYGWIN)
set_target_properties (binding_python_lib PROPERTIES PREFIX "")
set_target_properties (binding_python_lib PROPERTIES SUFFIX ".dll")
else()
set(LIBS ${LIBS} ws2_32.lib)
set_target_properties (binding_python_lib PROPERTIES SUFFIX ".pyd")
endif()
endif()
target_link_libraries(binding_python_lib ${LIBS} ws2_32.lib)
|