Import('env', 'envCython', 'arch', 'common') gen = "c_generated_code" casadi_model = [ f'{gen}/long_model/long_expl_ode_fun.c', f'{gen}/long_model/long_expl_vde_forw.c', ] casadi_cost_y = [ f'{gen}/long_cost/long_cost_y_fun.c', f'{gen}/long_cost/long_cost_y_fun_jac_ut_xt.c', f'{gen}/long_cost/long_cost_y_hess.c', ] casadi_cost_e = [ f'{gen}/long_cost/long_cost_y_e_fun.c', f'{gen}/long_cost/long_cost_y_e_fun_jac_ut_xt.c', f'{gen}/long_cost/long_cost_y_e_hess.c', ] casadi_cost_0 = [ f'{gen}/long_cost/long_cost_y_0_fun.c', f'{gen}/long_cost/long_cost_y_0_fun_jac_ut_xt.c', f'{gen}/long_cost/long_cost_y_0_hess.c', ] casadi_constraints = [ f'{gen}/long_constraints/long_constr_h_fun.c', f'{gen}/long_constraints/long_constr_h_fun_jac_uxt_zt.c', ] build_files = [f'{gen}/acados_solver_long.c'] + casadi_model + casadi_cost_y + casadi_cost_e + \ casadi_cost_0 + casadi_constraints # extra generated files used to trigger a rebuild generated_files = [ f'{gen}/Makefile', f'{gen}/main_long.c', f'{gen}/acados_solver_long.h', f'{gen}/acados_solver.pxd', f'{gen}/long_model/long_expl_vde_adj.c', f'{gen}/long_model/long_model.h', f'{gen}/long_constraints/long_h_constraint.h', f'{gen}/long_cost/long_cost_y_fun.h', f'{gen}/long_cost/long_cost_y_e_fun.h', f'{gen}/long_cost/long_cost_y_0_fun.h', ] + build_files acados_dir = '#third_party/acados' source_list = ['long_mpc.py', f'{acados_dir}/include/acados_c/ocp_nlp_interface.h', f'{acados_dir}/aarch64/lib/libacados.so', f'{acados_dir}/x86_64/lib/libacados.so', f'{acados_dir}/larch64/lib/libacados.so', ] lenv = env.Clone() lenv.Clean(generated_files, Dir(gen)) lenv.Command(generated_files, source_list, f"cd {Dir('.').abspath} && python3 long_mpc.py") lenv["CFLAGS"].append("-DACADOS_WITH_QPOASES") lenv["CXXFLAGS"].append("-DACADOS_WITH_QPOASES") lenv["CCFLAGS"].append("-Wno-unused") if arch != "Darwin": lenv["LINKFLAGS"].append("-Wl,--disable-new-dtags") lib_solver = lenv.SharedLibrary(f"{gen}/acados_ocp_solver_long", build_files, LIBS=['m', 'acados', 'hpipm', 'blasfeo', 'qpOASES_e']) # generate cython stuff acados_ocp_solver_pyx = File("#pyextra/acados_template/acados_ocp_solver_pyx.pyx") acados_ocp_solver_common = File("#pyextra/acados_template/acados_solver_common.pxd") libacados_ocp_solver_pxd = File(f'{gen}/acados_solver.pxd') libacados_ocp_solver_c = File(f'{gen}/acados_ocp_solver_pyx.c') lenv2 = envCython.Clone() lenv2["LINKFLAGS"] += [lib_solver[0].get_labspath()] lenv2.Command(libacados_ocp_solver_c, [acados_ocp_solver_pyx, acados_ocp_solver_common, libacados_ocp_solver_pxd], f'cython' + \ f' -o {libacados_ocp_solver_c.get_labspath()}' + \ f' -I {libacados_ocp_solver_pxd.get_dir().get_labspath()}' + \ f' -I {acados_ocp_solver_common.get_dir().get_labspath()}' + \ f' {acados_ocp_solver_pyx.get_labspath()}') lib_cython = lenv2.Program(f'{gen}/acados_ocp_solver_pyx.so', [libacados_ocp_solver_c]) lenv2.Depends(lib_cython, lib_solver)