Skip to content

Commit cbaee33

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

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

+7791
-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: 97 additions & 51 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}
@@ -82,51 +92,87 @@ target_include_directories(gnxi_server
8292
)
8393

8494
#Directory path to look for libraries
85-
link_directories(${Boost_LIBRARY_DIRS})
95+
link_directories(
96+
${Boost_LIBRARY_DIRS}
97+
${SYSREPO_LIBRARY_DIRS}
98+
${SYSREPOC_LIBRARY_DIRS}
99+
${LIBYANG_LIBRARY_DIRS}
100+
${LIBYANGC_LIBRARY_DIRS}
101+
)
86102

87-
# link gnxi_server executable with grpc, jsoncpp, sysrepo libraries
103+
# link gnxi_server executable with grpc, sysrepo libraries
88104
target_link_libraries(gnxi_server gnmi
89-
${JSONCPP_LIBRARIES}
90105
${Boost_LIBRARIES}
91106
${SYSREPO_LIBRARIES}
107+
${SYSREPOC_LIBRARIES}
92108
${LIBYANG_LIBRARIES}
109+
${LIBYANGC_LIBRARIES}
110+
)
111+
112+
# TEST
113+
######
114+
115+
enable_testing()
116+
117+
set(GNXI_TEST_SRC tests/main.cpp
118+
tests/capabilities.cpp
119+
tests/get.cpp
120+
tests/rpc.cpp
121+
tests/set.cpp
122+
tests/subscribe.cpp
123+
)
124+
125+
add_executable(gnxi_server_test ${GNXI_TEST_SRC} ${GNXI_SRC})
126+
configure_file(scripts/gnxi-server-logrotate gnxi-server-logrotate COPYONLY)
127+
128+
set_target_properties(gnxi_server_test PROPERTIES COMPILE_FLAGS "-DTEST -O0 -fprofile-arcs -ftest-coverage")
129+
130+
get_filename_component(TESTS_SRC_DIR "${CMAKE_SOURCE_DIR}/tests" REALPATH)
131+
get_filename_component(TESTS_WORKING_DIR "${CMAKE_BINARY_DIR}" REALPATH)
132+
target_compile_definitions(gnxi_server_test PRIVATE
133+
TESTS_SRC_DIR="${TESTS_SRC_DIR}";
134+
TESTS_WORKING_DIR="${TESTS_WORKING_DIR}"
135+
GNMI_LOG_DIR="${TESTS_WORKING_DIR}/gnmi-logs"
136+
GNMI_LOGROTATE_SCRIPT="${TESTS_WORKING_DIR}/gnxi-server-logrotate"
93137
)
94138

139+
add_test(NAME gnxi_server_test COMMAND ${CMAKE_BINARY_DIR}/gnxi_server_test)
140+
141+
# Add a timeout for tests, to prevent them from running forever
142+
set_tests_properties(gnxi_server_test PROPERTIES TIMEOUT 300)
143+
144+
#Header file location required to build target
145+
target_include_directories(gnxi_server_test
146+
PUBLIC #List of include dirs required to use target binary or library
147+
${Boost_INCLUDE_DIRS}
148+
${LIBYANG_INCLUDE_DIRS}
149+
${SYSREPO_INCLUDE_DIRS}
150+
${PROTOBUF_INCLUDE_DIR}
151+
PRIVATE
152+
${CMAKE_CURRENT_BINARY_DIR} #include "build" directory tree for "build/proto"
153+
${CMAKE_CURRENT_SOURCE_DIR}/src #include "src" tree for <utils/> <security/>
154+
)
155+
156+
# link gnxi_server executable with grpc, sysrepo libraries
157+
target_link_libraries(gnxi_server_test gnmi
158+
${Boost_LIBRARIES}
159+
${SYSREPO_LIBRARIES}
160+
${SYSREPOC_LIBRARIES}
161+
${LIBYANG_LIBRARIES}
162+
${LIBYANGC_LIBRARIES}
163+
${SYSTEMD_LIBRARIES}
164+
gcov
165+
)
166+
167+
# Remove test files and auto-generated files from coverage report
168+
set(GCOVR_EXCLUDES "'tests/*'" "'${CMAKE_CURRENT_BINARY_DIR}/*/*'")
169+
setup_target_for_coverage_cobertura(gnxi_server_test_coverage ${CMAKE_CURRENT_BINARY_DIR}/gnxi_server_test coverage)
170+
add_dependencies(gnxi_server_test_coverage gnxi_server_test)
171+
95172
# INSTALLATION
96173
##############
97174

98175
install(TARGETS gnxi_server
99-
RUNTIME DESTINATION bin
100-
DESTINATION ${CMAKE_INSTALL_BINDIR}
176+
RUNTIME DESTINATION sbin
177+
DESTINATION ${CMAKE_INSTALL_SBINDIR}
101178
)
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)