Skip to content

Commit 6cafb75

Browse files
authored
Merge pull request #6 from cbm-fles/dev_cmake
CMake build flow for libpda
2 parents 1fec11b + efd0096 commit 6cafb75

File tree

3 files changed

+84
-1
lines changed

3 files changed

+84
-1
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
/build_linux_x86_uio/
33
/doxygen/
44
/patches/linux_uio/uio_pci_dma.ko
5-
5+
/build*/

CMakeLists.txt

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# Copyright 2017 Jan de Cuveland <[email protected]>
2+
cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
3+
4+
# retrieve project version information
5+
file(READ VERSION PDA_VERSION)
6+
string(STRIP "${PDA_VERSION}" PDA_VERSION)
7+
project(pda LANGUAGES C VERSION "${PDA_VERSION}")
8+
math(EXPR SO_VERSION "${pda_VERSION_MAJOR} - ${pda_VERSION_PATCH}")
9+
10+
# generate config.h
11+
include(CheckIncludeFiles)
12+
check_include_files(numa.h NUMA_AVAIL)
13+
check_include_files(kmod.h KMOD_AVAIL)
14+
set(MODPROBE_MODE TRUE CACHE BOOL "Enable modprobe mode")
15+
file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/src)
16+
configure_file(config.h.in ${PROJECT_BINARY_DIR}/src/config.h)
17+
18+
# generate symlinks to arch sources
19+
foreach (source bar device_operator dma_buffer pci)
20+
execute_process(
21+
COMMAND ${CMAKE_COMMAND} -E create_symlink
22+
${PROJECT_SOURCE_DIR}/arch/linux_x86_uio/${source}_inc.c
23+
${PROJECT_BINARY_DIR}/src/${source}.inc)
24+
endforeach()
25+
26+
# build userspace library
27+
add_compile_options(-std=gnu99 -Wall -Wunused-result -fno-tree-vectorize)
28+
file(GLOB LIB_SOURCES src/*.c)
29+
add_library(pda-static STATIC ${LIB_SOURCES})
30+
add_library(pda-shared SHARED ${LIB_SOURCES})
31+
set_target_properties(pda-shared
32+
PROPERTIES POSITION_INDEPENDENT_CODE 1
33+
SOVERSION "${SO_VERSION}"
34+
VERSION "${SO_VERSION}.${pda_VERSION_PATCH}.${pda_VERSION_MINOR}")
35+
set_target_properties(pda-static pda-shared
36+
PROPERTIES OUTPUT_NAME pda CLEAN_DIRECT_OUTPUT 1)
37+
foreach (lib pda-static pda-shared)
38+
target_include_directories(${lib}
39+
PUBLIC include
40+
PRIVATE src
41+
PRIVATE patches/linux_uio
42+
PRIVATE ${PROJECT_BINARY_DIR}/src
43+
)
44+
endforeach()
45+
target_link_libraries(pda-shared PUBLIC pci PUBLIC pthread)
46+
if (${NUMA_AVAIL})
47+
target_link_libraries(pda-shared PUBLIC numa)
48+
endif()
49+
if (${KMOD_AVAIL})
50+
target_link_libraries(pda-shared PUBLIC kmod)
51+
endif()
52+
53+
# specify files to install
54+
install(TARGETS pda-static ARCHIVE DESTINATION lib)
55+
install(TARGETS pda-shared LIBRARY DESTINATION lib)
56+
install(DIRECTORY include/ DESTINATION include)
57+
58+
# build debian package - experimental
59+
set(CPACK_GENERATOR DEB)
60+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
61+
"CBM FLES FLIB low-level user space access library")
62+
set(CPACK_PACKAGE_NAME libpda)
63+
set(CPACK_PACKAGE_CONTACT
64+
"Jan de Cuveland <[email protected]>")
65+
set(CPACK_PACKAGE_VERSION_MAJOR ${pda_VERSION_MAJOR})
66+
set(CPACK_PACKAGE_VERSION_MINOR ${pda_VERSION_MINOR})
67+
set(CPACK_PACKAGE_VERSION_PATCH ${pda_VERSION_PATCH})
68+
set(CPACK_STRIP_FILES TRUE)
69+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE amd64)
70+
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.15)")
71+
set(CPACK_DEBIAN_PACKAGE_PRIORITY optional)
72+
set(CPACK_DEBIAN_PACKAGE_SECTION libs)
73+
include(CPack)

config.h.in

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#pragma once
2+
3+
#define PDA_VERSION "${pda_VERSION}"
4+
#define PDA_CURRENT ${pda_VERSION_MAJOR}
5+
#define PDA_REVISION ${pda_VERSION_MINOR}
6+
#define PDA_AGE ${pda_VERSION_PATCH}
7+
8+
#cmakedefine KMOD_AVAIL
9+
#cmakedefine NUMA_AVAIL
10+
#cmakedefine MODPROBE_MODE

0 commit comments

Comments
 (0)