nxdrvlinux/libcifx/CMakeLists.txt
Sebastian Doell ac2f4d1789 Add initial driver source based on svn versions:
- toolkit V2.8.0.1@14806
 - BSL V1.8.0.0@14590
 - tcpserver: V1.4.3.0@14676 (marshaller V2.4.0.1@14551)
2024-02-05 09:23:09 +01:00

136 lines
4.8 KiB
CMake

cmake_minimum_required(VERSION 2.8.12)
# required to set project version
cmake_policy(SET CMP0048 NEW)
FIND_PACKAGE(PkgConfig REQUIRED)
set(DRV_MAJOR 3)
set(DRV_MINOR 0)
set(DRV_PATCH 0)
set(DRV_VERSION ${DRV_MAJOR}.${DRV_MINOR}.${DRV_PATCH})
set(DRVVERSION "\"V${DRV_VERSION}\"")
project("libcifx user space library" VERSION ${DRV_VERSION})
option(DEBUG "Build Library debug messages" OFF)
option(DISABLE_PCI "Disable use of PCI" OFF)
option(TIME "Enable device time setting during start-up" OFF)
option(DMA "Compile driver with dma support" OFF)
option(NO_MINSLEEP "Disable minimum sleep time" OFF)
option(VIRTETH "Enables virtual ethernet interface support" OFF)
option(HWIF "Enables the toolkit's Hardware Function Interface (e.g. for SPI)" OFF)
option(PLUGIN "Enables support of device plugins and enables hardware function interface (see HWIF)" OFF)
option(SPM_PLUGIN "Build spm-plugin and enables support of device plugins (see PLUGIN)" OFF)
option(SHARED "Build shared libary (default: ON)" ON)
if(SHARED)
add_library( cifx SHARED)
set_target_properties(cifx PROPERTIES VERSION ${DRV_VERSION} SOVERSION ${DRV_MAJOR})
else(SHARED)
add_library( cifx STATIC)
endif(SHARED)
set(src_dir ${CMAKE_CURRENT_LIST_DIR})
set(tk_dir ${src_dir}/Toolkit)
# check endianess
include (TestBigEndian)
TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
target_compile_definitions( cifx
PRIVATE
VERSION_INFO="\"${DRVVERSION}\""
$<$<BOOL:${IS_BIG_ENDIAN}>:CIFX_TOOLKIT_BIGENDIAN>
$<$<BOOL:${DEBUG}>:DEBUG>
$<$<BOOL:${DISABLE_PCI}>:CIFX_TOOLKIT_DISABLEPCI>
$<$<BOOL:${DMA}>:CIFX_TOOLKIT_DMA>
$<$<BOOL:${NO_MINSLEEP}>:NO_MIN_SLEEP>
$<$<BOOL:${TIME}>:CIFX_TOOLKIT_TIME>
$<$<BOOL:${VIRTETH}>:CIFXETHERNET>
$<$<BOOL:${HWIF}>:CIFX_DRV_HWIF>
$<$<OR:$<BOOL:${PLUGIN}>,$<BOOL:${SPM_PLUGIN}>>:CIFX_DRV_HWIF CIFX_PLUGIN_SUPPORT>
)
file(GLOB SOURCES "${src_dir}/*.c" "${tk_dir}/Source/*.c")
if(VIRTETH)
file(GLOB NETXTAP_SOURCES ${src_dir}/netx_tap/*.c)
set_source_files_properties(${tk_dir}/Source/cifXFunctions.c PROPERTIES COMPILE_FLAGS -DAPIRENAME)
if(NOT LIBDNL_INCLUDE_DIRS OR NOT LIBDNL_LIBRARY_DIRS OR NOT LIBDNL_LIBRARIES)
pkg_check_modules(LIBDNL libnl-3.0)
set(REQUIRED_PACKAGES "${REQUIRED_PACKAGES} libnl-3.0")
endif(NOT LIBDNL_INCLUDE_DIRS OR NOT LIBDNL_LIBRARY_DIRS OR NOT LIBDNL_LIBRARIES)
if(NOT LIBDNL_CLI_INCLUDE_DIRS OR NOT LIBDNL_CLI_LIBRARY_DIRS OR NOT LIBDNL_CLI_LIBRARIES)
pkg_check_modules(LIBDNL-CLI libnl-cli-3.0)
set(REQUIRED_PACKAGES "${REQUIRED_PACKAGES} libnl-cli-3.0")
endif(NOT LIBDNL_CLI_INCLUDE_DIRS OR NOT LIBDNL_CLI_LIBRARY_DIRS OR NOT LIBDNL_CLI_LIBRARIES)
endif(VIRTETH)
target_link_directories( cifx
PRIVATE
$<$<NOT:$<BOOL:${DISABLE_PCI}>>:${LIBPCIACCESS_LIBRARY_DIRS}>
$<$<BOOL:${VIRTETH}>:${LIBDNL_LIBRARY_DIRS}>
$<$<BOOL:${VIRTETH}>:${LIBDNL_CLI_LIBRARY_DIRS}>
)
target_include_directories( cifx
PRIVATE
${src_dir}/
${tk_dir}/Source/
${tk_dir}/Common/cifXAPI/
${tk_dir}/Common/HilscherDefinitions/
$<$<NOT:$<BOOL:${DISABLE_PCI}>>:${LIBPCIACCESS_INCLUDE_DIRS}>
$<$<BOOL:${VIRTETH}>:${src_dir}/netx_tap/ ${LIBDNL_CLI_INCLUDE_DIRS} ${LIBDNL_INCLUDE_DIRS}>
)
target_link_libraries( cifx
PRIVATE
pthread
rt
$<$<NOT:$<BOOL:${DISABLE_PCI}>>:pciaccess>
$<$<OR:$<BOOL:${PLUGIN}>,$<BOOL:${SPM_PLUGIN}>>:dl>
$<$<BOOL:${VIRTETH}>:${LIBDNL_LIBRARIES}>
$<$<BOOL:${VIRTETH}>:${LIBDNL_CLI_LIBRARIES}>
)
# link and create shared & static library
target_sources( cifx
PRIVATE
${SOURCES}
${NETXTAP_SOURCES}
)
# removes warning about snprintf buffer truncation
set_target_properties(cifx PROPERTIES COMPILE_FLAGS -Wformat-truncation=0)
# configure pkgconfig file
set(prefix ${CMAKE_INSTALL_PREFIX})
set(exec_prefix ${prefix})
set(libdir ${exec_prefix}/lib)
set(includedir ${prefix}/include)
configure_file( ${src_dir}/cifx.pc.in ${CMAKE_CURRENT_BINARY_DIR}/cifx.pc @ONLY)
# install header files
file(GLOB INSTALL_HEADERS
${src_dir}/cifxlinux.h
${tk_dir}/Source/cifXEndianess.h
${tk_dir}/Common/cifXAPI/*.h
${tk_dir}/Common/HilscherDefinitions/*.h
$<$<BOOL:${VIRTETH}>:${src_dir}/netx_tap/netx_tap.h>
)
# install resources
install(TARGETS cifx DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/)
install(FILES ${INSTALL_HEADERS} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/cifx)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/cifx.pc DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig)
# can't add it as subdir as long it's one above
if (SPM_PLUGIN)
set(CIFX_HEADER ${tk_dir}/Common/cifXAPI/ ${src_dir}/)
include(${src_dir}/../plugins/netx-spm/CMakeLists.txt)
endif(SPM_PLUGIN)