You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
279 lines
9.5 KiB
279 lines
9.5 KiB
cmake_minimum_required (VERSION 2.8.6)
|
|
|
|
# Set project name
|
|
project (glpk CXX C)
|
|
|
|
# Add the resources/cmake folder to Module Search Path for FindMySQL.cmake
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/resources/")
|
|
|
|
# Add base folder for better inclusion paths
|
|
include_directories("${PROJECT_SOURCE_DIR}")
|
|
include_directories("${PROJECT_SOURCE_DIR}/src")
|
|
include_directories("${PROJECT_SOURCE_DIR}/src/amd")
|
|
include_directories("${PROJECT_SOURCE_DIR}/src/bflib")
|
|
include_directories("${PROJECT_SOURCE_DIR}/src/cglib")
|
|
include_directories("${PROJECT_SOURCE_DIR}/src/colamd")
|
|
include_directories("${PROJECT_SOURCE_DIR}/src/env")
|
|
include_directories("${PROJECT_SOURCE_DIR}/src/minisat")
|
|
include_directories("${PROJECT_SOURCE_DIR}/src/misc")
|
|
include_directories("${PROJECT_SOURCE_DIR}/src/proxy")
|
|
include_directories("${PROJECT_SOURCE_DIR}/src/zlib")
|
|
|
|
#############################################################
|
|
##
|
|
## CMake options of GLPK
|
|
##
|
|
#############################################################
|
|
option(WITH_GLPK_EXAMPLES "Also build examples and standalone executables" OFF)
|
|
option(WITH_GMP "Use GNU MO bignum library" OFF)
|
|
option(ENABLE_DL "Enable shared library support" OFF)
|
|
option(ENABLE_ODBC "Enable MathProg ODBC support" OFF)
|
|
option(ENABLE_MYSQL "Enable MathProg MySQL support" OFF)
|
|
option(DEBUG "Sets whether the DEBUG mode is used" OFF)
|
|
set(ADDITIONAL_INCLUDE_DIRS "" CACHE STRING "Additional directories added to the include directories.")
|
|
set(ADDITIONAL_LINK_DIRS "" CACHE STRING "Additional directories added to the link directories.")
|
|
|
|
# If the DEBUG option was turned on, we will target a debug version and a release version otherwise
|
|
if (DEBUG)
|
|
set (CMAKE_BUILD_TYPE "DEBUG")
|
|
else()
|
|
set (CMAKE_BUILD_TYPE "RELEASE")
|
|
endif()
|
|
message(STATUS "GLPK - Building ${CMAKE_BUILD_TYPE} version.")
|
|
message(STATUS "GLPK - CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
|
|
message(STATUS "GLPK - CMAKE_BUILD_TYPE (ENV): $ENV{CMAKE_BUILD_TYPE}")
|
|
|
|
|
|
#############################################################
|
|
##
|
|
## Compiler specific settings and definitions
|
|
##
|
|
#############################################################
|
|
|
|
if(CMAKE_COMPILER_IS_GNUCC)
|
|
message(STATUS "GLPK - Using Compiler Configuration: GCC")
|
|
# Set standard flags for GCC
|
|
set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -Wno-return-type")
|
|
add_definitions(-DHAVE_CONFIG_H=1)
|
|
elseif(MSVC)
|
|
message(STATUS "GLPK - Using Compiler Configuration: MSVC")
|
|
add_definitions(/D_SCL_SECURE_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS)
|
|
add_definitions(/D_VARIADIC_MAX=10)
|
|
add_definitions(/DNOMINMAX)
|
|
add_definitions(/DHAVE_CONFIG_H=1)
|
|
else(CLANG)
|
|
message(STATUS "GLPK - Using Compiler Configuration: Clang (LLVM)")
|
|
# As CLANG is not set as a variable, we need to set it in case we have not matched another compiler.
|
|
set (CLANG ON)
|
|
# Set standard flags for clang
|
|
set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -funroll-loops -O3")
|
|
|
|
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-return-type -Wno-return-type-c-linkage -Wno-unused-variable")
|
|
|
|
set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g")
|
|
add_definitions(-DHAVE_CONFIG_H=1)
|
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -version-info=37:0:1 -export-symbols-regex='^glp_*'")
|
|
endif()
|
|
|
|
#############################################################
|
|
##
|
|
## CMake-generated Config File for GLPK
|
|
##
|
|
#############################################################
|
|
include(CheckIncludeFiles)
|
|
include(CheckFunctionExists)
|
|
CHECK_INCLUDE_FILES(sys/time.h HAVE_SYS_TIME_H)
|
|
CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
|
|
CHECK_INCLUDE_FILES(ltdl.h HAVE_LTDL)
|
|
CHECK_INCLUDE_FILES(dlfcn.h HAVE_DLFCN)
|
|
if(WITH_GMP)
|
|
message(STATUS "GLPK - Building with GMP Support")
|
|
CHECK_INCLUDE_FILE(gmp.h HAVE_GMP_H)
|
|
if (NOT HAVE_GMP_H)
|
|
message(SEND_ERROR "Could not find gmp.h!")
|
|
endif()
|
|
set(GLPK_HAVE_GMP "define")
|
|
else()
|
|
set(GLPK_HAVE_GMP "undef")
|
|
endif()
|
|
|
|
if (UNIX AND NOT APPLE)
|
|
set(LIBIODBC "libiodbc.so")
|
|
set(LIBODBC "libodbc.so")
|
|
set(LIBMYSQL "libmysqlclient.so")
|
|
elseif(UNIX AND APPLE)
|
|
set(LIBIODBC "libiodbc.dylib")
|
|
set(LIBODBC "libodbc.dylib")
|
|
set(LIBMYSQL "libmysqlclient.dylib")
|
|
elseif(MSVC)
|
|
set(LIBIODBC "odbc32.lib")
|
|
set(LIBODBC "odbc32.lib")
|
|
set(LIBMYSQL "mysqlclient.lib")
|
|
endif()
|
|
|
|
if(ENABLE_ODBC)
|
|
message(STATUS "GLPK - Building with ODBC Support")
|
|
find_package(ODBC REQUIRED)
|
|
if (NOT ENABLE_DL)
|
|
message(SEND_ERROR "ENABLE_ODBC required ENABLE_DL")
|
|
endif()
|
|
include_directories(ODBC_INCLUDE_DIRECTORIES)
|
|
set(GLPK_HAVE_ODBC "define")
|
|
set(GLPK_ODBC_DLNAME "${ODBC_LIBRARIES}")
|
|
else()
|
|
set(GLPK_HAVE_ODBC "undef")
|
|
set(GLPK_ODBC_DLNAME "")
|
|
endif()
|
|
|
|
if(ENABLE_MYSQL)
|
|
message(STATUS "GLPK - Building with MySQL Support")
|
|
find_package(MySQL REQUIRED)
|
|
if (NOT ENABLE_DL)
|
|
message(SEND_ERROR "ENABLE_MYSQL required ENABLE_DL")
|
|
endif()
|
|
include_directories(MYSQL_INCLUDE_DIR)
|
|
set(GLPK_HAVE_MYSQL "define")
|
|
set(GLPK_MYSQL_DLNAME "${MYSQL_LIBRARIES}")
|
|
else()
|
|
set(GLPK_HAVE_MYSQL "undef")
|
|
set(GLPK_MYSQL_DLNAME "")
|
|
endif()
|
|
|
|
# Convert to CMake Variables to be used in the Config File
|
|
if(HAVE_SYS_TIME_H)
|
|
set(GLPK_HAVE_SYS_TIME_H "define")
|
|
else()
|
|
set (GLPK_HAVE_SYS_TIME_H "undef")
|
|
endif()
|
|
if(HAVE_GETTIMEOFDAY)
|
|
set(GLPK_HAVE_GETTIMEOFDAY "define")
|
|
else()
|
|
set (GLPK_HAVE_GETTIMEOFDAY "undef")
|
|
endif()
|
|
if(HAVE_LTDL)
|
|
set(GLPK_HAVE_LTDL "define")
|
|
else()
|
|
set (GLPK_HAVE_LTDL "undef")
|
|
endif()
|
|
if(HAVE_DLFCN)
|
|
set(GLPK_HAVE_DLFCN "define")
|
|
else()
|
|
set (GLPK_HAVE_DLFCN "undef")
|
|
endif()
|
|
|
|
|
|
# Configure a header file to pass some of the CMake settings to the source code
|
|
configure_file (
|
|
"${PROJECT_SOURCE_DIR}/config.h.cmake.in"
|
|
"${PROJECT_BINARY_DIR}/include/config.h"
|
|
)
|
|
# Add the binary dir include directory for config.h
|
|
include_directories("${PROJECT_BINARY_DIR}/include")
|
|
|
|
#############################################################
|
|
##
|
|
## Source file aggregation and clustering
|
|
##
|
|
#############################################################
|
|
file(GLOB_RECURSE GLPK_LIB_HEADERS ${PROJECT_SOURCE_DIR}/src/*.h)
|
|
file(GLOB_RECURSE GLPK_LIB_SOURCES ${PROJECT_SOURCE_DIR}/src/*.c)
|
|
|
|
file(GLOB_RECURSE GLPK_LIB_DEF ${PROJECT_SOURCE_DIR}/w64/*.def)
|
|
|
|
set(GLPK_EXAMPLE_GLPSOL_SOURCES ${PROJECT_SOURCE_DIR}/examples/glpsol.c)
|
|
set(GLPK_EXAMPLE_IPTSAMP_SOURCES ${PROJECT_SOURCE_DIR}/examples/iptsamp.c)
|
|
set(GLPK_EXAMPLE_MPLSAMP1_SOURCES ${PROJECT_SOURCE_DIR}/examples/mplsamp1.c)
|
|
set(GLPK_EXAMPLE_MPLSAMP2_SOURCES ${PROJECT_SOURCE_DIR}/examples/mplsamp2.c)
|
|
set(GLPK_EXAMPLE_SAMPLE_SOURCES ${PROJECT_SOURCE_DIR}/examples/sample.c)
|
|
set(GLPK_EXAMPLE_SPXSAMP1_SOURCES ${PROJECT_SOURCE_DIR}/examples/spxsamp1.c)
|
|
set(GLPK_EXAMPLE_SPXSAMP2_SOURCES ${PROJECT_SOURCE_DIR}/examples/spxsamp2.c)
|
|
set(GLPK_EXAMPLE_NETGEN_SOURCES ${PROJECT_SOURCE_DIR}/examples/netgen.c)
|
|
|
|
# Additional include files like the storm-config.h
|
|
file(GLOB_RECURSE GLPK_BUILD_HEADERS ${PROJECT_BINARY_DIR}/include/*.h)
|
|
|
|
# Add custom additional include or link directories
|
|
if (ADDITIONAL_INCLUDE_DIRS)
|
|
message(STATUS "GLPK - Using additional include directories ${ADDITIONAL_INCLUDE_DIRS}")
|
|
include_directories(${ADDITIONAL_INCLUDE_DIRS})
|
|
endif(ADDITIONAL_INCLUDE_DIRS)
|
|
if (ADDITIONAL_LINK_DIRS)
|
|
message(STATUS "GLPK - Using additional link directories ${ADDITIONAL_LINK_DIRS}")
|
|
link_directories(${ADDITIONAL_LINK_DIRS})
|
|
endif(ADDITIONAL_LINK_DIRS)
|
|
|
|
###############################################################################
|
|
## #
|
|
## Executable Creation #
|
|
## #
|
|
## All link_directories() calls MUST be made before this point #
|
|
## #
|
|
###############################################################################
|
|
if(WITH_GLPK_EXAMPLES)
|
|
add_executable(glpsol ${GLPK_EXAMPLE_GLPSOL_SOURCES})
|
|
add_executable(iptsamp ${GLPK_EXAMPLE_IPTSAMP_SOURCES})
|
|
add_executable(mplsamp1 ${GLPK_EXAMPLE_MPLSAMP1_SOURCES})
|
|
add_executable(mplsamp2 ${GLPK_EXAMPLE_MPLSAMP2_SOURCES})
|
|
add_executable(spxsamp1 ${GLPK_EXAMPLE_SPXSAMP1_SOURCES})
|
|
add_executable(spxsamp2 ${GLPK_EXAMPLE_SPXSAMP2_SOURCES})
|
|
add_executable(netgen ${GLPK_EXAMPLE_NETGEN_SOURCES})
|
|
add_executable(sample ${GLPK_EXAMPLE_SAMPLE_SOURCES})
|
|
endif()
|
|
|
|
if(ENABLE_DL)
|
|
set(GLPK_BUILD_TYPE SHARED)
|
|
else()
|
|
set(GLPK_BUILD_TYPE STATIC)
|
|
endif()
|
|
if (NOT MSVC)
|
|
set(GLPK_LIB_DEF "")
|
|
endif()
|
|
|
|
add_library(glpk ${GLPK_BUILD_TYPE} ${GLPK_LIB_SOURCES} ${GLPK_LIB_HEADERS} ${GLPK_LIB_DEF})
|
|
IF(UNIX)
|
|
target_link_libraries(glpk m)
|
|
ENDIF(UNIX)
|
|
if(HAVE_LTDL)
|
|
target_link_libraries(glpk ltdl)
|
|
endif(HAVE_LTDL)
|
|
if(HAVE_DLFCN)
|
|
target_link_libraries(glpk dl)
|
|
endif(HAVE_DLFCN)
|
|
|
|
if(WITH_GLPK_EXAMPLES)
|
|
# Dependency for the Executable
|
|
add_dependencies(glpsol glpk)
|
|
add_dependencies(iptsamp glpk)
|
|
add_dependencies(mplsamp1 glpk)
|
|
add_dependencies(mplsamp2 glpk)
|
|
add_dependencies(spxsamp1 glpk)
|
|
add_dependencies(spxsamp2 glpk)
|
|
add_dependencies(netgen glpk)
|
|
add_dependencies(sample glpk)
|
|
target_link_libraries(glpsol glpk)
|
|
target_link_libraries(iptsamp glpk)
|
|
target_link_libraries(mplsamp1 glpk)
|
|
target_link_libraries(mplsamp2 glpk)
|
|
target_link_libraries(spxsamp1 glpk)
|
|
target_link_libraries(spxsamp2 glpk)
|
|
target_link_libraries(netgen glpk)
|
|
target_link_libraries(sample glpk)
|
|
endif()
|
|
|
|
#############################################################
|
|
##
|
|
## ODBC
|
|
##
|
|
#############################################################
|
|
if(ODBC_FOUND)
|
|
target_link_libraries(glpk ${ODBC_LIBRARIES})
|
|
endif()
|
|
|
|
#############################################################
|
|
##
|
|
## MySQL
|
|
##
|
|
#############################################################
|
|
if(MYSQL_FOUND)
|
|
target_link_libraries(glpk ${MYSQL_LIBRARIES})
|
|
endif()
|