diff mbox series

[meta-networking,V3] vsomeip: add recipe

Message ID 20230905075826.38097-1-yi.zhao@windriver.com
State Under Review
Headers show
Series [meta-networking,V3] vsomeip: add recipe | expand

Commit Message

Yi Zhao Sept. 5, 2023, 7:58 a.m. UTC
The vsomeip stack implements the http://some-ip.com/ (Scalable
service-Oriented MiddlewarE over IP (SOME/IP)) protocol.
The stack consists out of:
  a shared library for SOME/IP (libvsomeip3.so)
  a shared library for SOME/IP's configuration module
  (libvsomeip3-cfg.so)
  a shared library for SOME/IP's service discovery
  (libvsomeip3-sd.so)
  a shared library for SOME/IP's E2E protection module
  (libvsomeip3-e2e.so)

Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
---
V3 Change: update to latest stable version 3.3.8

 .../0001-Fix-pkgconfig-dir-for-multilib.patch |  28 +++
 ...e-configuration-files-to-etc-vsomeip.patch |  28 +++
 .../0003-Do-not-build-external-gtest.patch    | 160 ++++++++++++++++++
 ...4-Do-not-specify-PIE-flag-explicitly.patch |  47 +++++
 .../vsomeip/vsomeip_3.3.8.bb                  |  72 ++++++++
 5 files changed, 335 insertions(+)
 create mode 100644 meta-networking/recipes-protocols/vsomeip/vsomeip/0001-Fix-pkgconfig-dir-for-multilib.patch
 create mode 100644 meta-networking/recipes-protocols/vsomeip/vsomeip/0002-Install-example-configuration-files-to-etc-vsomeip.patch
 create mode 100644 meta-networking/recipes-protocols/vsomeip/vsomeip/0003-Do-not-build-external-gtest.patch
 create mode 100644 meta-networking/recipes-protocols/vsomeip/vsomeip/0004-Do-not-specify-PIE-flag-explicitly.patch
 create mode 100644 meta-networking/recipes-protocols/vsomeip/vsomeip_3.3.8.bb
diff mbox series

Patch

diff --git a/meta-networking/recipes-protocols/vsomeip/vsomeip/0001-Fix-pkgconfig-dir-for-multilib.patch b/meta-networking/recipes-protocols/vsomeip/vsomeip/0001-Fix-pkgconfig-dir-for-multilib.patch
new file mode 100644
index 000000000..1c7eb17b2
--- /dev/null
+++ b/meta-networking/recipes-protocols/vsomeip/vsomeip/0001-Fix-pkgconfig-dir-for-multilib.patch
@@ -0,0 +1,28 @@ 
+From e8a1b7a176398c2a9b5969f1b48ae0e1aa30f4ec Mon Sep 17 00:00:00 2001
+From: Yi Zhao <yi.zhao@windriver.com>
+Date: Wed, 2 Mar 2022 14:51:13 +0800
+Subject: [PATCH] Fix pkgconfig dir for multilib
+
+Upstream-Status: Pending
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index add3edda..fea80b4a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -602,7 +602,7 @@ endif()
+ # create pkg-config file
+ if(NOT WIN32)
+         configure_file(${VSOMEIP_NAME}.pc.in ${PROJECT_BINARY_DIR}/${VSOMEIP_NAME}.pc @ONLY)
+-        install(FILES ${PROJECT_BINARY_DIR}/${VSOMEIP_NAME}.pc DESTINATION lib/pkgconfig)
++        install(FILES ${PROJECT_BINARY_DIR}/${VSOMEIP_NAME}.pc DESTINATION ${INSTALL_LIB_DIR}/pkgconfig)
+ endif()
+ 
+ ##############################################################################
+-- 
+2.25.1
+
diff --git a/meta-networking/recipes-protocols/vsomeip/vsomeip/0002-Install-example-configuration-files-to-etc-vsomeip.patch b/meta-networking/recipes-protocols/vsomeip/vsomeip/0002-Install-example-configuration-files-to-etc-vsomeip.patch
new file mode 100644
index 000000000..c22ef697b
--- /dev/null
+++ b/meta-networking/recipes-protocols/vsomeip/vsomeip/0002-Install-example-configuration-files-to-etc-vsomeip.patch
@@ -0,0 +1,28 @@ 
+From aea4c06ee2a0661d0c7b4773e846276a4f10e2e8 Mon Sep 17 00:00:00 2001
+From: Yi Zhao <yi.zhao@windriver.com>
+Date: Wed, 9 Mar 2022 11:48:44 +0800
+Subject: [PATCH] Install example configuration files to /etc/vsomeip
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index fea80b4a..e7a92ec6 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -501,7 +501,7 @@ install(FILES ${PROJECT_BINARY_DIR}/vsomeip.pc DESTINATION lib/pkgconfig)
+ endif ()
+ 
+ install (
+-  FILES ${EXAMPLE_CONFIG_FILES} DESTINATION etc/vsomeip COMPONENT config
++  FILES ${EXAMPLE_CONFIG_FILES} DESTINATION ${DEFAULT_CONFIGURATION_FOLDER} COMPONENT config
+ )
+ 
+ # Add all targets to the build-tree export set
+-- 
+2.25.1
+
diff --git a/meta-networking/recipes-protocols/vsomeip/vsomeip/0003-Do-not-build-external-gtest.patch b/meta-networking/recipes-protocols/vsomeip/vsomeip/0003-Do-not-build-external-gtest.patch
new file mode 100644
index 000000000..370d8a0fe
--- /dev/null
+++ b/meta-networking/recipes-protocols/vsomeip/vsomeip/0003-Do-not-build-external-gtest.patch
@@ -0,0 +1,160 @@ 
+From e012f91a73af7469ef6f660c3a6a752430a4d649 Mon Sep 17 00:00:00 2001
+From: Yi Zhao <yi.zhao@windriver.com>
+Date: Tue, 11 Jul 2023 16:53:46 +0800
+Subject: [PATCH] Do not build external gtest
+
+We don't need to build external gtest since we already depend on
+googletest.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ CMakeLists.txt                    | 30 ++----------
+ test/network_tests/CMakeLists.txt | 80 -------------------------------
+ 2 files changed, 3 insertions(+), 107 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e7a92ec6..f6c680d4 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -18,14 +18,6 @@ set (VSOMEIP_VERSION ${VSOMEIP_MAJOR_VERSION}.${VSOMEIP_MINOR_VERSION}.${VSOMEIP
+ set (PACKAGE_VERSION ${VSOMEIP_VERSION}) # Used in documentation/doxygen.in
+ set (CMAKE_VERBOSE_MAKEFILE off)
+ 
+-if (NOT GTEST_ROOT)
+-    if (DEFINED ENV{GTEST_ROOT})
+-        set(GTEST_ROOT $ENV{GTEST_ROOT})
+-    else()
+-        set(GTEST_ROOT "n/a" CACHE STRING "Path to root folder of googletest. Must be set for building the tests.")
+-    endif()
+-endif()
+-
+ ###################################################################################################
+ # see http://www.cmake.org/Wiki/CMake/Tutorials/How_to_create_a_ProjectConfig.cmake_file
+ ###################################################################################################
+@@ -630,27 +622,11 @@ find_package(benchmark)
+ ##############################################################################
+ # google test
+ 
+-# check for set environment variable
+-if(${GTEST_ROOT} STREQUAL "n/a")
+-    message(STATUS "GTEST_ROOT is not defined. For building the tests the variable
+-             GTEST_ROOT has to be defined. Tests can not be built.")
+-    # early exit
+-    return()  # test can not be build -> make commands build_tests and check are not available
+-else()
+-    message(STATUS "GTEST_ROOT is set. gtest root path set to ${GTEST_ROOT}")
++find_package(GTest)
++if (NOT GTest_FOUND)
++    message(WARNING "GTest is not found. Tests can not be built.")
+ endif()
+ 
+-# build google test as static library (always) -> therefore deactivate BUILD_SHARED_LIBS in case it is active
+-set(BUILD_SHARED_LIBS_AUTOMATIC_OFF 0)
+-if ("${BUILD_SHARED_LIBS}" STREQUAL "ON")
+-    set(BUILD_SHARED_LIBS OFF)
+-    set(BUILD_SHARED_LIBS_AUTOMATIC_OFF 1)
+-endif()
+-add_subdirectory(${GTEST_ROOT} ${CMAKE_CURRENT_BINARY_DIR}/gtest EXCLUDE_FROM_ALL)
+-if ("${BUILD_SHARED_LIBS_AUTOMATIC_OFF}" STREQUAL "1")
+-    set(BUILD_SHARED_LIBS ON)
+-    set(BUILD_SHARED_LIBS_AUTOMATIC_OFF 0)
+-endif()
+ 
+ 
+ 
+diff --git a/test/network_tests/CMakeLists.txt b/test/network_tests/CMakeLists.txt
+index 6a148604..a501b6a7 100644
+--- a/test/network_tests/CMakeLists.txt
++++ b/test/network_tests/CMakeLists.txt
+@@ -3633,86 +3633,6 @@ if(NOT ${TESTS_BAT})
+ 
+ endif()
+ 
+-##############################################################################
+-# Add for every test a dependency to gtest
+-##############################################################################
+-
+-if(NOT ${TESTS_BAT})
+-    add_dependencies(${TEST_CONFIGURATION} gtest)
+-    add_dependencies(${TEST_APPLICATION} gtest)
+-    add_dependencies(${TEST_APPLICATION_SINGLE_PROCESS_NAME} gtest)
+-    add_dependencies(${TEST_APPLICATION_AVAILABILITY_NAME} gtest)
+-    add_dependencies(${TEST_MAGIC_COOKIES_CLIENT} gtest)
+-    add_dependencies(${TEST_MAGIC_COOKIES_SERVICE} gtest)
+-    add_dependencies(${TEST_HEADER_FACTORY} gtest)
+-    add_dependencies(${TEST_HEADER_FACTORY_CLIENT} gtest)
+-    add_dependencies(${TEST_HEADER_FACTORY_SERVICE} gtest)
+-    add_dependencies(${TEST_LOCAL_ROUTING_SERVICE} gtest)
+-    add_dependencies(${TEST_LOCAL_ROUTING_CLIENT} gtest)
+-    add_dependencies(${TEST_EXTERNAL_LOCAL_ROUTING_SERVICE} gtest)
+-    add_dependencies(${TEST_PAYLOAD_SERVICE} gtest)
+-    add_dependencies(${TEST_PAYLOAD_CLIENT} gtest)
+-    add_dependencies(${TEST_BIG_PAYLOAD_SERVICE} gtest)
+-    add_dependencies(${TEST_BIG_PAYLOAD_CLIENT} gtest)
+-    add_dependencies(${TEST_CLIENT_ID_SERVICE} gtest)
+-    add_dependencies(${TEST_CLIENT_ID_UTILITY} gtest)
+-    add_dependencies(${TEST_DEBOUNCE_CLIENT} gtest)
+-    add_dependencies(${TEST_DEBOUNCE_SERVICE} gtest)
+-    add_dependencies(${TEST_SUBSCRIBE_NOTIFY_SERVICE} gtest)
+-    add_dependencies(${TEST_SUBSCRIBE_NOTIFY_ONE_EVENT_TWO_EVENTGROUPS_SERVICE} gtest)
+-    add_dependencies(${TEST_SUBSCRIBE_NOTIFY_ONE_EVENT_TWO_EVENTGROUPS_CLIENT} gtest)
+-    add_dependencies(${TEST_SUBSCRIBE_NOTIFY_ONE_SERVICE} gtest)
+-    add_dependencies(${TEST_CPU_LOAD_SERVICE} gtest)
+-    add_dependencies(${TEST_CPU_LOAD_CLIENT} gtest)
+-    add_dependencies(${TEST_INITIAL_EVENT_SERVICE} gtest)
+-    add_dependencies(${TEST_INITIAL_EVENT_CLIENT} gtest)
+-    add_dependencies(${TEST_INITIAL_EVENT_AVAILABILITY_CHECKER} gtest)
+-    add_dependencies(${TEST_INITIAL_EVENT_STOP_SERVICE} gtest)
+-    add_dependencies(${TEST_OFFER_SERVICE} gtest)
+-    add_dependencies(${TEST_OFFER_CLIENT} gtest)
+-    add_dependencies(${TEST_OFFER_SERVICE_EXTERNAL} gtest)
+-    add_dependencies(${TEST_OFFER_EXTERNAL_SD_MESSAGE_SENDER} gtest)
+-    add_dependencies(${TEST_OFFERED_SERVICES_INFO_CLIENT} gtest)
+-    add_dependencies(${TEST_OFFERED_SERVICES_INFO_SERVICE} gtest)
+-    add_dependencies(${TEST_PENDING_SUBSCRIPTION_SERVICE} gtest)
+-    add_dependencies(${TEST_PENDING_SUBSCRIPTION_CLIENT} gtest)
+-    add_dependencies(${TEST_MALICIOUS_DATA_SERVICE} gtest)
+-    add_dependencies(${TEST_MALICIOUS_DATA_CLIENT} gtest)
+-    if (${TEST_SECURITY})
+-        add_dependencies(${TEST_SECURITY_SERVICE} gtest)
+-        add_dependencies(${TEST_SECURITY_CLIENT} gtest)
+-    endif()
+-    add_dependencies(${TEST_E2E_SERVICE} gtest)
+-    add_dependencies(${TEST_E2E_CLIENT} gtest)
+-    if (${TEST_E2E_PROFILE_04})
+-    add_dependencies(${TEST_E2E_PROFILE_04_SERVICE} gtest)
+-    add_dependencies(${TEST_E2E_PROFILE_04_CLIENT} gtest)
+-    endif()
+-    add_dependencies(${TEST_EVENT_SERVICE} gtest)
+-    add_dependencies(${TEST_EVENT_CLIENT} gtest)
+-    add_dependencies(${TEST_NPDU_SERVICE_ONE} gtest)
+-    add_dependencies(${TEST_NPDU_SERVICE_TWO} gtest)
+-    add_dependencies(${TEST_NPDU_SERVICE_THREE} gtest)
+-    add_dependencies(${TEST_NPDU_SERVICE_FOUR} gtest)
+-    add_dependencies(${TEST_NPDU_CLIENT_ONE} gtest)
+-    add_dependencies(${TEST_NPDU_CLIENT_TWO} gtest)
+-    add_dependencies(${TEST_NPDU_CLIENT_THREE} gtest)
+-    add_dependencies(${TEST_NPDU_CLIENT_FOUR} gtest)
+-    add_dependencies(${TEST_NPDU_DAEMON_CLIENT} gtest)
+-    add_dependencies(${TEST_NPDU_DAEMON_SERVICE} gtest)
+-    add_dependencies(${TEST_SOMEIPTP_CLIENT} gtest)
+-    add_dependencies(${TEST_SOMEIPTP_SERVICE} gtest)
+-    if(${TEST_SECOND_ADDRESS})
+-        add_dependencies(${TEST_SECOND_ADDRESS_CLIENT} gtest)
+-        add_dependencies(${TEST_SECOND_ADDRESS_SERVICE} gtest)
+-    endif()
+-    add_dependencies(${TEST_SUSPEND_RESUME_CLIENT} gtest)
+-    add_dependencies(${TEST_SUSPEND_RESUME_SERVICE} gtest)
+-else()
+-    add_dependencies(${TEST_LOCAL_ROUTING_SERVICE} gtest)
+-    add_dependencies(${TEST_LOCAL_ROUTING_CLIENT} gtest)
+-endif()
+-
+ ##############################################################################
+ # Add tests to the target build_network_tests
+ ##############################################################################
+-- 
+2.25.1
+
diff --git a/meta-networking/recipes-protocols/vsomeip/vsomeip/0004-Do-not-specify-PIE-flag-explicitly.patch b/meta-networking/recipes-protocols/vsomeip/vsomeip/0004-Do-not-specify-PIE-flag-explicitly.patch
new file mode 100644
index 000000000..970a37e50
--- /dev/null
+++ b/meta-networking/recipes-protocols/vsomeip/vsomeip/0004-Do-not-specify-PIE-flag-explicitly.patch
@@ -0,0 +1,47 @@ 
+From 69805f9c8973a7a4d29297f8d50c29c88f981bee Mon Sep 17 00:00:00 2001
+From: Yi Zhao <yi.zhao@windriver.com>
+Date: Mon, 17 Jul 2023 14:33:32 +0800
+Subject: [PATCH] Do not specify PIE flag explicitly
+
+For nodistro distro, packages are built without PIE because
+security_flags.inc is not included by default. But in vsomeip, the PIE
+flag is explicitly specified in CMAKE_CXX_FLAGS, which will cause
+building with PIE even in nodistro, causing an error when linking the
+googletest static library:
+
+TOPDIR/tmp-glibc/work/cortexa53-oe-linux/vsomeip/3.1.20.3-r0/recipe-sysroot-native/usr/bin/aarch64-oe-linux/../../libexec/aarch64-oe-linux/gcc/aarch64-oe-linux/12.2.0/ld:
+TOPDIR/tmp-glibc/work/cortexa53-oe-linux/vsomeip/3.1.20.3-r0/recipe-sysroot/usr/lib/libgtest.a(gtest-all.cc.o)(.text+0x4a90):
+unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol `_ZSt4cerr@@GLIBCXX_3.4'
+
+Remove PIE flag from CMAKE_CXX_FLAGS and only enable PIE flag by
+including security_flags.inc.
+
+Upstream-Status: Inappropriate [embedded specific]
+
+Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
+---
+ CMakeLists.txt | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f6c680d4..dce1e701 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -60,12 +60,12 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+ if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+     # This is only relevant for GCC and causes warnings on Clang
+     set(EXPORTSYMBOLS "-Wl,-export-dynamic -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exportmap.gcc")
+-    set(OS_CXX_FLAGS "${OS_CXX_FLAGS} -pie -Wl,-z,relro,-z,now")
++    set(OS_CXX_FLAGS "${OS_CXX_FLAGS} -Wl,-z,relro,-z,now")
+ endif()
+ 
+     set(NO_DEPRECATED "")
+     set(OPTIMIZE "")
+-    set(OS_CXX_FLAGS "${OS_CXX_FLAGS} -D_GLIBCXX_USE_NANOSLEEP -pthread -O -Wall -Wextra -Wformat -Wformat-security -Wconversion -fexceptions -fstrict-aliasing -fstack-protector-strong -fasynchronous-unwind-tables -fno-omit-frame-pointer -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Wpedantic -Werror -fPIE")
++    set(OS_CXX_FLAGS "${OS_CXX_FLAGS} -D_GLIBCXX_USE_NANOSLEEP -pthread -O -Wall -Wextra -Wformat -Wformat-security -Wconversion -fexceptions -fstrict-aliasing -fstack-protector-strong -fasynchronous-unwind-tables -fno-omit-frame-pointer -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Wpedantic")
+ 
+     # force all use of std::mutex and std::recursive_mutex to use runtime init
+     # instead of static initialization so mutexes can be hooked to enable PI as needed
+-- 
+2.25.1
+
diff --git a/meta-networking/recipes-protocols/vsomeip/vsomeip_3.3.8.bb b/meta-networking/recipes-protocols/vsomeip/vsomeip_3.3.8.bb
new file mode 100644
index 000000000..b45bd2d63
--- /dev/null
+++ b/meta-networking/recipes-protocols/vsomeip/vsomeip_3.3.8.bb
@@ -0,0 +1,72 @@ 
+SUMMARY = "The implementation of SOME/IP"
+DESCRIPTION = "The vsomeip stack implements the http://some-ip.com/ \
+(Scalable service-Oriented MiddlewarE over IP (SOME/IP)) protocol."
+HOMEPAGE = "https://github.com/COVESA/vsomeip"
+SECTION = "net"
+
+LICENSE = "MPL-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=9741c346eef56131163e13b9db1241b3"
+
+SRC_URI = "git://github.com/GENIVI/${BPN}.git;branch=master;protocol=https;name=vsomeip \
+           file://0001-Fix-pkgconfig-dir-for-multilib.patch \
+           file://0002-Install-example-configuration-files-to-etc-vsomeip.patch \
+           file://0003-Do-not-build-external-gtest.patch \
+           file://0004-Do-not-specify-PIE-flag-explicitly.patch \
+          "
+
+SRCREV = "07464840f503670bc75997b8e926b54734ffa410"
+
+COMPATIBLE_HOST:mips = "null"
+COMPATIBLE_HOST:mips64 = "null"
+COMPATIBLE_HOST:powerpc = "null"
+COMPATIBLE_HOST:libc-musl = 'null'
+
+DEPENDS = "boost dlt-daemon googletest"
+
+S = "${WORKDIR}/git"
+
+inherit cmake pkgconfig
+
+EXTRA_OECMAKE = "-DINSTALL_LIB_DIR:PATH=${baselib} \
+                 -DINSTALL_CMAKE_DIR:PATH=${baselib}/cmake/vsomeip3 \
+                "
+
+# For vsomeip-test
+EXTRA_OECMAKE += "-DTEST_IP_MASTER=10.0.3.1 \
+                  -DTEST_IP_SLAVE=10.0.3.2 \
+                  -DTEST_IP_SLAVE_SECOND=10.0.3.3 \
+                  -DTEST_UID=1000 -DTEST_GID=1000 \
+                 "
+
+RDEPENDS:${PN}-test = "bash lsof"
+
+do_compile:append() {
+    cmake_runcmake_build --target examples
+    cmake_runcmake_build --target build_tests
+}
+
+do_install:append() {
+    install -d ${D}/opt/${PN}-test/examples
+    install -m 0755 ${B}/examples/*-sample ${D}/opt/${PN}-test/examples
+    install -d ${D}/opt/${PN}-test/examples/routingmanagerd
+    install -m 0755 ${B}/examples/routingmanagerd/routingmanagerd \
+        ${D}/opt/${PN}-test/examples/routingmanagerd
+
+    install -d ${D}/opt/${PN}-test/test/test/common
+    cp -rf ${S}/test/common/examples_policies \
+        ${D}/opt/${PN}-test/test/test/common/
+
+    for d in unit_tests network_tests; do
+        install -d ${D}/opt/${PN}-test/test/$d
+        cp -f ${B}/test/$d/*test* ${D}/opt/${PN}-test/test/$d
+    done
+}
+
+PACKAGES += "${PN}-test"
+
+FILES:${PN}-dbg += " \
+   /opt/${PN}-test/.debug/* \
+   "
+FILES:${PN}-test = " \
+   /opt/${PN}-test \
+   "