cmake_minimum_required(VERSION 3.0.0)
project(interface_usage VERSION 0.1.0)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
if(APPLE)
  set(CMAKE_MACOSX_RPATH ON)
  set(CMAKE_INSTALL_RPATH "@loader_path/;@loader_path/lib/")
else()
  set(CMAKE_INSTALL_RPATH "$ORIGIN;$ORIGIN/lib")
endif()

set(MODEL_NAME "rockit_model" CACHE STRING "Name of the model")

add_subdirectory(acados)

# Get all c files in directory rockit_model_model
file(GLOB_RECURSE ROCKIT_MODEL_MODEL_SRC ${MODEL_NAME}_model/*.c)
file(GLOB_RECURSE ROCKIT_MODEL_COST_SRC ${MODEL_NAME}_cost/*.c)
file(GLOB_RECURSE ROCKIT_MODEL_CONSTRAINTS_SRC ${MODEL_NAME}_constraints/*.c)

file(GLOB_RECURSE ROCKIT_MODEL_MODEL_HEADERS ${MODEL_NAME}_model/*.h)
file(GLOB_RECURSE ROCKIT_MODEL_COST_HEADERS ${MODEL_NAME}_cost/*.h)
file(GLOB_RECURSE ROCKIT_MODEL_CONSTRAINTS_HEADERS ${MODEL_NAME}_constraints/*.h)

set(ROCKIT_MODEL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/acados_driver.c ${ROCKIT_MODEL_MODEL_SRC} ${ROCKIT_MODEL_COST_SRC} ${ROCKIT_MODEL_CONSTRAINTS_SRC} ${CMAKE_CURRENT_SOURCE_DIR}/acados_solver_${MODEL_NAME}.c)
set(ROCKIT_MODEL_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/rockit_config.h ${ROCKIT_MODEL_MODEL_HEADERS} ${ROCKIT_MODEL_COST_HEADERS} ${ROCKIT_MODEL_CONSTRAINTS_HEADERS} ${CMAKE_CURRENT_SOURCE_DIR}/acados_solver_${MODEL_NAME}.h)

add_library(acados_driver SHARED ${ROCKIT_MODEL_SOURCES} rockit_config.h)

file(WRITE "${CMAKE_BINARY_DIR}/source_files.txt" "${ROCKIT_MODEL_SOURCES}\n")
file(WRITE "${CMAKE_BINARY_DIR}/header_files.txt" "${ROCKIT_MODEL_HEADERS};${CMAKE_CURRENT_SOURCE_DIR}/after_init.h\n")

set_property(SOURCE acados_driver.c APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/after_init.h)
target_link_libraries(acados_driver acados)

INSTALL(TARGETS acados_driver
  LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
  ARCHIVE DESTINATION ${LIBRARY_INSTALL_DIR}
  INCLUDES DESTINATION ${INCLUDE_INSTALL_DIR}
  RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR}
  )