CMakeLists.txt 26.3 KB
Newer Older
1
cmake_minimum_required (VERSION 3.13)
2

Martin Heistermann's avatar
Martin Heistermann committed
3
project(CoMISo VERSION 1.1.0)
4

David Bommes's avatar
David Bommes committed
5 6 7 8
if(POLICY CMP0100)
  cmake_policy(SET CMP0100 NEW)
endif()

9
# add our macro directory to cmake search path
10
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_CURRENT_SOURCE_DIR}/cmake-library/finders ${CMAKE_CURRENT_SOURCE_DIR}/cmake-library/VCI)
Jane Tournois's avatar
Jane Tournois committed
11
set (CMAKE_DEBUG_POSTFIX "d")
12

Max Lyon's avatar
Max Lyon committed
13
include (VCICommon)
14

Max Lyon's avatar
Max Lyon committed
15
include(VCIQt)
16 17 18 19 20 21

# Flag to enable or disable QT widgets in CoMISo
set( WANT_COMISO_QT ON CACHE BOOL "Enable Qt support in CoMISo" )

if( WANT_COMISO_QT )

22 23 24 25 26
  set(QT5_REQUIRED_PACKAGES
    Qt5Core
    Qt5Widgets
    )

Max Lyon's avatar
Max Lyon committed
27
  vci_qt5 ()
28

Jan Möbius's avatar
Jan Möbius committed
29
  if( QT5_FOUND)
30 31 32 33 34
    add_definitions (-DQT5_FOUND)
    set (COMISO_QT_CONFIG_FILE_SETTINGS "#define COMISO_QT_AVAILABLE 1" )
  else()
    set (COMISO_QT_CONFIG_FILE_SETTINGS "#define COMISO_QT_AVAILABLE 0" )
  endif()
35

36 37 38 39 40 41
  if ( QT5_FOUND )
    # Enable automoc
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTOUIC ON)
  endif()

42 43
endif( WANT_COMISO_QT )

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
# source code directories
set (directories
  .
  Base/Code
  Base/Debug
  Base/Security
  Base/Utils
  Solver
  NSolver
  EigenSolver
  Config
  Utils
  QtWidgets
)

# collect all header,source and ui files
vci_append_files (headers "*.hh" ${directories})
vci_append_files (sources "*.cc" ${directories})

if( QT5_FOUND )
vci_append_files (ui "*.ui" ${directories})
endif()

# remove template cc files from source file list
vci_drop_templates (sources)

vci_add_library (CoMISo SHARED ${ui} ${sources} ${headers} )
add_library(CoMISo::CoMISo ALIAS CoMISo)

target_include_directories(CoMISo
    PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/>
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..> # TODO: this is dangerous!
        $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/>
)

if ( QT5_FOUND )
  target_link_libraries     (CoMISo PUBLIC ${QT_LIBRARIES})
endif()

Max Lyon's avatar
Max Lyon committed
84
vci_get_version ()
85

Max Lyon's avatar
Max Lyon committed
86
include (VCIOutput)
87 88 89 90 91 92

set(COMISO_INCLUDE_DIRECTORIES "")
set(COMISO_LINK_DIRECTORIES "")
set(COMISO_LINK_LIBRARIES "")
set(NEED_LAPACK "")

93 94
option(COMISO_BUILD_WITHOUT_BOOST "Build CoMISo without boost" OFF)

Max Lyon's avatar
Max Lyon committed
95
FIND_PACKAGE( Boost 1.59.0 COMPONENTS system filesystem regex QUIET)
96
if(Boost_FOUND AND NOT COMISO_BUILD_WITHOUT_BOOST)
97 98 99 100
  set (COMISO_BOOST_CONFIG_FILE_SETTINGS "#define COMISO_BOOST_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIRS} )
  list( APPEND COMISO_LINK_DIRECTORIES    ${Boost_LIBRARY_DIR} )
  list( APPEND COMISO_LINK_LIBRARIES  ${Boost_LIBRARIES} )
101

102 103 104 105
  target_include_directories(CoMISo PRIVATE ${Boost_INCLUDE_DIRS})
  target_link_directories   (CoMISo PRIVATE ${Boost_LIBRARY_DIR})
  target_link_libraries     (CoMISo PRIVATE ${Boost_LIBRARIES})

106
  option(Boost_USE_STATIC_LIBS "Link with static Boost libraries" OFF)
107 108 109 110 111 112 113 114 115
  mark_as_advanced(Boost_USE_STATIC_LIBS)
  if(Boost_USE_STATIC_LIBS)
    set(Boost_USE_STATIC_LIBS ON)
  else()
      # One must add -DBOOST_ALL_DYN_LINK to DEFINITIONS to use Boost
      # auto-link with shared libraries.
    add_definitions( -DBOOST_ALL_DYN_LINK )
  endif()

116 117
else()
  set (COMISO_BOOST_CONFIG_FILE_SETTINGS "#define COMISO_BOOST_AVAILABLE 0" )
118 119 120 121 122
  if(COMISO_BUILD_WITHOUT_BOOST)
    message (STATUS "Building without boost (COMISO_BUILD_WITHOUT_BOOST flag is set)")
  else()
    message (STATUS "Boost not found!")
  endif()
123 124 125
endif ()


126
find_package (GMM REQUIRED)
127 128 129 130
if (GMM_FOUND)
  set (COMISO_GMM_CONFIG_FILE_SETTINGS "#define COMISO_GMM_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${GMM_INCLUDE_DIR} )
  list (APPEND NEED_LAPACK "GMM")
131 132

  target_include_directories(CoMISo PRIVATE ${GMM_INCLUDE_DIR})
133 134 135 136
else()
  set (COMISO_GMM_CONFIG_FILE_SETTINGS "#define COMISO_GMM_AVAILABLE 0" )
endif ()

Max Lyon's avatar
Max Lyon committed
137 138
set(TMP_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
set(CMAKE_FIND_LIBRARY_PREFIXES lib "") #Our blas librariy is called libblas.lib. Is there a better way to find it than this?
139 140 141
find_package (BLAS)
if (BLAS_FOUND )
  set (COMISO_BLAS_CONFIG_FILE_SETTINGS "#define COMISO_BLAS_AVAILABLE 1" )
142

143 144 145
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${BLAS_INCLUDE_DIRS} )
  list( APPEND COMISO_LINK_DIRECTORIES   ${BLAS_LIBRARY_DIRS} ${BLAS_LIBRARY_DIR} )
  list( APPEND COMISO_LINK_LIBRARIES  ${BLAS_LIBRARIES} )
146 147 148 149

  target_include_directories(CoMISo PRIVATE ${BLAS_INCLUDE_DIRS})
  target_link_directories   (CoMISo PRIVATE ${BLAS_LIBRARY_DIRS} ${BLAS_LIBRARY_DIR})
  target_link_libraries     (CoMISo PRIVATE ${BLAS_LIBRARIES})
150 151 152 153
else()
  set (COMISO_BLAS_CONFIG_FILE_SETTINGS "#define COMISO_BLAS_AVAILABLE 0" )
  message (STATUS "BLAS not found!")
endif ()
Max Lyon's avatar
Max Lyon committed
154
set(CMAKE_FIND_LIBRARY_PREFIXES "${TMP_CMAKE_FIND_LIBRARY_PREFIXES}")
155 156 157 158 159 160 161

find_package (ADOLC)
if (ADOLC_FOUND)
  set (COMISO_ADOLC_CONFIG_FILE_SETTINGS "#define COMISO_ADOLC_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${ADOLC_INCLUDE_DIR} )
  list( APPEND COMISO_LINK_DIRECTORIES   ${ADOLC_LIBRARY_DIR} )
  list( APPEND COMISO_LINK_LIBRARIES  ${ADOLC_LIBRARIES} )
162 163 164
  target_include_directories(CoMISo PRIVATE ${ADOLC_INCLUDE_DIR})
  target_link_directories   (CoMISo PRIVATE ${ADOLC_LIBRARY_DIR})
  target_link_libraries     (CoMISo PRIVATE ${ADOLC_LIBRARIES})
165 166 167 168 169 170 171 172
else ()
  set (COMISO_ADOLC_CONFIG_FILE_SETTINGS "#define COMISO_ADOLC_AVAILABLE 0" )
  message (STATUS "ADOLC not found!")
endif ()

find_package (SUITESPARSE)
if (SUITESPARSE_FOUND )
  list (APPEND NEED_LAPACK "SUITESPARSE")
173

174
  set (COMISO_SUITESPARSE_CONFIG_FILE_SETTINGS "#define COMISO_SUITESPARSE_AVAILABLE 1" )
175

176 177 178
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${SUITESPARSE_INCLUDE_DIRS} )
  list( APPEND COMISO_LINK_DIRECTORIES   ${SUITESPARSE_LIBRARY_DIRS} )
  list( APPEND COMISO_LINK_LIBRARIES  ${SUITESPARSE_LIBRARIES} )
179 180 181
  target_include_directories(CoMISo PUBLIC ${SUITESPARSE_INCLUDE_DIRS})
  target_link_directories   (CoMISo PUBLIC ${SUITESPARSE_LIBRARY_DIRS})
  target_link_libraries     (CoMISo PUBLIC ${SUITESPARSE_LIBRARIES})
182 183 184 185 186 187 188 189 190

  # special handling, since spqr is incorrect in several distributions
  if(SUITESPARSE_SPQR_VALID)
    set (COMISO_SUITESPARSE_SPQR_CONFIG_FILE_SETTINGS "#define COMISO_SUITESPARSE_SPQR_AVAILABLE 1" )
  else()
    message (STATUS "SUITESPARSE SPQR seems to be invalid!")
    set (COMISO_SUITESPARSE_SPQR_CONFIG_FILE_SETTINGS "#define COMISO_SUITESPARSE_SPQR_AVAILABLE 0" )
  endif()

191 192 193 194 195 196
else ()
  message (STATUS "SUITESPARSE not found!")
  set (COMISO_SUITESPARSE_CONFIG_FILE_SETTINGS "#define COMISO_SUITESPARSE_AVAILABLE 0" )
  set (COMISO_SUITESPARSE_SPQR_CONFIG_FILE_SETTINGS "#define COMISO_SUITESPARSE_SPQR_AVAILABLE 0" )
endif()

197 198 199 200 201 202
if(NOT DISABLE_MPI)
  find_package (MPI)
  if (MPI_FOUND )
    set (COMISO_MPI_CONFIG_FILE_SETTINGS "#define COMISO_MPI_AVAILABLE 1" )
    list( APPEND COMISO_INCLUDE_DIRECTORIES ${MPI_INCLUDE_PATH} )
    list( APPEND COMISO_LINK_LIBRARIES  ${MPI_CXX_LIBRARIES} )
203 204
    target_include_directories(CoMISo PRIVATE ${MPI_INCLUDE_PATH})
    target_link_libraries     (CoMISo PRIVATE ${MPI_CXX_LIBRARIES})
205 206 207 208
  else ()
    message (STATUS "MPI not found!")
    set (COMISO_MPI_CONFIG_FILE_SETTINGS "#define COMISO_MPI_AVAILABLE 0" )
  endif ()
209
else ()
210
  message (STATUS "MPI disabled!")
211 212 213
  set (COMISO_MPI_CONFIG_FILE_SETTINGS "#define COMISO_MPI_AVAILABLE 0" )
endif ()

214 215 216 217 218 219
if(NOT DISABLE_PETSC)
  find_package (PETSC)
  if (PETSC_FOUND AND MPI_FOUND)
    set (COMISO_PETSC_CONFIG_FILE_SETTINGS "#define COMISO_PETSC_AVAILABLE 1" )
    list( APPEND COMISO_INCLUDE_DIRECTORIES ${PETSC_INCLUDE_DIRS} )
    list( APPEND COMISO_LINK_LIBRARIES  ${PETSC_LIBRARY} )
220 221
    target_include_directories(CoMISo PRIVATE ${PETSC_INCLUDE_DIRS})
    target_link_libraries     (CoMISo PRIVATE ${PETSC_LIBRARY})
222 223 224 225
  else ()
    message (STATUS "PETSC or MPI not found!")
    set (COMISO_PETSC_CONFIG_FILE_SETTINGS "#define COMISO_PETSC_AVAILABLE 0" )
  endif ()
226
else ()
227
  message (STATUS "PETSC disabled!")
228
  set (COMISO_PETSC_CONFIG_FILE_SETTINGS "#define COMISO_PETSC_AVAILABLE 0" )
229
endif()
230 231


232 233 234 235 236 237 238
if(NOT DISABLE_TAO)
  find_package (TAO)
  if (TAO_FOUND AND PETSC_FOUND AND MPI_FOUND)
    set (COMISO_TAO_CONFIG_FILE_SETTINGS "#define COMISO_TAO_AVAILABLE 1" )
    list( APPEND COMISO_INCLUDE_DIRECTORIES ${TAO_INCLUDE_DIRS} )
    list( APPEND COMISO_LINK_DIRECTORIES ${TAO_LIBRARY_DIR} )
    list( APPEND COMISO_LINK_LIBRARIES  ${TAO_LIBRARY} )
239 240 241
    target_include_directories(CoMISo PRIVATE ${TAO_INCLUDE_DIRS})
    target_link_directories   (CoMISo PRIVATE ${TAO_LIBRARY_DIR})
    target_link_libraries     (CoMISo PRIVATE ${TAO_LIBRARY})
242 243 244 245
  else ()
    message (STATUS "TAO or PETSC or MPI not found!")
    set (COMISO_TAO_CONFIG_FILE_SETTINGS "#define COMISO_TAO_AVAILABLE 0" )
  endif ()
246
else ()
247
  message (STATUS "TAO disabled!")
248 249 250 251 252 253
  set (COMISO_TAO_CONFIG_FILE_SETTINGS "#define COMISO_TAO_AVAILABLE 0" )
endif ()

find_package (METIS)
if (METIS_FOUND )
  set (COMISO_METIS_CONFIG_FILE_SETTINGS "#define COMISO_METIS_AVAILABLE 1" )
254

255 256 257
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${METIS_INCLUDE_DIRS} )
  list( APPEND COMISO_LINK_DIRECTORIES   ${METIS_LIBRARY_DIRS} )
  list( APPEND COMISO_LINK_LIBRARIES  ${METIS_LIBRARIES} )
258 259 260
  target_include_directories(CoMISo PRIVATE ${METIS_INCLUDE_DIRS})
  target_link_directories   (CoMISo PRIVATE ${METIS_LIBRARY_DIRS})
  target_link_libraries     (CoMISo PRIVATE ${METIS_LIBRARIES})
261 262 263 264 265 266 267 268 269 270
else()
  set (COMISO_METIS_CONFIG_FILE_SETTINGS "#define COMISO_METIS_AVAILABLE 0" )
  message (STATUS "METIS not found!")
endif ()

find_package (MUMPS)
if (MUMPS_FOUND )
  set (COMISO_MUMPS_CONFIG_FILE_SETTINGS "#define COMISO_MUMPS_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${MUMPS_INCLUDE_DIR} )
  list( APPEND COMISO_LINK_LIBRARIES ${MUMPS_LIBRARY} )
271 272
  target_include_directories(CoMISo PRIVATE ${MUMPS_INCLUDE_DIR})
  target_link_libraries     (CoMISo PRIVATE ${MUMPS_LIBRARY})
273 274 275 276 277 278 279 280
else ()
  message (STATUS "MUMPS not found!")
  set (COMISO_MUMPS_CONFIG_FILE_SETTINGS "#define COMISO_MUMPS_AVAILABLE 0" )
endif ()

find_package (IPOPT)
if (IPOPT_FOUND)
  set (COMISO_IPOPT_CONFIG_FILE_SETTINGS "#define COMISO_IPOPT_AVAILABLE 1" )
Max Lyon's avatar
Max Lyon committed
281 282 283
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${IPOPT_INCLUDE_DIRS} )
  list( APPEND COMISO_LINK_DIRECTORIES ${IPOPT_LIBRARY_DIRS} )
  list( APPEND COMISO_LINK_LIBRARIES ${IPOPT_LIBRARIES} )
284 285 286
  target_include_directories(CoMISo PRIVATE ${IPOPT_INCLUDE_DIRS})
  target_link_directories   (CoMISo PRIVATE ${IPOPT_LIBRARY_DIRS})
  target_link_libraries     (CoMISo PRIVATE ${IPOPT_LIBRARIES})
287
  if ( IPOPT_HSL_LIBRARY_DIR )
288
    set (COMISO_HSL_CONFIG_FILE_SETTINGS "#define COMISO_HSL_AVAILABLE 1" )
289
  else ()
290
    set (COMISO_HSL_CONFIG_FILE_SETTINGS "#define COMISO_HSL_AVAILABLE 0" )
291 292 293 294 295 296 297 298 299 300 301
  endif()
else ()
  message (STATUS "IPOPT or dependency not found!")
  set (COMISO_IPOPT_CONFIG_FILE_SETTINGS "#define COMISO_IPOPT_AVAILABLE 0" )
  set (COMISO_HSL_CONFIG_FILE_SETTINGS "#define COMISO_HSL_AVAILABLE 0" )
endif ()

find_package (EIGEN3)
if (EIGEN3_FOUND )
  set (COMISO_EIGEN3_CONFIG_FILE_SETTINGS "#define COMISO_EIGEN3_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${EIGEN3_INCLUDE_DIR} )
302
  target_include_directories   (CoMISo PUBLIC ${EIGEN3_INCLUDE_DIR})
303 304 305 306 307 308 309 310 311
else ()
  message (FATAL_ERROR "EIGEN3 not found!")
  set (COMISO_EIGEN3_CONFIG_FILE_SETTINGS "#define COMISO_EIGEN3_AVAILABLE 0" )
endif ()

find_package (DCO)
if (DCO_FOUND )
  set (COMISO_DCO_CONFIG_FILE_SETTINGS "#define COMISO_DCO_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${DCO_INCLUDE_DIR} )
312
  target_include_directories   (CoMISo PUBLIC ${DCO_INCLUDE_DIR})
313 314 315 316 317 318 319 320 321 322
else ()
  message (STATUS "DCO not found!")
  set (COMISO_DCO_CONFIG_FILE_SETTINGS "#define COMISO_DCO_AVAILABLE 0" )
endif ()

find_package (CBC)
if (CBC_FOUND )
  set (COMISO_CBC_CONFIG_FILE_SETTINGS "#define COMISO_CBC_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${CBC_INCLUDE_DIRS} )
  list( APPEND COMISO_LINK_LIBRARIES  ${CBC_LIBRARIES} )
323 324
  target_include_directories(CoMISo PRIVATE ${CBC_INCLUDE_DIRS})
  target_link_libraries     (CoMISo PRIVATE ${CBC_LIBRARIES})
325 326 327 328 329 330 331 332 333 334
else ()
  message (STATUS "CBC not found!")
  set (COMISO_CBC_CONFIG_FILE_SETTINGS "#define COMISO_CBC_AVAILABLE 0" )
endif ()

find_package (CLP)
if (CLP_FOUND )
  set (COMISO_CLP_CONFIG_FILE_SETTINGS "#define COMISO_CLP_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${CLP_INCLUDE_DIRS} )
  list( APPEND COMISO_LINK_LIBRARIES  ${CLP_LIBRARIES} )
335 336
  target_include_directories(CoMISo PRIVATE ${CLP_INCLUDE_DIRS})
  target_link_libraries     (CoMISo PRIVATE ${CLP_LIBRARIES})
337 338 339 340 341 342 343 344 345 346
else ()
  message (STATUS "CLP not found!")
  set (COMISO_CLP_CONFIG_FILE_SETTINGS "#define COMISO_CLP_AVAILABLE 0" )
endif ()

find_package (CGL)
if (CGL_FOUND )
  set (COMISO_CGL_CONFIG_FILE_SETTINGS "#define COMISO_CGL_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${CGL_INCLUDE_DIRS} )
  list( APPEND COMISO_LINK_LIBRARIES  ${CGL_LIBRARIES} )
347 348
  target_include_directories(CoMISo PRIVATE ${CGL_INCLUDE_DIRS})
  target_link_libraries     (CoMISo PRIVATE ${CGL_LIBRARIES})
349 350 351 352 353 354 355 356 357 358
else ()
  message (STATUS "CGL not found!")
  set (COMISO_CGL_CONFIG_FILE_SETTINGS "#define COMISO_CGL_AVAILABLE 0" )
endif ()

find_package (COINUTILS)
if (COINUTILS_FOUND )
  set (COMISO_COINUTILS_CONFIG_FILE_SETTINGS "#define COMISO_COINUTILS_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${COINUTILS_INCLUDE_DIRS} )
  list( APPEND COMISO_LINK_LIBRARIES  ${COINUTILS_LIBRARIES} )
359 360
  target_include_directories(CoMISo PRIVATE ${COINUTILS_INCLUDE_DIRS})
  target_link_libraries     (CoMISo PRIVATE ${COINUTILS_LIBRARIES})
361 362 363 364 365 366 367 368 369 370
else ()
  message (STATUS "COINUTILS not found!")
  set (COMISO_COINUTILS_CONFIG_FILE_SETTINGS "#define COMISO_COINUTILS_AVAILABLE 0" )
endif ()

find_package (OSI)
if (OSI_FOUND )
  set (COMISO_OSI_CONFIG_FILE_SETTINGS "#define COMISO_OSI_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${OSI_INCLUDE_DIRS} )
  list( APPEND COMISO_LINK_LIBRARIES  ${OSI_LIBRARIES} )
371 372
  target_include_directories(CoMISo PRIVATE ${OSI_INCLUDE_DIRS})
  target_link_libraries     (CoMISo PRIVATE ${OSI_LIBRARIES})
373 374 375 376 377
else ()
  message (STATUS "OSI not found!")
  set (COMISO_OSI_CONFIG_FILE_SETTINGS "#define COMISO_OSI_AVAILABLE 0" )
endif ()

Martin Heistermann's avatar
Martin Heistermann committed
378
find_package (Taucs QUIET)
379 380
set (SUPRESS_TAUCS OFF CACHE BOOL "Set to ON if CoMISo should be built without TAUCS.")
if (TAUCS_FOUND AND NOT SUPRESS_TAUCS)
Max Lyon's avatar
Max Lyon committed
381
  list (APPEND NEED_LAPACK "Taucs")
382 383 384
  set (COMISO_TAUCS_CONFIG_FILE_SETTINGS "#define COMISO_TAUCS_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${TAUCS_INCLUDE_DIR} )
  list( APPEND COMISO_LINK_LIBRARIES  ${TAUCS_LIBRARY} )
385 386
  target_include_directories(CoMISo PRIVATE ${TAUCS_INCLUDE_DIR})
  target_link_libraries     (CoMISo PRIVATE ${TAUCS_LIBRARY})
387

388 389 390 391 392 393 394 395 396 397 398
else ()
  message (STATUS "TAUCS not found!")
  set (COMISO_TAUCS_CONFIG_FILE_SETTINGS "#define COMISO_TAUCS_AVAILABLE 0" )
endif ()

find_package (GUROBI)
if (GUROBI_FOUND )
  set (COMISO_GUROBI_CONFIG_FILE_SETTINGS "#define COMISO_GUROBI_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${GUROBI_INCLUDE_DIRS} )
#  list( APPEND COMISO_LINK_DIRECTORIES    ${GUROBI_LIBRARY_DIR} )
  list( APPEND COMISO_LINK_LIBRARIES  ${GUROBI_LIBRARIES} )
399 400 401
  target_include_directories(CoMISo PRIVATE ${GUROBI_INCLUDE_DIRS})
#  target_link_directories   (CoMISo PRIVATE ${GUROBI_LIBRARY_DIR})
  target_link_libraries     (CoMISo PRIVATE ${GUROBI_LIBRARIES})
402 403 404 405 406
else ()
  message (STATUS "GUROBI not found!")
  set (COMISO_GUROBI_CONFIG_FILE_SETTINGS "#define COMISO_GUROBI_AVAILABLE 0" )
endif ()

David Bommes's avatar
David Bommes committed
407 408 409 410 411 412
find_package (MOSEK)
if (MOSEK_FOUND )
  set (COMISO_MOSEK_CONFIG_FILE_SETTINGS "#define COMISO_MOSEK_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${MOSEK_INCLUDE_DIRS} )
  list( APPEND COMISO_LINK_DIRECTORIES    ${MOSEK_LIBRARY_DIR} )
  list( APPEND COMISO_LINK_LIBRARIES  ${MOSEK_LIBRARIES} )
413 414 415
  target_include_directories(CoMISo PRIVATE ${MOSEK_INCLUDE_DIRS})
  target_link_directories   (CoMISo PRIVATE ${MOSEK_LIBRARY_DIR})
  target_link_libraries     (CoMISo PRIVATE ${MOSEK_LIBRARIES})
David Bommes's avatar
David Bommes committed
416 417 418 419 420 421
else ()
  message (STATUS "MOSEK not found!")
  set (COMISO_MOSEK_CONFIG_FILE_SETTINGS "#define COMISO_MOSEK_AVAILABLE 0" )
endif ()


422 423 424 425 426 427
find_package (ARPACK)
if (ARPACK_FOUND )
  set (COMISO_ARPACK_CONFIG_FILE_SETTINGS "#define COMISO_ARPACK_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${ARPACK_INCLUDE_DIR} )
#  list( APPEND COMISO_LINK_DIRECTORIES    ${ARPACK_LIBRARY_DIR} )
  list( APPEND COMISO_LINK_LIBRARIES  ${ARPACK_LIBRARY} )
428 429 430
  target_include_directories(CoMISo PRIVATE ${ARPACK_INCLUDE_DIR})
#  target_link_directories   (CoMISo PRIVATE ${ARPACK_LIBRARY_DIR})
  target_link_libraries     (CoMISo PRIVATE ${ARPACK_LIBRARY})
431 432 433 434 435 436 437 438 439 440
else ()
  message (STATUS "ARPACK not found!")
  set (COMISO_ARPACK_CONFIG_FILE_SETTINGS "#define COMISO_ARPACK_AVAILABLE 0" )
endif ()

find_package (CPLEX)
if (CPLEX_FOUND )
  set (COMISO_CPLEX_CONFIG_FILE_SETTINGS "#define COMISO_CPLEX_AVAILABLE 1" )
  list( APPEND COMISO_INCLUDE_DIRECTORIES ${CPLEX_INCLUDE_DIRS} )
  list( APPEND COMISO_LINK_LIBRARIES  ${CPLEX_LIBRARIES} )
441 442
  target_include_directories(CoMISo PRIVATE ${CPLEX_INCLUDE_DIRS})
  target_link_libraries     (CoMISo PRIVATE ${CPLEX_LIBRARIES})
443

444 445 446 447 448 449 450
  #enable c++ support
   add_definitions(-DIL_STD)
else ()
  message (STATUS "CPLEX not found!")
  set (COMISO_CPLEX_CONFIG_FILE_SETTINGS "#define COMISO_CPLEX_AVAILABLE 0" )
endif ()

Max Lyon's avatar
Max Lyon committed
451
set(TMP_CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}")
452 453
set(CMAKE_FIND_LIBRARY_PREFIXES lib "") #Our lapack library is called liblapack.lib. Is there a better way to find it than this?
if (NEED_LAPACK AND NOT SUITESPARSE_FOUND)
454 455 456 457 458
  FIND_PACKAGE(LAPACK)
  if (LAPACK_FOUND)
    list( APPEND COMISO_INCLUDE_DIRECTORIES ${LAPACK_INCLUDE_DIR} )
    list( APPEND COMISO_LINK_DIRECTORIES    ${LAPACK_LIBRARY_DIR} )
    list( APPEND COMISO_LINK_LIBRARIES  ${LAPACK_LIBRARIES} )
459 460 461
    target_include_directories(CoMISo PRIVATE ${LAPACK_INCLUDE_DIR})
    target_link_directories   (CoMISo PRIVATE ${LAPACK_LIBRARY_DIR})
    target_link_libraries     (CoMISo PRIVATE ${LAPACK_LIBRARIES})
462 463 464
  else()
    message(STATUS "LAPACK not found!")
  endif()
465
endif(NEED_LAPACK AND NOT SUITESPARSE_FOUND)
Max Lyon's avatar
Max Lyon committed
466
set(CMAKE_FIND_LIBRARY_PREFIXES "${TMP_CMAKE_FIND_LIBRARY_PREFIXES}")
467 468


469
#target_include_directories(CoMISo PRIVATE "${COMISO_INCLUDE_DIRECTORIES}")
Max Lyon's avatar
Max Lyon committed
470

Martin Heistermann's avatar
Martin Heistermann committed
471 472
#get_target_property(INC_DIRS CoMISo INCLUDE_DIRECTORIES)
#get_target_property(INT_INC_DIRS CoMISo INTERFACE_INCLUDE_DIRECTORIES)
Martin Heistermann's avatar
Martin Heistermann committed
473
#message("Target CoMISo include dirs: ${INC_DIRS}")
Martin Heistermann's avatar
Martin Heistermann committed
474
#message("Target CoMISo int include dirs: ${INT_INC_DIRS}")
Martin Heistermann's avatar
Martin Heistermann committed
475 476
#message("COMISO_INCLUDE_DIRECTORIES: ${COMISO_INCLUDE_DIRECTORIES}")
#message("COMISO_LINK_DIRECTORIES: ${COMISO_LINK_DIRECTORIES}")
Max Lyon's avatar
Max Lyon committed
477

Max Lyon's avatar
Max Lyon committed
478 479 480 481 482 483 484 485 486 487 488 489 490
# generate dllexport macros on windows
if (WIN32)
  add_definitions(-DCOMISODLL)
  add_definitions(-DBASEDLL)
  add_definitions(-D_SCL_SECURE_NO_DEPRECATE)
  # ignore "... needs to have dll-interface to be used by clients"
  #add_definitions(/wd4251)
  target_compile_definitions(CoMISo PRIVATE /wd4251)
endif ()

# enable debug stuff
set (COMISO_ENABLE_DEBUG_OUTPUT TRUE CACHE BOOL "Enable CoMISo Debug Output")
if (COMISO_ENABLE_DEBUG_OUTPUT)
491
  target_compile_definitions(CoMISo PUBLIC -DDEB_ON)
Max Lyon's avatar
Max Lyon committed
492 493 494 495 496 497 498 499 500 501 502 503
endif ()

if (WIN32)
  #add_definitions(-D_USE_MATH_DEFINES -DNOMINMAX)
  target_compile_definitions(CoMISo PRIVATE -D_USE_MATH_DEFINES -DNOMINMAX)
endif ()

if (CMAKE_CXX_COMPILER_ID MATCHES "[cC][lL][aA][nN][gG]")
  # disable unused parameter warning
  #add_definitions(-Wno-unused-parameter -Wno-deprecated-register)
  target_compile_options(CoMISo PRIVATE -Wno-unused-parameter -Wno-deprecated-register)
endif()
Jan Möbius's avatar
Jan Möbius committed
504 505 506
if ( QT5_FOUND )

  if ( NOT WIN32 )
Max Lyon's avatar
Max Lyon committed
507
    # Allow targets depending on VCI find the autogenerated header files
Martin Heistermann's avatar
Martin Heistermann committed
508 509
    #target_include_directories( CoMISo PUBLIC
    #                           ${CMAKE_CURRENT_BINARY_DIR}/CoMISo_autogen/include )
Jan Möbius's avatar
Jan Möbius committed
510
  else()
Max Lyon's avatar
Max Lyon committed
511
     # Allow targets depending on VCI find the autogenerated header files
Martin Heistermann's avatar
Martin Heistermann committed
512 513 514
     #target_include_directories( CoMISo PUBLIC
     #                          $<$<CONFIG:Debug>:${CMAKE_CURRENT_BINARY_DIR}/CoMISo_autogen/include_Debug/>
     #                          $<$<CONFIG:Release>:${CMAKE_CURRENT_BINARY_DIR}/CoMISo_autogen/include_Release/> )
Jan Möbius's avatar
Jan Möbius committed
515 516
  endif()

517 518
endif()

519
target_link_libraries (CoMISo PUBLIC
Max Lyon's avatar
Max Lyon committed
520 521
  ${COMISO_LINK_LIBRARIES}
)
522

523 524 525 526 527
if (NOT TARGET osqp)
  find_package(osqp)
endif()
if (TARGET osqp)
  target_link_libraries (CoMISo PRIVATE osqp)
Max Lyon's avatar
Max Lyon committed
528 529 530 531 532
  set (COMISO_OSQP_CONFIG_FILE_SETTINGS "#define COMISO_OSQP_AVAILABLE 1" )
else()
  set (COMISO_OSQP_CONFIG_FILE_SETTINGS "#define COMISO_OSQP_AVAILABLE 0" )
endif()

533
set_target_properties(CoMISo PROPERTIES INSTALL_RPATH_USE_LINK_PATH 1)
534 535

# display results
Max Lyon's avatar
Max Lyon committed
536
vci_print_configure_header (COMISO "CoMISo")
537 538 539 540

# write config file
configure_file ("${CMAKE_CURRENT_SOURCE_DIR}/Config/config.hh.in"
     "CoMISo/Config/config.hh" @ONLY IMMEDIATE)
541 542 543



544 545 546 547 548
#######################################################################
# Configure the examples last to be sure, that all configure files
# of the library are already there
#######################################################################

549
if(${CMAKE_PROJECT_NAME} MATCHES "CoMISo")
Max Lyon's avatar
Max Lyon committed
550 551 552 553
  set (COMISO_BUILD_EXAMPLES TRUE CACHE BOOL "Build CoMISo Examples")
else()
  set (COMISO_BUILD_EXAMPLES FALSE CACHE BOOL "Build CoMISo Examples")
endif()
554

555
if (COMISO_BUILD_EXAMPLES )
Max Lyon's avatar
Max Lyon committed
556
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/factored_solver/CMakeLists.txt" )
557
    add_subdirectory (Examples/factored_solver)
558
  endif()
Max Lyon's avatar
Max Lyon committed
559
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/quadratic_solver/CMakeLists.txt" )
560
    add_subdirectory (Examples/quadratic_solver)
561
  endif()
Max Lyon's avatar
Max Lyon committed
562
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/test2/CMakeLists.txt" )
563
    add_subdirectory (Examples/test2)
564
  endif()
Max Lyon's avatar
Max Lyon committed
565
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_quadratic_example/CMakeLists.txt" )
566
    add_subdirectory (Examples/small_quadratic_example)
567
  endif()
Max Lyon's avatar
Max Lyon committed
568
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_factored_example/CMakeLists.txt" )
569
    add_subdirectory (Examples/small_factored_example)
570
  endif()
Max Lyon's avatar
Max Lyon committed
571
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/super_sparse_matrix/CMakeLists.txt" )
572
    add_subdirectory (Examples/super_sparse_matrix)
573
  endif()
Max Lyon's avatar
Max Lyon committed
574
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/eigen_solver/CMakeLists.txt" )
575
    add_subdirectory (Examples/eigen_solver)
576
  endif()
Max Lyon's avatar
Max Lyon committed
577
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_nsolver/CMakeLists.txt" )
578
    add_subdirectory (Examples/small_nsolver)
579
  endif()
Max Lyon's avatar
Max Lyon committed
580
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_eigenproblem/CMakeLists.txt" )
581
    add_subdirectory (Examples/small_eigenproblem)
582
  endif()
Max Lyon's avatar
Max Lyon committed
583
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_miqp/CMakeLists.txt" )
584
    add_subdirectory (Examples/small_miqp)
585
  endif()
Max Lyon's avatar
Max Lyon committed
586
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_nleast_squares/CMakeLists.txt" )
587
    add_subdirectory (Examples/small_nleast_squares)
588
  endif()
Max Lyon's avatar
Max Lyon committed
589
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_sparseqr/CMakeLists.txt" )
590
    add_subdirectory (Examples/small_sparseqr)
591
  endif()
Max Lyon's avatar
Max Lyon committed
592
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_quadratic_resolve_example/CMakeLists.txt" )
593
    add_subdirectory (Examples/small_quadratic_resolve_example)
594
  endif()
Max Lyon's avatar
Max Lyon committed
595
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_cplex_soc/CMakeLists.txt" )
596
    add_subdirectory (Examples/small_cplex_soc)
597
  endif()
Max Lyon's avatar
Max Lyon committed
598
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_adolc/CMakeLists.txt" )
599
    add_subdirectory (Examples/small_adolc)
600
  endif()
Max Lyon's avatar
Max Lyon committed
601
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_dco/CMakeLists.txt" )
602
    add_subdirectory (Examples/small_dco)
603
  endif()
Max Lyon's avatar
Max Lyon committed
604
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/vector1_adolc/CMakeLists.txt" )
605
    add_subdirectory (Examples/vector1_adolc)
606
  endif()
Max Lyon's avatar
Max Lyon committed
607
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_linear_problem/CMakeLists.txt" )
608
    add_subdirectory (Examples/small_linear_problem)
609
  endif()
Max Lyon's avatar
Max Lyon committed
610
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/crossfield3d/CMakeLists.txt" )
611
    add_subdirectory (Examples/crossfield3d)
612
  endif()
Max Lyon's avatar
Max Lyon committed
613
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/crossfield3d/CMakeLists.txt" )
614
    add_subdirectory (Examples/crossfield3d_dco)
615
  endif()
Max Lyon's avatar
Max Lyon committed
616
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_finite_element/CMakeLists.txt" )
617
    add_subdirectory (Examples/small_finite_element)
618
  endif()
Max Lyon's avatar
Max Lyon committed
619
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_AQP/CMakeLists.txt" )
620
    add_subdirectory (Examples/small_AQP)
621
  endif()
Max Lyon's avatar
Max Lyon committed
622
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/finite_element_integrability_problem/CMakeLists.txt" )
623
    add_subdirectory (Examples/finite_element_integrability_problem)
David Bommes's avatar
David Bommes committed
624
  endif()
Max Lyon's avatar
Max Lyon committed
625
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_mosek_native/CMakeLists.txt" )
626
    add_subdirectory (Examples/small_mosek_native)
David Bommes's avatar
David Bommes committed
627
  endif()
Max Lyon's avatar
Max Lyon committed
628
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_mosek_fusion_sdp/CMakeLists.txt" )
629
    add_subdirectory (Examples/small_mosek_fusion_sdp)
David Bommes's avatar
David Bommes committed
630
  endif()
Max Lyon's avatar
Max Lyon committed
631
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_symmetric_dirichlet/CMakeLists.txt" )
632 633
  add_subdirectory (Examples/small_symmetric_dirichlet)
  endif()
634
  if( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/Examples/small_exact_constraint_satifaction_example/CMakeLists.txt" )
635 636
  add_subdirectory (Examples/small_exact_constraint_satifaction_example)
  endif()
637

638
endif (COMISO_BUILD_EXAMPLES )
639

640
# Only create install target, when we are building CoMISo standalone
Martin Heistermann's avatar
Martin Heistermann committed
641 642
if(NOT COMISO_NO_INSTALL)

643 644
  include(CMakePackageConfigHelpers)
  include(GNUInstallDirs)
645

646 647 648 649 650
  target_include_directories(CoMISo
    PUBLIC
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/CoMISo>
  )
651

652
  set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/CoMISo)
Martin Heistermann's avatar
Martin Heistermann committed
653

654 655 656
  write_basic_package_version_file(
      CoMISoConfigVersion.cmake
      VERSION ${PROJECT_VERSION}
657
      COMPATIBILITY SameMajorVersion)
Martin Heistermann's avatar
Martin Heistermann committed
658

659 660 661
  install(FILES
      "${CMAKE_CURRENT_BINARY_DIR}/CoMISoConfigVersion.cmake"
      DESTINATION ${INSTALL_CONFIGDIR})
662

Jan Möbius's avatar
Jan Möbius committed
663
  # Install library
664
  install(TARGETS CoMISo EXPORT CoMISoTargets
665
          RUNTIME DESTINATION bin
666 667
          LIBRARY DESTINATION lib
          ARCHIVE DESTINATION lib)
Jan Möbius's avatar
Jan Möbius committed
668

669
  # Install Header Files
670
  install(DIRECTORY .
671
          DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/CoMISo # include/CoMISo
672
          FILES_MATCHING
673 674 675 676 677 678 679 680 681 682 683 684
          PATTERN "*.hh"
          PATTERN "*T.cc"
          PATTERN "CVS" EXCLUDE
          PATTERN ".svn" EXCLUDE
          PATTERN ".git" EXCLUDE
          PATTERN "Examples" EXCLUDE
          PATTERN "CI" EXCLUDE
          PATTERN "tmp" EXCLUDE
          PATTERN "Templates" EXCLUDE
          PATTERN "Debian*" EXCLUDE)

  # Install Config File
Jane Tournois's avatar
Jane Tournois committed
685
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CoMISo/Config/config.hh
686
          DESTINATION include/CoMISo/Config)
Max Lyon's avatar
Max Lyon committed
687

688
  # Create export target to reference CoMISo installation
Max Lyon's avatar
Max Lyon committed
689
  install(EXPORT CoMISoTargets
690
          FILE CoMISoConfig.cmake
Max Lyon's avatar
Max Lyon committed
691
          NAMESPACE CoMISo::
692
          DESTINATION ${INSTALL_CONFIGDIR})
693

694 695 696 697
  export(EXPORT CoMISoTargets
         NAMESPACE CoMISo::
         FILE CoMISoConfig.cmake)
  export(PACKAGE CoMISo)
698
endif()
699

700
list(REMOVE_AT CMAKE_MODULE_PATH -1)