Skip to content

Commit cb1c8e3

Browse files
author
Irfan Mohammad
committed
sysrepo-gnxi v2.0
update sysrepo-gnxi for sysrepo v3.x
1 parent 1bcaf56 commit cb1c8e3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+7781
-1171
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
*.gcov
12
build/

CMakeLists.txt

Lines changed: 91 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.0)
1+
cmake_minimum_required(VERSION 3.18.1)
22

33
project(sysrepo-gnxi)
44

@@ -12,8 +12,10 @@ set(SYSREPO-GNXI_MICRO_VERSION 0)
1212

1313
set(SYSREPO-GNXI_VERSION ${SYSREPO-GNXI_MAJOR_VERSION}.${SYSREPO-GNXI_MINOR_VERSION}.${SYSREPO-GNXI_MICRO_VERSION})
1414

15-
#C++11 is required by gNXI
16-
set(CMAKE_CXX_STANDARD 11)
15+
#C++11 is required by gNXI, we need c++14 for other stuff
16+
set(CMAKE_CXX_STANDARD 20)
17+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
18+
include(GNUInstallDirs)
1719

1820
# DEPENDENCIES
1921
##############
@@ -22,21 +24,24 @@ set(CMAKE_CXX_STANDARD 11)
2224
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/CmakeModules")
2325

2426
find_package(PkgConfig) #official cmake module
25-
find_package(Boost REQUIRED log system) #just boost-log and boost-system libraries
27+
find_package(Boost REQUIRED log system chrono) #just boost log, system and chrono libraries
2628

27-
pkg_check_modules(JSONCPP REQUIRED jsoncpp) #official pkgconfig jsoncpp
29+
pkg_check_modules(SYSREPOC REQUIRED sysrepo>=2.2.14 IMPORTED_TARGET)
30+
31+
pkg_check_modules(LIBYANGC REQUIRED libyang)
32+
pkg_check_modules(SYSREPO REQUIRED sysrepo-cpp)
2833
pkg_check_modules(LIBYANG REQUIRED libyang-cpp)
29-
pkg_check_modules(SYSREPO REQUIRED libSysrepo-cpp=>0.7.7) #PkgConfig cmake module maccro
3034

35+
include(CodeCoverage)
3136

3237
# DEPENDENCIES & COMPILATION OF GNXI PROTO
3338
##########################################
3439

3540
# set compiler and linker flags
3641
set(RIGOROUS_C_FLAGS "-Wlogical-op -Wold-style-cast")
37-
set(CMAKE_CXX_FLAGS "-Wall -Wextra -std=c++11 -g ${RIGOROUS_C_FLAGS}")
38-
set(CMAKE_CXX_FLAGS_RELEASE "-Wall -Wextra -std=c++11 -DNDEBUG -O2 ${RIGOROUS_C_FLAGS}")
39-
set(CMAKE_CXX_FLAGS_DEBUG "-Wall -Wextra -std=c++11 -g -O0 ${RIGOROUS_C_FLAGS}")
42+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -std=c++14 -g ${RIGOROUS_C_FLAGS}")
43+
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -O2")
44+
set(CMAKE_CXX_FLAGS_DEBUG "-O0")
4045

4146
#Use Boost with Dynamic libraries rather than static linkage
4247
add_definitions(-D BOOST_LOG_DYN_LINK)
@@ -52,27 +57,32 @@ add_subdirectory(proto)
5257
# Generate a compile_commands.json with compile options
5358
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
5459

55-
set(GNXI_SRC src/main.cpp
56-
src/security/authentication.cpp
60+
set(GNXI_SRC src/security/authentication.cpp
5761
src/utils/log.cpp
62+
src/utils/sysrepo.cpp
5863
src/gnmi/gnmi.cpp
64+
src/gnmi/gnmi_server.cpp
5965
src/gnmi/capabilities.cpp
6066
src/gnmi/get.cpp
67+
src/gnmi/rpc.cpp
6168
src/gnmi/set.cpp
6269
src/gnmi/subscribe.cpp
70+
src/gnmi/confirm.cpp
6371
src/gnmi/encode/encode.cpp
64-
src/gnmi/encode/load_models.cpp
65-
src/gnmi/encode/runtime.cpp
6672
src/gnmi/encode/json_ietf.cpp
6773
)
6874

69-
add_executable(gnxi_server ${GNXI_SRC})
75+
add_executable(gnxi_server ${GNXI_SRC} src/main.cpp)
76+
77+
target_compile_definitions(gnxi_server PRIVATE
78+
GNMI_LOGROTATE_SCRIPT="/usr/libexec/gnxi-server-logrotate"
79+
GNMI_LOG_DIR="/var/log/gnxi-server"
80+
)
7081

7182
#Header file location required to build target
7283
target_include_directories(gnxi_server
7384
PUBLIC #List of include dirs required to use target binary or library
7485
${Boost_INCLUDE_DIRS}
75-
${JSONCPP_INCLUDE_DIRS}
7686
${LIBYANG_INCLUDE_DIRS}
7787
${SYSREPO_INCLUDE_DIRS}
7888
${PROTOBUF_INCLUDE_DIR}
@@ -84,49 +94,80 @@ target_include_directories(gnxi_server
8494
#Directory path to look for libraries
8595
link_directories(${Boost_LIBRARY_DIRS})
8696

87-
# link gnxi_server executable with grpc, jsoncpp, sysrepo libraries
97+
# link gnxi_server executable with grpc, sysrepo libraries
8898
target_link_libraries(gnxi_server gnmi
89-
${JSONCPP_LIBRARIES}
9099
${Boost_LIBRARIES}
91100
${SYSREPO_LIBRARIES}
101+
${SYSREPOC_LIBRARIES}
102+
${LIBYANG_LIBRARIES}
103+
${LIBYANGC_LIBRARIES}
104+
${SYSTEMD_LIBRARIES}
105+
)
106+
107+
# TEST
108+
######
109+
110+
enable_testing()
111+
112+
set(GNXI_TEST_SRC tests/main.cpp
113+
tests/capabilities.cpp
114+
tests/get.cpp
115+
tests/rpc.cpp
116+
tests/set.cpp
117+
tests/subscribe.cpp
118+
)
119+
120+
add_executable(gnxi_server_test ${GNXI_TEST_SRC} ${GNXI_SRC})
121+
configure_file(scripts/gnxi-server-logrotate gnxi-server-logrotate COPYONLY)
122+
123+
set_target_properties(gnxi_server_test PROPERTIES COMPILE_FLAGS "-DTEST -O0 -fprofile-arcs -ftest-coverage")
124+
125+
get_filename_component(TESTS_SRC_DIR "${CMAKE_SOURCE_DIR}/tests" REALPATH)
126+
get_filename_component(TESTS_WORKING_DIR "${CMAKE_BINARY_DIR}" REALPATH)
127+
target_compile_definitions(gnxi_server_test PRIVATE
128+
TESTS_SRC_DIR="${TESTS_SRC_DIR}";
129+
TESTS_WORKING_DIR="${TESTS_WORKING_DIR}"
130+
GNMI_LOG_DIR="${TESTS_WORKING_DIR}/gnmi-logs"
131+
GNMI_LOGROTATE_SCRIPT="${TESTS_WORKING_DIR}/gnxi-server-logrotate"
132+
)
133+
134+
add_test(NAME gnxi_server_test COMMAND ${CMAKE_BINARY_DIR}/gnxi_server_test)
135+
136+
# Add a timeout for tests, to prevent them from running forever
137+
set_tests_properties(gnxi_server_test PROPERTIES TIMEOUT 300)
138+
139+
#Header file location required to build target
140+
target_include_directories(gnxi_server_test
141+
PUBLIC #List of include dirs required to use target binary or library
142+
${Boost_INCLUDE_DIRS}
143+
${LIBYANG_INCLUDE_DIRS}
144+
${SYSREPO_INCLUDE_DIRS}
145+
${PROTOBUF_INCLUDE_DIR}
146+
PRIVATE
147+
${CMAKE_CURRENT_BINARY_DIR} #include "build" directory tree for "build/proto"
148+
${CMAKE_CURRENT_SOURCE_DIR}/src #include "src" tree for <utils/> <security/>
149+
)
150+
151+
# link gnxi_server executable with grpc, sysrepo libraries
152+
target_link_libraries(gnxi_server_test gnmi
153+
${Boost_LIBRARIES}
154+
${SYSREPO_LIBRARIES}
155+
${SYSREPOC_LIBRARIES}
92156
${LIBYANG_LIBRARIES}
157+
${LIBYANGC_LIBRARIES}
158+
${SYSTEMD_LIBRARIES}
159+
gcov
93160
)
94161

162+
# Remove test files and auto-generated files from coverage report
163+
set(GCOVR_EXCLUDES "'tests/*'" "'${CMAKE_CURRENT_BINARY_DIR}/*/*'")
164+
setup_target_for_coverage_cobertura(gnxi_server_test_coverage ${CMAKE_CURRENT_BINARY_DIR}/gnxi_server_test coverage)
165+
add_dependencies(gnxi_server_test_coverage gnxi_server_test)
166+
95167
# INSTALLATION
96168
##############
97169

98170
install(TARGETS gnxi_server
99-
RUNTIME DESTINATION bin
100-
DESTINATION ${CMAKE_INSTALL_BINDIR}
171+
RUNTIME DESTINATION sbin
172+
DESTINATION ${CMAKE_INSTALL_SBINDIR}
101173
)
102-
103-
# PACKAGING
104-
###########
105-
106-
SET(CPACK_PACKAGE_VENDOR "FD.io")
107-
SET(CPACK_PACKAGE_CONTACT "[email protected]")
108-
SET(CPACK_PACKAGE_VERSION_MAJOR ${SYSREPO-GNXI_MAJOR_VERSION})
109-
SET(CPACK_PACKAGE_VERSION_MINOR ${SYSREPO-GNXI_MINOR_VERSION})
110-
SET(CPACK_PACKAGE_VERSION_PATCH ${SYSREPO-GNXI_MICRO_VERSION})
111-
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A gNMI server for sysrepo YANG datastore.")
112-
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "https://github.com/YohanPipereau/sysrepo-gnxi")
113-
114-
#DEBIAN specific : SET(CPACK_GENERATOR "DEB")
115-
if(CPACK_GENERATOR EQUAL "DEB")
116-
message(STATUS "DEB packaging selected")
117-
SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "x86_64")
118-
SET(CPACK_DEBIAN_PACKAGE_SECTION "misc")
119-
SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
120-
SET(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${CPACK_SOURCE_PACKAGE_FILE_NAME})
121-
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libboost-thread, libboost-log, libboost-system, libjsoncpp, libstdc++6 (>= 5.2), zlib1g, libssl, libyang-cpp0.16, sysrepo-cpp")
122-
endif(CPACK_GENERATOR EQUAL "DEB")
123-
124-
#RPM specific : SET(CPACK_GENERATOR "RPM")
125-
if(CPACK_GENERATOR EQUAL "RPM")
126-
message(STATUS "RPM packaging selected")
127-
SET(CPACK_RPM_PACKAGE_ARCHITECTURE "x86_64")
128-
SET(CPACK_RPM_PACKAGE_URL ${CPACK_SOURCE_PACKAGE_FILE_NAME})
129-
SET(CPACK_RPM_PACKAGE_REQUIRES "boost, jsoncpp, libstdc++6 (>= 5.2), zlib, openssl-devel")
130-
endif(CPACK_GENERATOR EQUAL "RPM")
131-
132-
INCLUDE(CPack) #run cpack

0 commit comments

Comments
 (0)