
# model
MODEL_SRC=
MODEL_SRC+= quadrotor_ode_model/quadrotor_ode_expl_ode_fun.c
MODEL_SRC+= quadrotor_ode_model/quadrotor_ode_expl_vde_forw.c
MODEL_SRC+= quadrotor_ode_model/quadrotor_ode_expl_vde_adj.c
MODEL_SRC_2 = $(patsubst %.c,c_generated_code/%.c,$(MODEL_SRC))
MODEL_OBJ := $(MODEL_SRC_2:.c=.o)

# optimal control problem - mostly CasADi exports
OCP_SRC=
OCP_SRC+= quadrotor_ode_cost/quadrotor_ode_cost_y_0_fun.c
OCP_SRC+= quadrotor_ode_cost/quadrotor_ode_cost_y_0_fun_jac_ut_xt.c
OCP_SRC+= quadrotor_ode_cost/quadrotor_ode_cost_y_0_hess.c
OCP_SRC+= quadrotor_ode_cost/quadrotor_ode_cost_y_fun.c
OCP_SRC+= quadrotor_ode_cost/quadrotor_ode_cost_y_fun_jac_ut_xt.c
OCP_SRC+= quadrotor_ode_cost/quadrotor_ode_cost_y_hess.c
OCP_SRC+= quadrotor_ode_cost/quadrotor_ode_cost_y_e_fun.c
OCP_SRC+= quadrotor_ode_cost/quadrotor_ode_cost_y_e_fun_jac_ut_xt.c
OCP_SRC+= quadrotor_ode_cost/quadrotor_ode_cost_y_e_hess.c
OCP_SRC+= acados_solver_quadrotor_ode.c
OCP_SRC_2 = $(patsubst %.c,c_generated_code/%.c,$(OCP_SRC))
OCP_OBJ := $(OCP_SRC_2:.c=.o)

ACADOS_OBJ=
ACADOS_OBJ+=$(MODEL_OBJ)
ACADOS_OBJ+=$(OCP_OBJ)
ACADOS_OBJ+= c_generated_code/acados_sim_solver_quadrotor_ode.o

# for simulation
SIM_SRC= cpp/simulation.cpp
SIM_OBJ := $(SIM_SRC:.cpp=.o)

SRC_DIR := cpp
HPP_DIR := hpp
OBJ_DIR := build_objs

SRC_FILES := $(wildcard $(SRC_DIR)/*.cpp)
OBJ_FILES := $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRC_FILES))
HPP_FILES := $(wildcard $(HPP_DIR)/*.hpp)

INCLUDE_PATH = $(ACADOS_SOURCE_DIR)/include
LIB_PATH = $(ACADOS_SOURCE_DIR)/lib


# preprocessor flags for make's implicit rules
CPPFLAGS+= -I$(INCLUDE_PATH)
CPPFLAGS+= -I$(INCLUDE_PATH)/acados
CPPFLAGS+= -I$(INCLUDE_PATH)/blasfeo/include
CPPFLAGS+= -I$(INCLUDE_PATH)/hpipm/include
CPPFLAGS+= -I/usr/local/include # for yaml-cpp
CPPFLAGS+= -I/usr/include/eigen3 # for Eigen on Parakh's computer
CPPFLAGS+= -I/usr/local/include/eigen3 # for Eigen on Honza's computer
CPPFLAGS+= -Ihpp
# CPPFLAGS+= -g

LDFLAGS=
# LDFLAGS+= -L../c_generated_code
# linker flags
LDFLAGS+= -L/usr/local/lib # for yaml
LDFLAGS+= -L$(LIB_PATH)
 

# link to libraries
LDLIBS+= -lacados
LDLIBS+= -lhpipm
LDLIBS+= -lblasfeo
LDLIBS+= -lm
# LDLIBS+= -lacados_solver_quadrotor_ode
LDLIBS+= -lstdc++
LDLIBS+= -lyaml-cpp # for yaml


simulation: $(OBJ_FILES) $(HPP_FILES) $(ACADOS_OBJ)
	$(CC) -o $@ $(OBJ_FILES) $(ACADOS_OBJ) $(LDFLAGS) $(CPPFLAGS) $(LDLIBS)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
	$(CC) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<

clear:
	rm $(OBJ_FILES)
clean:
	rm $(OBJ_FILES)


