## CMakeLists.txt
#
# Author: Daniel Krebs <github@daniel-krebs.net>
# SPDX-FileCopyrightText: 2018 Institute for Automation of Complex Power Systems, RWTH Aachen University
# SPDX-License-Identifier: Apache-2.0

set(SOURCES
    vlnv.cpp
    card.cpp
    pcie_card.cpp
    core.cpp
    node.cpp
    utils.cpp
    dma.cpp

    ips/aurora_xilinx.cpp
    ips/aurora.cpp
    ips/bram.cpp
    ips/dino.cpp
    ips/dma.cpp
    ips/emc.cpp
    ips/fifo.cpp
    ips/gpio.cpp
    ips/intc.cpp
    ips/pcie.cpp
    ips/rtds.cpp
    ips/switch.cpp
    ips/timer.cpp
    ips/i2c.cpp
    ips/register.cpp

    ips/rtds2gpu/rtds2gpu.cpp
    ips/rtds2gpu/xrtds2gpu.c
    ips/rtds2gpu/gpu2rtds.cpp
)

# we don't have much influence on drivers generated by Xilinx, so ignore warnings
set_source_files_properties(ips/rtds2gpu/xrtds2gpu.c
    PROPERTIES COMPILE_FLAGS -Wno-int-to-pointer-cast)

add_library(villas-fpga SHARED ${SOURCES})

target_link_libraries(villas-fpga PUBLIC villas-common)

target_compile_definitions(villas-fpga PRIVATE
    BUILDID=\"abc\"
    _GNU_SOURCE
)

target_include_directories(villas-fpga
    PUBLIC
        ${PROJECT_BINARY_DIR}/include
        ${PROJECT_SOURCE_DIR}/fpga/include
        ${JANSSON_INCLUDE_DIRS}
)

target_link_libraries(villas-fpga PUBLIC
    ${CMAKE_THREAD_LIBS_INIT}
    ${CMAKE_DL_LIBS}
    m
    xil
    villas-common
    "$<$<AND:$<CXX_COMPILER_ID:GNU>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,9.0>>:stdc++fs>"
)

if(CMAKE_CUDA_COMPILER)
    target_link_libraries(villas-fpga PUBLIC villas-gpu)
endif()

include(GNUInstallDirs)

install(TARGETS villas-fpga
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/static
)

install(DIRECTORY ../include/villas DESTINATION include)