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.
		
		
		
		
		
			
		
			
				
					
					
						
							281 lines
						
					
					
						
							9.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							281 lines
						
					
					
						
							9.9 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.")
							 | 
						|
								
							 | 
						|
								MARK_AS_ADVANCED(WITH_GLPK_EXAMPLES WITH_GMP ENABLE_DL ENABLE_ODBC ENABLE_MYSQL)
							 | 
						|
								
							 | 
						|
								# 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_C_FLAGS} -Wno-return-type -Wno-parentheses -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-value -Wno-unused-function -Wno-address -Wno-unused-label")
							 | 
						|
									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-label -Wno-unused-value -Wno-unused-function -Wno-unused-variable -Wno-logical-op-parentheses -Wno-macro-redefined -Wno-uninitialized -Wno-sometimes-uninitialized -Wno-self-assign")
							 | 
						|
								
							 | 
						|
									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()
							 |