https://github.com/acados/acados
Raw File
Tip revision: c2b6faefe3b69e66ad3f94e81660625e9b5a8e9d authored by Jonathan Frey on 17 December 2019, 14:06:55 UTC
Merge pull request #526 from FreyJo/mex_template_tests
Tip revision: c2b6fae
Makefile.osqp
#
# Copyright 2019 Gianluca Frison, Dimitris Kouzoupis, Robin Verschueren,
# Andrea Zanelli, Niels van Duijkeren, Jonathan Frey, Tommaso Sartor,
# Branimir Novoselnik, Rien Quirynen, Rezart Qelibari, Dang Doan,
# Jonas Koenemann, Yutao Chen, Tobias Schöls, Jonas Schlagenhauf, Moritz Diehl
#
# This file is part of acados.
#
# The 2-Clause BSD License
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.;
#


OSQP_PRINTING = 1
OSQP_DLONG = 1
OSQP_DFLOAT = 0
OSQP_ENABLE_MKL_PARDISO = 1

OSQP_CFLAGS = -fPIC -O3

# ==============================================================================
#  dirs 
# ==============================================================================

OSQP_DIR = $(CURDIR)/external/osqp/

OSQP_INC_DIR = $(OSQP_DIR)include/
OSQP_SRC_DIR = $(OSQP_DIR)src/

OSQP_LIN_SYS_DIR = $(OSQP_DIR)lin_sys/

OSQP_PARDISO_DIR = $(OSQP_DIR)lin_sys/direct/pardiso/

OSQP_QDLDL_DIR = $(OSQP_DIR)lin_sys/direct/qdldl/

OSQP_QDLDL_INC_DIR = $(OSQP_QDLDL_DIR)qdldl_sources/include/
OSQP_QDLDL_SRC_DIR = $(OSQP_QDLDL_DIR)qdldl_sources/src/

OSQP_AMD_INC_DIR = $(OSQP_QDLDL_DIR)amd/include/
OSQP_AMD_SRC_DIR = $(OSQP_QDLDL_DIR)amd/src/

OSQP_EXAMPLES_DIR = $(OSQP_DIR)/examples/
OSQP_EXAMPLES = $(OSQP_EXAMPLES_DIR)osqp_demo

# ==============================================================================
#  lib 
# ==============================================================================

OSQP_LIB_STATIC = libosqp.a
OSQP_LIB_SHARED = libosqp.so
			
# ==============================================================================
#  objs
# ==============================================================================

OSQP_QDLDL_OBJ = $(OSQP_QDLDL_SRC_DIR)qdldl.o

OSQP_QDLDL_INTERFACE_OBJ = $(OSQP_QDLDL_DIR)qdldl_interface.o

OSQP_AMD_OBJ = $(OSQP_AMD_SRC_DIR)amd_1.o \
		  $(OSQP_AMD_SRC_DIR)amd_2.o \
		  $(OSQP_AMD_SRC_DIR)amd_aat.o \
		  $(OSQP_AMD_SRC_DIR)amd_control.o \
		  $(OSQP_AMD_SRC_DIR)amd_defaults.o \
		  $(OSQP_AMD_SRC_DIR)amd_info.o \
		  $(OSQP_AMD_SRC_DIR)amd_order.o \
		  $(OSQP_AMD_SRC_DIR)amd_post_tree.o \
		  $(OSQP_AMD_SRC_DIR)amd_postorder.o \
		  $(OSQP_AMD_SRC_DIR)amd_preprocess.o \
		  $(OSQP_AMD_SRC_DIR)amd_valid.o \
		  $(OSQP_AMD_SRC_DIR)SuiteSparse_config.o \
		  
OSQP_PARDISO_OBJ = $(OSQP_PARDISO_DIR)pardiso_interface.o \
			  $(OSQP_PARDISO_DIR)pardiso_loader.o \
			  
OSQP_LIN_SYS_OBJ = $(OSQP_LIN_SYS_DIR)lib_handler.o \

OSQP_OBJ = $(OSQP_SRC_DIR)auxil.o \
           $(OSQP_SRC_DIR)cs.o \
           $(OSQP_SRC_DIR)ctrlc.o \
           $(OSQP_SRC_DIR)kkt.o \
           $(OSQP_SRC_DIR)lin_alg.o \
           $(OSQP_SRC_DIR)lin_sys.o \
           $(OSQP_SRC_DIR)osqp.o \
           $(OSQP_SRC_DIR)polish.o \
           $(OSQP_SRC_DIR)proj.o \
           $(OSQP_SRC_DIR)scaling.o \
           $(OSQP_SRC_DIR)util.o \
			  
OSQP_ALL_OBJ = $(OSQP_QDLDL_OBJ) $(OSQP_AMD_OBJ) $(OSQP_QDLDL_INTERFACE_OBJ) $(OSQP_PARDISO_OBJ) $(OSQP_LIN_SYS_OBJ) $(OSQP_OBJ)



# ==============================================================================
#  OSQP make build system
# ==============================================================================

$(OSQP_LIB_STATIC): osqp_config $(OSQP_ALL_OBJ)
	$(AR) rcs $@ $(OSQP_ALL_OBJ)

$(OSQP_LIB_SHARED): osqp_config $(OSQP_ALL_OBJ)
	$(CC) -shared -o $@ $(OSQP_ALL_OBJ)

# compile all object files
$(OSQP_QDLDL_SRC_DIR)%.o: $(OSQP_QDLDL_SRC_DIR)%.c
	@echo "Compiling object file" $@
	@$(CC) $(OSQP_CFLAGS) -I$(OSQP_QDLDL_INC_DIR) -c $< -o $@

$(OSQP_AMD_SRC_DIR)%.o: $(OSQP_AMD_SRC_DIR)%.c
	@echo "Compiling object file" $@
	@$(CC) $(OSQP_CFLAGS) -I$(OSQP_AMD_INC_DIR) -I$(OSQP_INC_DIR) -c $< -o $@

$(OSQP_QDLDL_DIR)%.o: $(OSQP_QDLDL_DIR)%.c
	@echo "Compiling object file" $@
	@$(CC) $(OSQP_CFLAGS) -I$(OSQP_QDLDL_DIR) -I$(OSQP_QDLDL_INC_DIR) -I$(OSQP_INC_DIR) -I$(OSQP_AMD_INC_DIR) -c $< -o $@

$(OSQP_PARDISO_DIR)%.o: $(OSQP_PARDISO_DIR)%.c
	@echo "Compiling object file" $@
	@$(CC) $(OSQP_CFLAGS) -I$(OSQP_PARDISO_DIR) -I$(OSQP_INC_DIR) -I$(OSQP_LIN_SYS_DIR) -c $< -o $@

$(OSQP_LIN_SYS_DIR)%.o: $(OSQP_LIN_SYS_DIR)%.c
	@echo "Compiling object file" $@
	@$(CC) $(OSQP_CFLAGS) -I$(OSQP_LIN_SYS_DIR) -I$(OSQP_INC_DIR) -I$(OSQP_QDLDL_INC_DIR) -c $< -o $@

$(OSQP_SRC_DIR)%.o: $(OSQP_SRC_DIR)%.c
	@echo "Compiling object file" $@
	@$(CC) $(OSQP_CFLAGS) -I$(OSQP_INC_DIR) -I$(OSQP_QDLDL_DIR) -I$(OSQP_QDLDL_INC_DIR) -I$(OSQP_PARDISO_DIR) -c $< -o $@

osqp_config:
	@touch $(OSQP_QDLDL_INC_DIR)qdldl_types.h
	@echo "#ifndef QDLDL_TYPES_H" > $(OSQP_QDLDL_INC_DIR)qdldl_types.h
	@echo "# define QDLDL_TYPES_H" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
	@echo "# ifdef __cplusplus" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
	@echo "extern "C" {" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
	@echo "# endif /* ifdef __cplusplus */" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
	@echo "// QDLDL integer and float types" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
ifeq ($(OSQP_DLONG), 1)
	@echo "typedef long long    QDLDL_int;   /* for indices */" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
else
	@echo "typedef int    QDLDL_int;   /* for indices */" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
endif
ifeq ($(OSQP_DFLOAT), 1)
	@echo "typedef float  QDLDL_float; /* for numerical values  */" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
else
	@echo "typedef double  QDLDL_float; /* for numerical values  */" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
endif
	@echo "typedef unsigned char   QDLDL_bool;  /* for boolean values  */" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
	@echo "# ifdef __cplusplus" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
	@echo "}" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
	@echo "# endif /* ifdef __cplusplus */" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
	@echo "#endif /* ifndef QDLDL_TYPES_H */" >> $(OSQP_QDLDL_INC_DIR)qdldl_types.h
	@touch $(OSQP_INC_DIR)osqp_configure.h
	@echo "#ifndef OSQP_CONFIGURE_H" > $(OSQP_INC_DIR)osqp_configure.h
	@echo "# define OSQP_CONFIGURE_H" >> $(OSQP_INC_DIR)osqp_configure.h
	@echo "# ifdef __cplusplus" >> $(OSQP_INC_DIR)osqp_configure.h
	@echo "extern "C" {" >> $(OSQP_INC_DIR)osqp_configure.h
	@echo "# endif /* ifdef __cplusplus */" >> $(OSQP_INC_DIR)osqp_configure.h
	@echo "/* Operative system */" >> $(OSQP_INC_DIR)osqp_configure.h
ifeq ($(OS), LINUX)
	@echo "#define IS_LINUX" >> $(OSQP_INC_DIR)osqp_configure.h
endif
ifeq ($(OS), MAC)
	@echo "#define IS_MAC" >> $(OSQP_INC_DIR)osqp_configure.h
endif
ifeq ($(OS), WINDOWS)
	@echo "#define IS_WINDOWS" >> $(OSQP_INC_DIR)osqp_configure.h
endif
ifeq ($(OSQP_PRINTING), 1)
	@echo "/* PRINTING */" >> $(OSQP_INC_DIR)osqp_configure.h
	@echo "#define PRINTING" >> $(OSQP_INC_DIR)osqp_configure.h
endif
ifeq ($(OSQP_DLONG), 1)
	@echo "/* DLONG */" >> $(OSQP_INC_DIR)osqp_configure.h
	@echo "#define DLONG" >> $(OSQP_INC_DIR)osqp_configure.h
endif
ifeq ($(OSQP_ENABLE_MKL_PARDISO),1)
	@echo "/* ENABLE_MKL_PARDISO */" >> $(OSQP_INC_DIR)osqp_configure.h
	@echo "#define ENABLE_MKL_PARDISO" >> $(OSQP_INC_DIR)osqp_configure.h
endif
	@echo "# ifdef __cplusplus" >> $(OSQP_INC_DIR)osqp_configure.h
	@echo "}" >> $(OSQP_INC_DIR)osqp_configure.h
	@echo "# endif /* ifdef __cplusplus */" >> $(OSQP_INC_DIR)osqp_configure.h
	@echo "#endif /* ifndef OSQP_CONFIGURE_H */" >> $(OSQP_INC_DIR)osqp_configure.h

back to top