vendor/scs/CMakeLists.txt in scs-0.4.0 vs vendor/scs/CMakeLists.txt in scs-0.4.1
- old
+ new
@@ -1,101 +1,105 @@
-# CMakeLists.txt file for scs
-# This software may be modified and distributed under the terms of the MIT License
+# CMakeLists.txt file for scs. This software may be modified and distributed
+# under the terms of the MIT License
cmake_minimum_required(VERSION 3.5)
-project(scs
+project(
+ scs
LANGUAGES C
- VERSION 3.2.0)
+ VERSION 3.2.3)
-# Defines the CMAKE_INSTALL_LIBDIR, CMAKE_INSTALL_BINDIR and many other useful macros.
-# See https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html
+# Defines the CMAKE_INSTALL_LIBDIR, CMAKE_INSTALL_BINDIR and many other useful
+# macros. See https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html
include(GNUInstallDirs)
-# Control where libraries and executables are placed during the build.
-# With the following settings executables are placed in <the top level of the
-# build tree>/bin and libraries/archives in <top level of the build tree>/lib.
-# This is particularly useful to run ctests on libraries built on Windows
-# machines: tests, which are executables, are placed in the same folders of
-# dlls, which are treated as executables as well, so that they can properly
-# find the libraries to run. This is a because of missing RPATH on Windows.
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}")
-set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
-set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
+# Control where libraries and executables are placed during the build. With the
+# following settings executables are placed in <the top level of the build
+# tree>/bin and libraries/archives in <top level of the build tree>/lib. This is
+# particularly useful to run ctests on libraries built on Windows machines:
+# tests, which are executables, are placed in the same folders of dlls, which
+# are treated as executables as well, so that they can properly find the
+# libraries to run. This is a because of missing RPATH on Windows.
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY
+ "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}")
+set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
+ "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
+set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY
+ "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
-# To build shared libraries in Windows, we set CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS to TRUE.
-# See https://cmake.org/cmake/help/v3.4/variable/CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS.html
-# See https://blog.kitware.com/create-dlls-on-windows-without-declspec-using-new-cmake-export-all-feature/
+# To build shared libraries in Windows, we set CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS
+# to TRUE. See
+# https://cmake.org/cmake/help/v3.4/variable/CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS.html
+# See
+# https://blog.kitware.com/create-dlls-on-windows-without-declspec-using-new-cmake-export-all-feature/
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
# Under MSVC, we set CMAKE_DEBUG_POSTFIX to "d" to add a trailing "d" to library
# built in debug mode. In this Windows user can compile, build and install the
# library in both Release and Debug configuration avoiding naming clashes in the
# installation directories.
if(MSVC)
set(CMAKE_DEBUG_POSTFIX "d")
endif()
-# Build position independent code.
-# Position Independent Code (PIC) is commonly used for shared libraries so that
-# the same shared library code can be loaded in each program address space in a
-# location where it will not overlap with any other uses of such memory.
-# In particular, this option avoids problems occurring when a process wants to
-# load more than one shared library at the same virtual address.
-# Since shared libraries cannot predict where other shared libraries could be
-# loaded, this is an unavoidable problem with the traditional shared library
-# concept.
-# Generating position-independent code is often the default behavior for most
-# modern compilers.
-# Moreover linking a static library that is not built with PIC from a shared
-# library will fail on some compiler/architecture combinations.
-# Further details on PIC can be found here:
+# Build position independent code. Position Independent Code (PIC) is commonly
+# used for shared libraries so that the same shared library code can be loaded
+# in each program address space in a location where it will not overlap with any
+# other uses of such memory. In particular, this option avoids problems
+# occurring when a process wants to load more than one shared library at the
+# same virtual address. Since shared libraries cannot predict where other shared
+# libraries could be loaded, this is an unavoidable problem with the traditional
+# shared library concept. Generating position-independent code is often the
+# default behavior for most modern compilers. Moreover linking a static library
+# that is not built with PIC from a shared library will fail on some
+# compiler/architecture combinations. Further details on PIC can be found here:
# https://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
-# Disable C and C++ compiler extensions.
-# C/CXX_EXTENSIONS are ON by default to allow the compilers to use extended
-# variants of the C/CXX language.
-# However, this could expose cross-platform bugs in user code or in the headers
-# of third-party dependencies and thus it is strongly suggested to turn
-# extensions off.
+# Disable C and C++ compiler extensions. C/CXX_EXTENSIONS are ON by default to
+# allow the compilers to use extended variants of the C/CXX language. However,
+# this could expose cross-platform bugs in user code or in the headers of
+# third-party dependencies and thus it is strongly suggested to turn extensions
+# off.
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_EXTENSIONS OFF)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
-### Options
-# Shared/Dynamic or Static library?
+# Options Shared/Dynamic or Static library?
option(BUILD_SHARED_LIBS "Build libraries as shared as opposed to static" ON)
# Enable RPATH support for installed binaries and libraries
include(AddInstallRPATHSupport)
-add_install_rpath_support(BIN_DIRS "${CMAKE_INSTALL_FULL_BINDIR}"
- LIB_DIRS "${CMAKE_INSTALL_FULL_LIBDIR}"
- INSTALL_NAME_DIR "${CMAKE_INSTALL_FULL_LIBDIR}"
+add_install_rpath_support(
+ BIN_DIRS
+ "${CMAKE_INSTALL_FULL_BINDIR}"
+ LIB_DIRS
+ "${CMAKE_INSTALL_FULL_LIBDIR}"
+ INSTALL_NAME_DIR
+ "${CMAKE_INSTALL_FULL_LIBDIR}"
USE_LINK_PATH)
-# Encourage user to specify a build type (e.g. Release, Debug, etc.), otherwise set it to Release.
+# Encourage user to specify a build type (e.g. Release, Debug, etc.), otherwise
+# set it to Release.
if(NOT CMAKE_CONFIGURATION_TYPES)
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "Setting build type to 'Release' as none was specified.")
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY VALUE "Release")
endif()
endif()
-
# Build test related commands?
option(BUILD_TESTING "Create tests using CMake" OFF)
if(BUILD_TESTING)
enable_testing()
endif()
-# Add uninstall target
-# After 'make install' can run 'make uninstall' to remove.
+# Add uninstall target After 'make install' can run 'make uninstall' to remove.
include(AddUninstallTarget)
-### Some variables useful for sampling the building process
-# Note that the GPU profile is not compiled.
+# Some variables useful for sampling the building process. Note that the GPU
+# profile is not compiled.
set(LINSYS linsys)
set(DIRSRC ${LINSYS}/cpu/direct)
set(INDIRSRC ${LINSYS}/cpu/indirect)
set(EXTERNAL ${LINSYS}/external)
@@ -107,11 +111,18 @@
# Use long integers for indexing
option(DLONG "Use long integers (64bit) for indexing" OFF)
message(STATUS "Long integers (64bit) are ${DLONG}")
+# Disable all printing
+option(NO_PRINTING "Disables all printing" OFF)
+message(STATUS "Printing is NOT ${NO_PRINTING}")
+# Disable all read/write functionality
+option(NO_READ_WRITE "Disables all read/write functionality" OFF)
+message(STATUS "Read/write functionality is NOT ${NO_READ_WRITE}")
+
set(COMPILER_OPTS "-DUSE_LAPACK -DCTRLC")
# Primitive types
if(SFLOAT)
set(SCS_FLOAT_TYPE "float")
@@ -125,196 +136,301 @@
set(COMPILER_OPTS "-DDLONG ${COMPILER_OPTS}")
else()
set(SCS_INT_TYPE "int")
endif()
+if(NO_PRINTING)
+ set(COMPILER_OPTS "-DNO_PRINTING=1 ${COMPILER_OPTS}")
+endif()
+
+if(NO_READ_WRITE)
+ set(COMPILER_OPTS "-DNO_READ_WRITE=1 ${COMPILER_OPTS}")
+endif()
+
message(STATUS "COMPILER_OPTS = ${COMPILER_OPTS}")
-# TODO this is a hack that overwrites the scs_types.h file, we should
-# find a way to do this that doesn't pollute the master directory.
+# TODO this is a hack that overwrites the scs_types.h file, we should find a way
+# to do this that doesn't pollute the master directory.
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/scs_types.h.in
- ${CMAKE_CURRENT_SOURCE_DIR}/include/scs_types.h
- NEWLINE_STYLE LF)
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/scs_types.h NEWLINE_STYLE LF)
-# Public headers
-set(${PROJECT_NAME}_PUBLIC_HDR
- include/scs_types.h
- include/scs.h)
+# Public headers
+set(${PROJECT_NAME}_PUBLIC_HDR include/scs_types.h include/scs.h)
# Common source files
set(${PROJECT_NAME}_SRC
- src/aa.c
- src/cones.c
- src/ctrlc.c
- src/linalg.c
- src/normalize.c
- src/rw.c
- src/scs.c
- src/scs_version.c
- src/util.c
- ${LINSYS}/csparse.c
- ${LINSYS}/scs_matrix.c)
+ src/aa.c
+ src/cones.c
+ src/ctrlc.c
+ src/exp_cone.c
+ src/linalg.c
+ src/normalize.c
+ src/rw.c
+ src/scs.c
+ src/scs_version.c
+ src/util.c
+ ${LINSYS}/csparse.c
+ ${LINSYS}/scs_matrix.c)
# Common header files
set(${PROJECT_NAME}_HDR
- include/aa.h
- include/cones.h
- include/ctrlc.h
- include/glbopts.h
- include/linalg.h
- include/linsys.h
- include/normalize.h
- include/rw.h
- include/scs.h
- include/scs_blas.h
- include/scs_types.h
- include/scs_work.h
- include/util.h
- ${LINSYS}/csparse.h
- ${LINSYS}/scs_matrix.h)
+ include/aa.h
+ include/cones.h
+ include/ctrlc.h
+ include/glbopts.h
+ include/linalg.h
+ include/linsys.h
+ include/normalize.h
+ include/rw.h
+ include/scs.h
+ include/scs_blas.h
+ include/scs_types.h
+ include/scs_work.h
+ include/util.h
+ ${LINSYS}/csparse.h
+ ${LINSYS}/scs_matrix.h)
# get all the c file in amd/external
-file(GLOB ${PROJECT_NAME}_AMD_EXTERNAL_SRC
- ${EXTERNAL}/amd/*.c
- )
+file(GLOB ${PROJECT_NAME}_AMD_EXTERNAL_SRC ${EXTERNAL}/amd/*.c)
# get all the h file in amd/external
-file(GLOB ${PROJECT_NAME}_AMD_EXTERNAL_HDR
- ${EXTERNAL}/amd/*.h
- )
+file(GLOB ${PROJECT_NAME}_AMD_EXTERNAL_HDR ${EXTERNAL}/amd/*.h)
# get all the c file in amd/external
-file(GLOB ${PROJECT_NAME}_LDL_EXTERNAL_HDR
- ${EXTERNAL}/qdldl/*.h
- )
+file(GLOB ${PROJECT_NAME}_LDL_EXTERNAL_HDR ${EXTERNAL}/qdldl/*.h)
-### Direct method
-# Here we compile the direct method library
+# ##############################################################################
+# Direct method. Here we compile the direct method library.
set(${PROJECT_NAME}_DIRECT ${PROJECT_NAME}dir)
-add_library(${${PROJECT_NAME}_DIRECT}
+add_library(
+ ${${PROJECT_NAME}_DIRECT}
${${PROJECT_NAME}_HDR}
${${PROJECT_NAME}_SRC}
${DIRSRC}/private.c
${DIRSRC}/private.h
${EXTERNAL}/qdldl/qdldl.c
${${PROJECT_NAME}_AMD_EXTERNAL_SRC}
${${PROJECT_NAME}_AMD_EXTERNAL_HDR}
${${PROJECT_NAME}_LDL_EXTERNAL_HDR})
-target_include_directories(${${PROJECT_NAME}_DIRECT} PRIVATE
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${EXTERNAL}/amd;${CMAKE_CURRENT_SOURCE_DIR}/${EXTERNAL}/qdldl;${CMAKE_CURRENT_SOURCE_DIR}/${DIRSRC};${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>")
+target_include_directories(
+ ${${PROJECT_NAME}_DIRECT}
+ PRIVATE
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${EXTERNAL}/amd;${CMAKE_CURRENT_SOURCE_DIR}/${EXTERNAL}/qdldl;${CMAKE_CURRENT_SOURCE_DIR}/${DIRSRC};${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>"
+)
-target_include_directories(${${PROJECT_NAME}_DIRECT} PUBLIC
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
- "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/scs>")
+target_include_directories(
+ ${${PROJECT_NAME}_DIRECT}
+ PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
+ "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/scs>")
# Compiled with blas and lapack, can solve LPs, SOCPs, SDPs, ECPs, and PCPs
target_compile_definitions(${${PROJECT_NAME}_DIRECT} PRIVATE ${COMPILER_OPTS})
# The library depends on math (m) blas and lapack
-target_link_libraries(${${PROJECT_NAME}_DIRECT} PRIVATE
- m
- blas
- lapack)
+target_link_libraries(${${PROJECT_NAME}_DIRECT} PRIVATE m blas lapack)
# Set some properties
-set_target_properties(${${PROJECT_NAME}_DIRECT} PROPERTIES
- VERSION ${scs_VERSION}
- PUBLIC_HEADER "${${PROJECT_NAME}_PUBLIC_HDR}")
+set_target_properties(
+ ${${PROJECT_NAME}_DIRECT}
+ PROPERTIES VERSION ${scs_VERSION} PUBLIC_HEADER
+ "${${PROJECT_NAME}_PUBLIC_HDR}")
add_library(scs::${${PROJECT_NAME}_DIRECT} ALIAS ${${PROJECT_NAME}_DIRECT})
# Install the library
-install(TARGETS ${${PROJECT_NAME}_DIRECT}
- EXPORT ${PROJECT_NAME}
+install(
+ TARGETS ${${PROJECT_NAME}_DIRECT}
+ EXPORT ${PROJECT_NAME}
COMPONENT runtime
- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT shlib
- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT bin
- PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/scs")
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT shlib
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT bin
+ PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/scs")
# Add the direct method to the set of the compiled targets
-set_property(GLOBAL APPEND PROPERTY scs_TARGETS ${${PROJECT_NAME}_DIRECT})
+set_property(GLOBAL APPEND PROPERTY SCS_TARGETS ${${PROJECT_NAME}_DIRECT})
-### Indirect method
-# Here we compile the indirect method library
+# ##############################################################################
+
+# Indirect method. Here we compile the indirect method library.
set(${PROJECT_NAME}_INDIRECT ${PROJECT_NAME}indir)
-add_library(${${PROJECT_NAME}_INDIRECT}
- ${${PROJECT_NAME}_HDR}
- ${${PROJECT_NAME}_SRC}
- ${INDIRSRC}/private.c
- ${INDIRSRC}/private.h
- ${${${PROJECT_NAME}_INDIRECT}_HDR}
- )
+add_library(
+ ${${PROJECT_NAME}_INDIRECT}
+ ${${PROJECT_NAME}_HDR} ${${PROJECT_NAME}_SRC} ${INDIRSRC}/private.c
+ ${INDIRSRC}/private.h ${${${PROJECT_NAME}_INDIRECT}_HDR})
+target_include_directories(
+ ${${PROJECT_NAME}_INDIRECT}
+ PRIVATE
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${INDIRSRC};${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>"
+)
-target_include_directories(${${PROJECT_NAME}_INDIRECT} PRIVATE
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${EXTERNAL}/amd;${CMAKE_CURRENT_SOURCE_DIR}/${EXTERNAL}/qdldl;${CMAKE_CURRENT_SOURCE_DIR}/${INDIRSRC};${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>")
+target_include_directories(
+ ${${PROJECT_NAME}_INDIRECT}
+ PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
+ "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/scs>")
-target_include_directories(${${PROJECT_NAME}_INDIRECT} PUBLIC
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
- "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/scs>")
-
# Compiled with blas and lapack, can solve LPs, SOCPs, SDPs, ECPs, and PCPs
-target_compile_definitions(${${PROJECT_NAME}_INDIRECT} PRIVATE ${COMPILER_OPTS} -DINDIRECT)
+target_compile_definitions(${${PROJECT_NAME}_INDIRECT} PRIVATE ${COMPILER_OPTS}
+ -DINDIRECT)
# The library depends on math (m) blas and lapack
-target_link_libraries(${${PROJECT_NAME}_INDIRECT} PUBLIC
- m
- blas
- lapack)
+target_link_libraries(${${PROJECT_NAME}_INDIRECT} PUBLIC m blas lapack)
# Set some properties
-set_target_properties(${${PROJECT_NAME}_INDIRECT} PROPERTIES
- VERSION ${scs_VERSION}
- PUBLIC_HEADER "${${PROJECT_NAME}_PUBLIC_HDR}")
+set_target_properties(
+ ${${PROJECT_NAME}_INDIRECT}
+ PROPERTIES VERSION ${scs_VERSION} PUBLIC_HEADER
+ "${${PROJECT_NAME}_PUBLIC_HDR}")
add_library(scs::${${PROJECT_NAME}_INDIRECT} ALIAS ${${PROJECT_NAME}_INDIRECT})
# Install the library
-install(TARGETS ${${PROJECT_NAME}_INDIRECT}
- EXPORT ${PROJECT_NAME}
+install(
+ TARGETS ${${PROJECT_NAME}_INDIRECT}
+ EXPORT ${PROJECT_NAME}
COMPONENT runtime
- LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT shlib
- ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
- RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT bin
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT shlib
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT bin
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/scs")
# Add the indirect method to the set of the compiled targets
-set_property(GLOBAL APPEND PROPERTY scs_TARGETS ${${PROJECT_NAME}_INDIRECT})
+set_property(GLOBAL APPEND PROPERTY SCS_TARGETS ${${PROJECT_NAME}_INDIRECT})
-### Install the .cmake file.
-# Thanks to thanks file it will be possible to link scs to consumer libraries
+# ##############################################################################
+
+# If MKLROOT is defined, then we install the MKL version.
+if(DEFINED ENV{MKLROOT})
+
+ message(STATUS "MKLROOT set to $ENV{MKLROOT}")
+ message(STATUS "Will install SCS-MKL (libscsmkl).")
+
+ set(MKLSRC ${LINSYS}/mkl/direct)
+
+ # Here we compile the direct MKL pardiso library
+ set(${PROJECT_NAME}_MKL ${PROJECT_NAME}mkl)
+ add_library(
+ ${${PROJECT_NAME}_MKL}
+ ${${PROJECT_NAME}_HDR} ${${PROJECT_NAME}_SRC} ${MKLSRC}/private.c
+ ${MKLSRC}/private.h ${${${PROJECT_NAME}_MKL}_HDR})
+
+ target_include_directories(
+ ${${PROJECT_NAME}_MKL}
+ PRIVATE
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${MKLSRC};${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>"
+ )
+
+ target_include_directories(
+ ${${PROJECT_NAME}_MKL}
+ PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
+ "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/scs>")
+
+ target_compile_definitions(${${PROJECT_NAME}_MKL} PRIVATE ${COMPILER_OPTS})
+ # See:
+ # https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-link-line-advisor.html
+ # This is probably not correct for other systems. TODO: make SCS-MKL
+ # work for all combinations of platform / compiler / threading options.
+ target_link_options(${${PROJECT_NAME}_MKL} PRIVATE "LINKER:--no-as-needed")
+ target_link_directories(${${PROJECT_NAME}_MKL} PRIVATE $ENV{MKLROOT}/lib)
+ target_link_libraries(
+ ${${PROJECT_NAME}_MKL}
+ PRIVATE m
+ mkl_rt
+ mkl_gnu_thread
+ mkl_core
+ gomp
+ pthread
+ dl)
+
+ # Set some properties
+ set_target_properties(
+ ${${PROJECT_NAME}_MKL}
+ PROPERTIES VERSION ${scs_VERSION} PUBLIC_HEADER
+ "${${PROJECT_NAME}_PUBLIC_HDR}")
+
+ add_library(scs::${${PROJECT_NAME}_MKL} ALIAS ${${PROJECT_NAME}_MKL})
+
+ # Install the library
+ install(
+ TARGETS ${${PROJECT_NAME}_MKL}
+ EXPORT ${PROJECT_NAME}
+ COMPONENT runtime
+ LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT shlib
+ ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" COMPONENT lib
+ RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT bin
+ PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/scs")
+
+ # Add the mkl method to the set of the compiled targets
+ set_property(GLOBAL APPEND PROPERTY SCS_TARGETS ${${PROJECT_NAME}_MKL})
+else()
+ message(
+ STATUS "MKLROOT environment variable is undefined, skipping SCS-MKL install"
+ )
+endif()
+
+# ##############################################################################
+
+# Install the .cmake file. It is possible to link scs o consumer libraries.
include(InstallBasicPackageFiles)
-install_basic_package_files(${PROJECT_NAME}
- NAMESPACE scs::
- VERSION ${${PROJECT_NAME}_VERSION}
- TARGETS_PROPERTY scs_TARGETS
- COMPATIBILITY SameMajorVersion
- VARS_PREFIX ${PROJECT_NAME}
+install_basic_package_files(
+ ${PROJECT_NAME}
+ NAMESPACE
+ scs::
+ VERSION
+ ${${PROJECT_NAME}_VERSION}
+ TARGETS_PROPERTY
+ SCS_TARGETS
+ COMPATIBILITY
+ SameMajorVersion
+ VARS_PREFIX
+ ${PROJECT_NAME}
NO_CHECK_REQUIRED_COMPONENTS_MACRO)
-### Add the tests
+# Add the tests
if(BUILD_TESTING)
- add_executable(run_tests_direct test/run_tests.c)
+ add_executable(run_tests_direct test/run_tests.c)
target_compile_definitions(run_tests_direct PRIVATE ${COMPILER_OPTS})
- target_link_libraries(run_tests_direct PRIVATE
- scs::scsdir)
- target_include_directories(run_tests_direct PRIVATE
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>" )
+ target_link_libraries(run_tests_direct PRIVATE scs::scsdir)
+ target_include_directories(
+ run_tests_direct
+ PRIVATE
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>"
+ )
- add_test(NAME run_tests_direct
+ add_test(
+ NAME run_tests_direct
COMMAND run_tests_direct
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
- add_executable(run_tests_indirect test/run_tests.c)
+ add_executable(run_tests_indirect test/run_tests.c)
target_compile_definitions(run_tests_indirect PRIVATE ${COMPILER_OPTS})
- target_link_libraries(run_tests_indirect PRIVATE
- scs::scsindir)
- target_include_directories(run_tests_indirect PRIVATE
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>" )
+ target_link_libraries(run_tests_indirect PRIVATE scs::scsindir)
+ target_include_directories(
+ run_tests_indirect
+ PRIVATE
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>"
+ )
- add_test(NAME run_tests_indirect
+ add_test(
+ NAME run_tests_indirect
COMMAND run_tests_indirect
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+
+ if(DEFINED ENV{MKLROOT})
+ add_executable(run_tests_mkl test/run_tests.c)
+ target_compile_definitions(run_tests_mkl PRIVATE ${COMPILER_OPTS})
+ target_link_libraries(run_tests_mkl PRIVATE scs::scsmkl)
+ target_include_directories(
+ run_tests_mkl
+ PRIVATE
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>"
+ )
+
+ add_test(
+ NAME run_tests_mkl
+ COMMAND run_tests_mkl
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
+ endif()
endif()