###############################################################################
# CMake file for the CHASE Library standard backends.
# @author Michele Lora
###############################################################################

cmake_minimum_required (VERSION 3.18)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
    set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
endif()
set(CMAKE_C_FLAGS_DEBUG "-O0 -Wall -Wextra -pedantic -ggdb -fPIC")
set(CMAKE_C_FLAGS_RELEASE "-O3 -fPIC")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -Wall -Wextra -pedantic -ggdb -fPIC")
set(CMAKE_CXX_FLAGS_RELEASE "-O3  -fPIC")

if(DEFINED ENV{CHASE_INSTALL_DIR})
    set(CMAKE_INSTALL_PREFIX $ENV{CHASE_INSTALL_DIR} CACHE PATH "Install top-level directory" FORCE)
else()
    set(CMAKE_INSTALL_PREFIX ../../install_dir CACHE PATH "Install top-level directory" FORCE)
endif()

project(CHASE_BACKENDS VERSION 1.0)

# The headers of the core library need C++17.
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Use one Python for the headers and the module suffix (FindPython).
find_package(Python COMPONENTS Interpreter Development.Module REQUIRED)
set(PYBIND11_FINDPYTHON ON)
find_package(pybind11 REQUIRED)


set(CHASEPATH ${CMAKE_INSTALL_PREFIX} CACHE PATH "The path of the Chase installation")

set( BACKENDS_SRC ${PROJECT_SOURCE_DIR}/src)


set(chase_library_backends
        ${BACKENDS_SRC}/GR1CPrinter.cc
        ${BACKENDS_SRC}/GR1CPrinter_visit.cc
        ${BACKENDS_SRC}/SlugsPrinter.cc
        ${BACKENDS_SRC}/SlugsPrinter_visit.cc
        ${BACKENDS_SRC}/NuSMVPrinter.cc
        ${BACKENDS_SRC}/NuSMVPrinter_visit.cc
        ${BACKENDS_SRC}/PySTLPrinter.cc
)

include_directories(
    ${CHASEPATH}/chase/include
    ${CHASEPATH}/chase/include/utilities
    ${CHASEPATH}/chase/include/representation
    ${PROJECT_SOURCE_DIR}/include
    )

add_library(chase-backends ${chase_library_backends})

include(GNUInstallDirs)
set(BACKENDSLIB_INSTALL_DIR chase/lib  CACHE STRING "")

install(
    DIRECTORY ${PROJECT_SOURCE_DIR}/include/
    DESTINATION chase/include/backends
    )

install(
    TARGETS chase-backends
    EXPORT chaseTargets
    DESTINATION chase/lib
    )

pybind11_add_module(
    pychase_backends MODULE
    src/bindings.cc
    ${chase_library_backends}
    )

target_link_libraries(pychase_backends PRIVATE chase)

target_link_directories(
    pychase_backends
    PRIVATE ${CHASEPATH}/chase/lib
    )

install(TARGETS pychase_backends
    EXPORT pychase_backendsTargets
    DESTINATION chase/lib)

