CMakeLists.txt 26.2 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
# 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}/>
78 79
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/CoMISo>
80 81 82
)

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

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

Max Lyon's avatar
Max Lyon committed
132
  target_include_directories(CoMISo PUBLIC ${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} )
Max Lyon's avatar
Max Lyon committed
284 285 286
  target_include_directories(CoMISo PUBLIC ${IPOPT_INCLUDE_DIRS})
  target_link_directories   (CoMISo PUBLIC ${IPOPT_LIBRARY_DIRS})
  target_link_libraries     (CoMISo PUBLIC ${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
  set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/CoMISo)
Martin Heistermann's avatar
Martin Heistermann committed
647

648 649 650
  write_basic_package_version_file(
      CoMISoConfigVersion.cmake
      VERSION ${PROJECT_VERSION}
651
      COMPATIBILITY SameMajorVersion)
Martin Heistermann's avatar
Martin Heistermann committed
652

653 654 655
  install(FILES
      "${CMAKE_CURRENT_BINARY_DIR}/CoMISoConfigVersion.cmake"
      DESTINATION ${INSTALL_CONFIGDIR})
656

Jan Möbius's avatar
Jan Möbius committed
657
  # Install library
658
  install(TARGETS CoMISo EXPORT CoMISoTargets
Max Lyon's avatar
Max Lyon committed
659
          RUNTIME DESTINATION lib
660 661
          LIBRARY DESTINATION lib
          ARCHIVE DESTINATION lib)
Jan Möbius's avatar
Jan Möbius committed
662

663
  # Install Header Files
664
  install(DIRECTORY .
665
          DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/CoMISo # include/CoMISo
666
          FILES_MATCHING
667 668 669 670 671 672 673 674 675 676 677 678
          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
679
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CoMISo/Config/config.hh
680
          DESTINATION include/CoMISo/Config)
Max Lyon's avatar
Max Lyon committed
681

682
  # Create export target to reference CoMISo installation
Max Lyon's avatar
Max Lyon committed
683
  install(EXPORT CoMISoTargets
684
          FILE CoMISoConfig.cmake
Max Lyon's avatar
Max Lyon committed
685
          NAMESPACE CoMISo::
686
          DESTINATION ${INSTALL_CONFIGDIR})
687

688 689 690 691
  export(EXPORT CoMISoTargets
         NAMESPACE CoMISo::
         FILE CoMISoConfig.cmake)
  export(PACKAGE CoMISo)
692
endif()