blob: 71c9df1d1e97c02cea038624ad7edc40936d3519 [file] [log] [blame]
Austin Schuh16ce3c72018-01-28 16:17:08 -08001###################################################################################################
2# #
3# This file is part of HPIPM. #
4# #
5# HPIPM -- High Performance Interior Point Method. #
6# Copyright (C) 2017 by Gianluca Frison. #
7# Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. #
8# All rights reserved. #
9# #
10# HPMPC is free software; you can redistribute it and/or #
11# modify it under the terms of the GNU Lesser General Public #
12# License as published by the Free Software Foundation; either #
13# version 2.1 of the License, or (at your option) any later version. #
14# #
15# HPMPC is distributed in the hope that it will be useful, #
16# but WITHOUT ANY WARRANTY; without even the implied warranty of #
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. #
18# See the GNU Lesser General Public License for more details. #
19# #
20# You should have received a copy of the GNU Lesser General Public #
21# License along with HPMPC; if not, write to the Free Software #
22# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA #
23# #
24# Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de #
25# #
26###################################################################################################
27
28cmake_minimum_required(VERSION 2.8.11)
29project(hpipm)
30
31# Target architecture
32set(TARGET GENERIC)
33
34# BLAS and LAPACK version (for LA=BLAS in BLASFEO)
35set(REF_BLAS 0)
36#set(REF_BLAS OPENBLAS)
37#set(REF_BLAS NETLIB)
38#set(REF_BLAS MKL)
39#set(REF_BLAS BLIS)
40#set(REF_BLAS ATLAS)
41
42# BLASFEO
43if(NOT TARGET blasfeo)
44 # BLASFEO installation directory
45 set(BLASFEO_PATH /opt/blasfeo)
46 add_library(blasfeo STATIC IMPORTED)
47 set_target_properties(blasfeo PROPERTIES IMPORTED_LOCATION ${BLASFEO_PATH}/lib/libblasfeo.a)
48 set(BLASFEO_INCLUDE_DIR ${BLASFEO_PATH}/include)
49else()
50 # TODO: horrible hardcode; needs to go
51 set(BLASFEO_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../blasfeo/include)
52endif()
53
54# enable runtine checks
55set(RUNTIME_CHECKS 0)
56#set(RUNTIME_CHECKS 0)
57
58# compiler flags
59set(CMAKE_C_FLAGS "")
60
61# optimization flags
62set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -fPIC")
63#
64if(${REF_BLAS} MATCHES 0)
65 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ")
66endif(${REF_BLAS} MATCHES 0)
67if(${REF_BLAS} MATCHES OPENBLAS)
68 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DREF_BLAS_OPENBLAS -I/opt/openblas/include")
69endif(${REF_BLAS} MATCHES OPENBLAS)
70if(${REF_BLAS} MATCHES BLIS)
71 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DREF_BLAS_BLIS -std=c99")
72endif(${REF_BLAS} MATCHES BLIS)
73if(${REF_BLAS} MATCHES NETLIB)
74 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DREF_BLAS_NETLIB")
75endif(${REF_BLAS} MATCHES NETLIB)
76if(${REF_BLAS} MATCHES MKL)
77 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DREF_BLAS_MKL -m64 -I/opt/intel/mkl/include")
78endif(${REF_BLAS} MATCHES MKL)
79if(${REF_BLAS} MATCHES ATLAS)
80 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DREF_BLAS_ATLAS")
81endif(${REF_BLAS} MATCHES ATLAS)
82
83#
84if(${RUNTIME_CHECKS} MATCHES 1)
85 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DRUNTIME_CHECKS")
86endif(${RUNTIME_CHECKS} MATCHES 1)
87
88# architecture-specific flags
89if(${TARGET} MATCHES GENERIC)
90 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DTARGET_GENERIC")
91endif(${TARGET} MATCHES GENERIC)
92
93# source files
94# dense qp
95file(GLOB DENSE_QP_SRC
96 ${PROJECT_SOURCE_DIR}/dense_qp/d_dense_qp.c
97 ${PROJECT_SOURCE_DIR}/dense_qp/d_dense_qp_sol.c
98 ${PROJECT_SOURCE_DIR}/dense_qp/d_dense_qp_kkt.c
99 ${PROJECT_SOURCE_DIR}/dense_qp/d_dense_qp_ipm_hard.c
100 ${PROJECT_SOURCE_DIR}/dense_qp/s_dense_qp.c
101 ${PROJECT_SOURCE_DIR}/dense_qp/s_dense_qp_sol.c
102 ${PROJECT_SOURCE_DIR}/dense_qp/s_dense_qp_kkt.c
103 ${PROJECT_SOURCE_DIR}/dense_qp/s_dense_qp_ipm_hard.c
104 )
105# ocp qp
106file(GLOB OCP_QP_SRC
107 ${PROJECT_SOURCE_DIR}/ocp_qp/d_ocp_qp.c
108 ${PROJECT_SOURCE_DIR}/ocp_qp/d_ocp_qp_sol.c
109 ${PROJECT_SOURCE_DIR}/ocp_qp/d_ocp_qp_kkt.c
110 ${PROJECT_SOURCE_DIR}/ocp_qp/d_ocp_qp_ipm_hard.c
111 ${PROJECT_SOURCE_DIR}/ocp_qp/s_ocp_qp.c
112 ${PROJECT_SOURCE_DIR}/ocp_qp/s_ocp_qp_sol.c
113 ${PROJECT_SOURCE_DIR}/ocp_qp/s_ocp_qp_kkt.c
114 ${PROJECT_SOURCE_DIR}/ocp_qp/s_ocp_qp_ipm_hard.c
115 ${PROJECT_SOURCE_DIR}/ocp_qp/m_ocp_qp.c
116 ${PROJECT_SOURCE_DIR}/ocp_qp/m_ocp_qp_kkt.c
117 ${PROJECT_SOURCE_DIR}/ocp_qp/m_ocp_qp_ipm_hard.c
118 )
119# core qp
120file(GLOB CORE_QP_SRC
121 ${PROJECT_SOURCE_DIR}/core_qp/d_core_qp_ipm_hard.c
122 ${PROJECT_SOURCE_DIR}/core_qp/d_core_qp_ipm_hard_aux.c
123 ${PROJECT_SOURCE_DIR}/core_qp/s_core_qp_ipm_hard.c
124 ${PROJECT_SOURCE_DIR}/core_qp/s_core_qp_ipm_hard_aux.c
125 )
126# cond
127file(GLOB COND_SRC
128 ${PROJECT_SOURCE_DIR}/cond/d_cond.c
129 ${PROJECT_SOURCE_DIR}/cond/d_cond_aux.c
130 )
131
132set(HPIPM_SRC ${DENSE_QP_SRC} ${OCP_QP_SRC} ${CORE_QP_SRC} ${COND_SRC})
133
134add_library(hpipm ${HPIPM_SRC})
135target_include_directories(hpipm PUBLIC include ${BLASFEO_INCLUDE_DIR})
136target_link_libraries(hpipm blasfeo)
137
138# test problems
139add_subdirectory(test_problems)