83 lines
3.0 KiB
CMake
83 lines
3.0 KiB
CMake
# - Try to find Gurobi
|
|
# Once done this will define
|
|
# GUROBI_FOUND - System has GUROBI
|
|
# GUROBI_INCLUDE_DIRS - The GUROBI include directories
|
|
# GUROBI_LIBRARIES - The libraries needed to use GUROBI
|
|
# GUROBI_COMPILE_FLAGS - The definitions required to compile with GUROBI
|
|
# User can set Gurobi_ROOT to the preferred installation prefix
|
|
|
|
option(GUROBI_PLUGIN "Build Gurobi binding as a plugin" ON)
|
|
|
|
set(GUROBI_COMPILE_FLAGS "-fPIC -fno-strict-aliasing -fexceptions")
|
|
|
|
set(GUROBI_VERSIONS 913 912 911 910 903 902 901 900 811 810 801 752 702)
|
|
|
|
foreach(VERSION ${GUROBI_VERSIONS})
|
|
list(APPEND GUROBI_DEFAULT_LOC "/opt/gurobi${VERSION}/linux64")
|
|
list(APPEND GUROBI_DEFAULT_LOC "/opt/gurobi${VERSION}/linux64")
|
|
list(APPEND GUROBI_DEFAULT_LOC "C:\\gurobi${VERSION}\\win64")
|
|
list(APPEND GUROBI_DEFAULT_LOC "C:\\gurobi${VERSION}\\win32")
|
|
list(APPEND GUROBI_DEFAULT_LOC "/Library/gurobi${VERSION}/mac64")
|
|
|
|
string(SUBSTRING ${VERSION} 0 2 VERSION)
|
|
list(APPEND GUROBI_LIB_NAMES gurobi${VERSION})
|
|
endforeach(VERSION)
|
|
|
|
find_path(GUROBI_INCLUDE gurobi_c.h
|
|
PATHS $ENV{GUROBI_HOME}
|
|
HINTS ${GUROBI_DEFAULT_LOC}
|
|
PATH_SUFFIXES include)
|
|
|
|
if(NOT "${GUROBI_INCLUDE}" STREQUAL "GUROBI_INCLUDE-NOTFOUND")
|
|
file(READ "${GUROBI_INCLUDE}/gurobi_c.h" GUROBI_CONFIG)
|
|
string(REGEX MATCH "\#define GRB_VERSION_MAJOR +([0-9]+)" _ "${GUROBI_CONFIG}")
|
|
set(GRB_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
|
string(REGEX MATCH "\#define GRB_VERSION_MINOR +([0-9]+)" _ "${GUROBI_CONFIG}")
|
|
set(GRB_VERSION_MINOR "${CMAKE_MATCH_1}")
|
|
string(REGEX MATCH "\#define GRB_VERSION_TECHNICAL +([0-9]+)" _ "${GUROBI_CONFIG}")
|
|
set(GRB_VERSION_TECHNICAL "${CMAKE_MATCH_1}")
|
|
set(GUROBI_VERSION "${GRB_VERSION_MAJOR}.${GRB_VERSION_MINOR}.${GRB_VERSION_TECHNICAL}")
|
|
unset(GUROBI_CONFIG)
|
|
endif()
|
|
|
|
if(GUROBI_PLUGIN)
|
|
include(CheckIncludeFiles)
|
|
# TODO: Cleanup this mess
|
|
check_include_files(dlfcn.h HAS_DLFCN_H)
|
|
check_include_files(Windows.h HAS_WINDOWS_H)
|
|
if(HAS_DLFCN_H)
|
|
find_library(GUROBI_LIBRARY dl)
|
|
elseif(HAS_WINDOWS_H)
|
|
set(GUROBI_LIBRARY ${GUROBI_INCLUDE})
|
|
endif()
|
|
else()
|
|
foreach(GUROBI_LIB ${GUROBI_LIB_NAMES})
|
|
find_library(GUROBI_LIBRARY NAMES ${GUROBI_LIB}
|
|
HINTS $ENV{GUROBI_HOME}
|
|
PATHS ${GUROBI_DEFAULT_LOC}
|
|
PATH_SUFFIXES lib)
|
|
if(NOT "${GUROBI_LIBRARY}" STREQUAL "GUROBI_LIBRARY-NOTFOUND")
|
|
break()
|
|
endif()
|
|
endforeach(GUROBI_LIB)
|
|
endif()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
# handle the QUIETLY and REQUIRED arguments and set GUROBI_FOUND to TRUE
|
|
# if all listed variables are TRUE
|
|
find_package_handle_standard_args(Gurobi
|
|
FOUND_VAR GUROBI_FOUND
|
|
REQUIRED_VARS GUROBI_INCLUDE GUROBI_LIBRARY
|
|
VERSION_VAR GUROBI_VERSION
|
|
FAIL_MESSAGE "Could NOT find Gurobi, use GUROBI_ROOT to hint its location"
|
|
)
|
|
|
|
if(GUROBI_PLUGIN AND HAS_WINDOWS_H AND NOT HAS_DLFCN_H)
|
|
unset(GUROBI_LIBRARY)
|
|
endif()
|
|
|
|
mark_as_advanced(GUROBI_INCLUDE GUROBI_LIBRARY)
|
|
|
|
set(GUROBI_LIBRARIES ${GUROBI_LIBRARY})
|
|
set(GUROBI_INCLUDE_DIRS ${GUROBI_INCLUDE})
|