Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider a710a092 rédigé par Gwenael SAMAIN's avatar Gwenael SAMAIN
Parcourir les fichiers

CMake first version

parent 7b1d30f7
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
# Should we required that version ??
cmake_minimum_required(VERSION 3.10)
project(Mimosa VERSION 2.0)
#set(CMAKE_CXX_FLAGS "-Wall")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/)
find_package( Cplex )
find_package( Armadillo REQUIRED )
find_library(dlib 19.10 REQUIRED)
find_library(openblas REQUIRED)
add_compile_definitions(IL_STD)
message(STATUS "Cplex include dirs: ${CPLEX_INCLUDE_DIRS}")
message(STATUS "Cplex libs: ${CPLEX_LIBRARIES}")
#message(STATUS "Found dlib version ${DLIB_VERSION}")
#find_library(armadillo 9.8 REQUIRED)
#file(
# GLOB_RECURSE
# src.*.cpp
#)
# Exemple ibex Hinfty
#list (APPEND SRC
#${CMAKE_CURRENT_SOURCE_DIR}/strategy/ibex_LightLocalSolver.cpp
#${CMAKE_CURRENT_SOURCE_DIR}/strategy/ibex_LightLocalSolver.h
#${CMAKE_CURRENT_SOURCE_DIR}/strategy/ibex_LightOptimMinMax.cpp
#${CMAKE_CURRENT_SOURCE_DIR}/strategy/ibex_LightOptimMinMax.h
#${CMAKE_CURRENT_SOURCE_DIR}/strategy/ibex_OptimMinMax.cpp
#${CMAKE_CURRENT_SOURCE_DIR}/strategy/ibex_OptimMinMax.h
# # Add more source files here.
# # For most plugins, the rest can be left as is.
# )
#
## Create the target for libibex-myplugin
#add_library (ibex-Hcontrol ${SRC})
#target_include_directories (ibex-Hcontrol PUBLIC
#"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
#"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>")
#target_link_libraries (ibex-Hcontrol PUBLIC Ibex::ibex)
#
## installation of libibex-Hcontrol files
#ibex_list_filter_header (HDR ${SRC}) # Ibex should have installed this
#function
#install (TARGETS ibex-Hcontrol EXPORT HcontrolExport
# DESTINATION ${CMAKE_INSTALL_LIBDIR})
#install (FILES ${HDR} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ibex-Hcontrol)
#
#################################################################################
## More examples in the bin subdirectory
#################################################################################
#add_subdirectory (bin)
list(APPEND SRC
${CMAKE_CURRENT_SOURCE_DIR}/src/Chronometer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Chronometer.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Context.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Context.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Contract.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Contract.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/CplexSolver.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/CplexSolver.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/interfaces.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/is_binary.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/is_binary.h
${CMAKE_CURRENT_SOURCE_DIR}/src/L1Screening.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/L1Screening.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/LB.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/LB.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/MaxK.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/MaxK.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/node_container.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/node_container.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/NodeImplementation.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/NodeImplementation.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Optimizer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Optimizer.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Problem.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Problem.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Split.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Split.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/UB.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/UB.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Util.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Util_ElementAndIndex.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Util_FixedMaxList.hpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Util.h
)
add_executable(Mimosa ${SRC})
include_directories(SYSTEM ${CPLEX_INCLUDE_DIRS} ${Armadillo_INCLUDE_DIR})
target_link_libraries(Mimosa PUBLIC openblas pthread m dlib ${CPLEX_LIBRARIES} ${Armadillo_LIBRARIES} dl)
#option(USE_CPLEX "Build with Cplex support" ON)
#configure_file(MimosaConfig.h.in MimosaConfig.h)
#target_include_directories(Mimosa PUBLIC
# "${PROJECT_BINARY_DIR}"
# )
#
#if(USE_CPLEX)
# #
#endif()
install(TARGETS Mimosa DESTINATION ${CMAKE_INSTALL_BINDIR})
# This module finds an installed armadilo package.
#
# It sets the following variables:
# Armadillo_FOUND - Set to false, or undefined, if lemon isn't found.
# Armadillo_INCLUDE_DIR - Lemon include directory.
# Armadillo_LIBRARIES - Lemon library files
FIND_PATH(Armadillo_INCLUDE_DIR armadillo PATHS /usr/include /usr/local/include ${CMAKE_INCLUDE_PATH} ${CMAKE_PREFIX_PATH}/include $ENV{Armadillo_ROOT}/include ENV CPLUS_INCLUDE_PATH)
FIND_LIBRARY(Armadillo_LIBRARIES
NAMES armadillo
PATHS $ENV{Armadillo_ROOT}/src/impex $ENV{Armadillo_ROOT}/lib ENV LD_LIBRARY_PATH ENV LIBRARY_PATH
)
GET_FILENAME_COMPONENT(Armadillo_LIBRARY_PATH ${Armadillo_LIBRARIES} PATH)
SET( Armadillo_LIBRARY_DIR ${Armadillo_LIBRARY_PATH} CACHE PATH "Path to lemon library.")
# handle the QUIETLY and REQUIRED arguments and set Armadillo_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Armadillo DEFAULT_MSG Armadillo_LIBRARIES Armadillo_INCLUDE_DIR)
MARK_AS_ADVANCED( Armadillo_INCLUDE_DIR Armadillo_LIBRARIES Armadillo_LIBRARY_DIR )
# This module finds cplex.
#
# User can give CPLEX_ROOT_DIR as a hint stored in the cmake cache.
#
# It sets the following variables:
# CPLEX_FOUND - Set to false, or undefined, if cplex isn't found.
# CPLEX_INCLUDE_DIRS - include directory
# CPLEX_LIBRARIES - library files
if(WIN32)
execute_process(COMMAND cmd /C set CPLEX_STUDIO_DIR OUTPUT_VARIABLE CPLEX_STUDIO_DIR_VAR ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT CPLEX_STUDIO_DIR_VAR)
MESSAGE(FATAL_ERROR "Unable to find CPLEX: environment variable CPLEX_STUDIO_DIR<VERSION> not set.")
endif()
STRING(REGEX REPLACE "^CPLEX_STUDIO_DIR" "" CPLEX_STUDIO_DIR_VAR ${CPLEX_STUDIO_DIR_VAR})
STRING(REGEX MATCH "^[0-9]+" CPLEX_WIN_VERSION ${CPLEX_STUDIO_DIR_VAR})
STRING(REGEX REPLACE "^[0-9]+=" "" CPLEX_STUDIO_DIR_VAR ${CPLEX_STUDIO_DIR_VAR})
file(TO_CMAKE_PATH "${CPLEX_STUDIO_DIR_VAR}" CPLEX_ROOT_DIR_GUESS)
set(CPLEX_WIN_VERSION ${CPLEX_WIN_VERSION} CACHE STRING "CPLEX version to be used.")
set(CPLEX_ROOT_DIR "${CPLEX_ROOT_DIR_GUESS}" CACHE PATH "CPLEX root directory.")
MESSAGE(STATUS "Found CLPEX version ${CPLEX_WIN_VERSION} at '${CPLEX_ROOT_DIR}'")
STRING(REGEX REPLACE "/VC/bin/.*" "" VISUAL_STUDIO_PATH ${CMAKE_C_COMPILER})
STRING(REGEX MATCH "Studio [0-9]+" CPLEX_WIN_VS_VERSION ${VISUAL_STUDIO_PATH})
STRING(REGEX REPLACE "Studio " "" CPLEX_WIN_VS_VERSION ${CPLEX_WIN_VS_VERSION})
if(${CPLEX_WIN_VS_VERSION} STREQUAL "9")
set(CPLEX_WIN_VS_VERSION 2008)
elseif(${CPLEX_WIN_VS_VERSION} STREQUAL "10")
set(CPLEX_WIN_VS_VERSION 2010)
elseif(${CPLEX_WIN_VS_VERSION} STREQUAL "11")
set(CPLEX_WIN_VS_VERSION 2012)
else()
MESSAGE(FATAL_ERROR "CPLEX: unknown Visual Studio version at '${VISUAL_STUDIO_PATH}'.")
endif()
set(CPLEX_WIN_VS_VERSION ${CPLEX_WIN_VS_VERSION} CACHE STRING "Visual Studio Version")
if("${CMAKE_C_COMPILER}" MATCHES "amd64")
set(CPLEX_WIN_BITNESS x64)
else()
set(CPLEX_WIN_BITNESS x86)
endif()
set(CPLEX_WIN_BITNESS ${CPLEX_WIN_BITNESS} CACHE STRING "On Windows: x86 or x64 (32bit resp. 64bit)")
MESSAGE(STATUS "CPLEX: using Visual Studio ${CPLEX_WIN_VS_VERSION} ${CPLEX_WIN_BITNESS} at '${VISUAL_STUDIO_PATH}'")
if(NOT CPLEX_WIN_LINKAGE)
set(CPLEX_WIN_LINKAGE mda CACHE STRING "CPLEX linkage variant on Windows. One of these: mda (dll, release), mdd (dll, debug), mta (static, release), mtd (static, debug)")
endif(NOT CPLEX_WIN_LINKAGE)
# now, generate platform string
set(CPLEX_WIN_PLATFORM "${CPLEX_WIN_BITNESS}_windows_vs${CPLEX_WIN_VS_VERSION}/stat_${CPLEX_WIN_LINKAGE}")
else()
set(CPLEX_ROOT_DIR "" CACHE PATH "CPLEX root directory.")
set(CPLEX_WIN_PLATFORM "")
endif()
FIND_PATH(CPLEX_INCLUDE_DIR
ilcplex/cplex.h
HINTS ${CPLEX_ROOT_DIR}/cplex/include
${CPLEX_ROOT_DIR}/include
PATHS ENV C_INCLUDE_PATH
ENV C_PLUS_INCLUDE_PATH
ENV INCLUDE_PATH
)
FIND_PATH(CPLEX_CONCERT_INCLUDE_DIR
ilconcert/iloenv.h
HINTS ${CPLEX_ROOT_DIR}/concert/include
${CPLEX_ROOT_DIR}/include
PATHS ENV C_INCLUDE_PATH
ENV C_PLUS_INCLUDE_PATH
ENV INCLUDE_PATH
)
FIND_LIBRARY(CPLEX_LIBRARY
NAMES cplex${CPLEX_WIN_VERSION} cplex
HINTS ${CPLEX_ROOT_DIR}/cplex/lib/${CPLEX_WIN_PLATFORM} #windows
${CPLEX_ROOT_DIR}/cplex/lib/x86-64_debian4.0_4.1/static_pic #unix
${CPLEX_ROOT_DIR}/cplex/lib/x86-64_sles10_4.1/static_pic #unix
${CPLEX_ROOT_DIR}/cplex/lib/x86-64_linux/static_pic #unix
${CPLEX_ROOT_DIR}/cplex/lib/x86-64_osx/static_pic #osx
${CPLEX_ROOT_DIR}/cplex/lib/x86-64_darwin/static_pic #osx
PATHS ENV LIBRARY_PATH #unix
ENV LD_LIBRARY_PATH #unix
)
message(STATUS "CPLEX Library: ${CPLEX_LIBRARY}")
FIND_LIBRARY(CPLEX_ILOCPLEX_LIBRARY
ilocplex
HINTS ${CPLEX_ROOT_DIR}/cplex/lib/${CPLEX_WIN_PLATFORM} #windows
${CPLEX_ROOT_DIR}/cplex/lib/x86-64_debian4.0_4.1/static_pic #unix
${CPLEX_ROOT_DIR}/cplex/lib/x86-64_sles10_4.1/static_pic #unix
${CPLEX_ROOT_DIR}/cplex/lib/x86-64_linux/static_pic #unix
${CPLEX_ROOT_DIR}/cplex/lib/x86-64_osx/static_pic #osx
${CPLEX_ROOT_DIR}/cplex/lib/x86-64_darwin/static_pic #osx
PATHS ENV LIBRARY_PATH
ENV LD_LIBRARY_PATH
)
message(STATUS "ILOCPLEX Library: ${CPLEX_ILOCPLEX_LIBRARY}")
FIND_LIBRARY(CPLEX_CONCERT_LIBRARY
concert
HINTS ${CPLEX_ROOT_DIR}/concert/lib/${CPLEX_WIN_PLATFORM} #windows
${CPLEX_ROOT_DIR}/concert/lib/x86-64_debian4.0_4.1/static_pic #unix
${CPLEX_ROOT_DIR}/concert/lib/x86-64_sles10_4.1/static_pic #unix
${CPLEX_ROOT_DIR}/concert/lib/x86-64_linux/static_pic #unix
${CPLEX_ROOT_DIR}/concert/lib/x86-64_osx/static_pic #osx
${CPLEX_ROOT_DIR}/concert/lib/x86-64_darwin/static_pic #osx
PATHS ENV LIBRARY_PATH
ENV LD_LIBRARY_PATH
)
message(STATUS "CONCERT Library: ${CPLEX_CONCERT_LIBRARY}")
if(WIN32)
FIND_PATH(CPLEX_BIN_DIR
cplex${CPLEX_WIN_VERSION}.dll
HINTS ${CPLEX_ROOT_DIR}/cplex/bin/${CPLEX_WIN_PLATFORM} #windows
)
else()
FIND_PATH(CPLEX_BIN_DIR
cplex
HINTS ${CPLEX_ROOT_DIR}/cplex/bin/x86-64_sles10_4.1 #unix
${CPLEX_ROOT_DIR}/cplex/bin/x86-64_debian4.0_4.1 #unix
${CPLEX_ROOT_DIR}/cplex/lib/x86-64_linux #unix
${CPLEX_ROOT_DIR}/cplex/bin/x86-64_osx #osx
${CPLEX_ROOT_DIR}/cplex/bin/x86-64_darwin #osx
ENV LIBRARY_PATH
ENV LD_LIBRARY_PATH
)
endif()
message(STATUS "CPLEX Bin Dir: ${CPLEX_BIN_DIR}")
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(CPLEX DEFAULT_MSG
CPLEX_LIBRARY CPLEX_INCLUDE_DIR CPLEX_ILOCPLEX_LIBRARY CPLEX_CONCERT_LIBRARY CPLEX_CONCERT_INCLUDE_DIR)
IF(CPLEX_FOUND)
SET(CPLEX_INCLUDE_DIRS ${CPLEX_INCLUDE_DIR} ${CPLEX_CONCERT_INCLUDE_DIR})
SET(CPLEX_LIBRARIES ${CPLEX_CONCERT_LIBRARY} ${CPLEX_ILOCPLEX_LIBRARY} ${CPLEX_LIBRARY} )
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
SET(CPLEX_LIBRARIES "${CPLEX_LIBRARIES};m;pthread")
ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
ENDIF(CPLEX_FOUND)
MARK_AS_ADVANCED(CPLEX_LIBRARY CPLEX_INCLUDE_DIR CPLEX_ILOCPLEX_LIBRARY CPLEX_CONCERT_INCLUDE_DIR CPLEX_CONCERT_LIBRARY)
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter