From 478abaffaf3ea12154e3e19a34cc047522c01095 Mon Sep 17 00:00:00 2001 From: Petr Nechaev Date: Tue, 15 Nov 2022 10:17:27 +0300 Subject: [PATCH] Update tweaktool to 2.1.5 * Increased maximum message size for RPMsg backend from 63.5 KiB to 15.75 MiB * Improved cross builds for aarch64 * Zephyr support, see https://www.zephyrproject.org/ * Dropped concerto build system, use cmake for TI PSDK builds * Minimum required CMake version is 3.16 * Introduced new CMakePresets.json for convenience * Removed pre-built nng, please build nng from source or download a package for your OS --- .gitignore | 2 +- CMakeLists.txt | 38 +- CMakePresets.json | 464 ++++++ README.md | 396 ++--- cmake/FindRPMSG.cmake | 30 + cmake/FindTIOVX.cmake | 229 +++ cmake/Platform/Concerto.cmake | 16 + cmake/TweakComponentInstall.cmake | 21 +- cmake/componentConfig.cmake.in | 4 +- cmake/concerto.mak.in | 33 + cmake/external-usage-test/CMakeLists.txt | 2 +- cmake/tda4_bsp7_cgt_arm.toolchain.cmake | 98 ++ .../tda4_bsp_8.02_cgt_armllvm.toolchain.cmake | 8 + .../tda4_bsp_8.04_cgt_armllvm.toolchain.cmake | 8 + .../tda4_bsp_8.1_cgt_armllvm.toolchain.cmake | 8 + cmake/tda4_bsp_8_cgt_armllvm.cmake | 39 + ...721s2_bsp_8.04_cgt_armllvm.toolchain.cmake | 8 + cmake/tda4_linux.toolchain.cmake | 17 + concerto.mak | 162 --- devops/Jenkinsfile | 3 + devops/ubuntu18.04/Dockerfile | 2 +- devops/ubuntu18.04/Jenkinsfile | 4 +- devops/ubuntu18.04/build-nng-debs.sh | 2 +- devops/ubuntu18.04/fetch-nng | 22 + devops/ubuntu18.04/user-builder | 28 + devops/ubuntu20.04/Dockerfile | 2 +- devops/ubuntu20.04/Jenkinsfile | 2 +- devops/ubuntu20.04/build-nng-debs.sh | 2 +- devops/ubuntu20.04/fetch-nng | 22 + devops/ubuntu20.04/user-builder | 28 + devops/ubuntu22.04/Dockerfile | 75 + devops/ubuntu22.04/Jenkinsfile | 54 + devops/ubuntu22.04/build-nng-debs.sh | 15 + devops/ubuntu22.04/fetch-nng | 22 + devops/ubuntu22.04/user-builder | 28 + examples/use-case-tweak-1/CMakeLists.txt | 2 +- libtweak2.gpj | 2 +- nng-prebuilt/tda4/concerto.mak | 40 - .../tda4/include/nng/compat/nanomsg/bus.h | 33 - .../tda4/include/nng/compat/nanomsg/inproc.h | 31 - .../tda4/include/nng/compat/nanomsg/ipc.h | 39 - .../tda4/include/nng/compat/nanomsg/nn.h | 284 ---- .../tda4/include/nng/compat/nanomsg/pair.h | 39 - .../include/nng/compat/nanomsg/pipeline.h | 34 - .../tda4/include/nng/compat/nanomsg/pubsub.h | 36 - .../tda4/include/nng/compat/nanomsg/reqrep.h | 35 - .../tda4/include/nng/compat/nanomsg/survey.h | 36 - .../tda4/include/nng/compat/nanomsg/tcp.h | 33 - .../tda4/include/nng/compat/nanomsg/ws.h | 41 - nng-prebuilt/tda4/include/nng/nng.h | 1284 ----------------- .../tda4/include/nng/protocol/bus0/bus.h | 34 - .../tda4/include/nng/protocol/pair0/pair.h | 34 - .../tda4/include/nng/protocol/pair1/pair.h | 40 - .../include/nng/protocol/pipeline0/pull.h | 33 - .../include/nng/protocol/pipeline0/push.h | 33 - .../tda4/include/nng/protocol/pubsub0/pub.h | 33 - .../tda4/include/nng/protocol/pubsub0/sub.h | 39 - .../tda4/include/nng/protocol/reqrep0/rep.h | 38 - .../tda4/include/nng/protocol/reqrep0/req.h | 39 - .../include/nng/protocol/survey0/respond.h | 38 - .../include/nng/protocol/survey0/survey.h | 40 - .../tda4/include/nng/supplemental/http/http.h | 539 ------- .../include/nng/supplemental/tls/engine.h | 207 --- .../tda4/include/nng/supplemental/tls/tls.h | 142 -- .../include/nng/supplemental/util/options.h | 48 - .../include/nng/supplemental/util/platform.h | 111 -- .../include/nng/transport/inproc/inproc.h | 28 - .../tda4/include/nng/transport/ipc/ipc.h | 29 - .../tda4/include/nng/transport/tcp/tcp.h | 28 - .../tda4/include/nng/transport/tls/tls.h | 28 - .../tda4/include/nng/transport/ws/websocket.h | 34 - .../include/nng/transport/zerotier/zerotier.h | 159 -- nng-prebuilt/tda4/lib/J7/A72/LINUX/libnng.a | Bin 984848 -> 0 bytes nng-prebuilt/tda4/lib/J7/A72/QNX/libnng.a | Bin 1139692 -> 0 bytes packaging/CMakeLists.txt | 72 +- packaging/generators.cmake | 63 + tweak-app-cl/concerto.mak | 50 - tweak-app/CMakeLists.txt | 3 +- tweak-app/test/test-tweakmodel/CMakeLists.txt | 2 +- .../test/test-uri-to-index/CMakeLists.txt | 2 +- tweak-common/CMakeLists.txt | 48 +- tweak-common/include/tweak2/thread.h | 27 +- tweak-common/src/tweak_id_gen_zephyr.c | 36 + .../src/{tweaklog_unix.c => tweaklog.c} | 2 +- tweak-common/src/tweaklog_format_time_tda4.c | 7 +- .../src/tweaklog_format_time_zephyr.c | 36 + tweak-common/src/tweaklog_thread_id_zephyr.c | 46 + tweak-gw/CMakeLists.txt | 33 + tweak-gw/concerto.mak | 34 - tweak-pickle/src/autogen/pb_decode.c | 148 +- tweak-py/CMakeLists.txt | 35 +- tweak-wire/CMakeLists.txt | 18 +- tweak-wire/src/tweakwire_rpmsg.c | 47 +- tweak-wire/src/tweakwire_rpmsg_transport.h | 8 +- .../src/tweakwire_rpmsg_transport_linux.c | 49 +- zephyr/CMakeLists.txt | 76 + zephyr/Kconfig | 4 + zephyr/module.yml | 6 + 98 files changed, 2072 insertions(+), 4397 deletions(-) create mode 100644 CMakePresets.json create mode 100644 cmake/FindRPMSG.cmake create mode 100644 cmake/FindTIOVX.cmake create mode 100644 cmake/Platform/Concerto.cmake create mode 100644 cmake/concerto.mak.in create mode 100644 cmake/tda4_bsp7_cgt_arm.toolchain.cmake create mode 100644 cmake/tda4_bsp_8.02_cgt_armllvm.toolchain.cmake create mode 100644 cmake/tda4_bsp_8.04_cgt_armllvm.toolchain.cmake create mode 100644 cmake/tda4_bsp_8.1_cgt_armllvm.toolchain.cmake create mode 100644 cmake/tda4_bsp_8_cgt_armllvm.cmake create mode 100644 cmake/tda4_j721s2_bsp_8.04_cgt_armllvm.toolchain.cmake create mode 100644 cmake/tda4_linux.toolchain.cmake delete mode 100644 concerto.mak create mode 100644 devops/ubuntu18.04/fetch-nng create mode 100644 devops/ubuntu18.04/user-builder create mode 100644 devops/ubuntu20.04/fetch-nng create mode 100644 devops/ubuntu20.04/user-builder create mode 100644 devops/ubuntu22.04/Dockerfile create mode 100644 devops/ubuntu22.04/Jenkinsfile create mode 100755 devops/ubuntu22.04/build-nng-debs.sh create mode 100644 devops/ubuntu22.04/fetch-nng create mode 100644 devops/ubuntu22.04/user-builder delete mode 100644 nng-prebuilt/tda4/concerto.mak delete mode 100644 nng-prebuilt/tda4/include/nng/compat/nanomsg/bus.h delete mode 100644 nng-prebuilt/tda4/include/nng/compat/nanomsg/inproc.h delete mode 100644 nng-prebuilt/tda4/include/nng/compat/nanomsg/ipc.h delete mode 100644 nng-prebuilt/tda4/include/nng/compat/nanomsg/nn.h delete mode 100644 nng-prebuilt/tda4/include/nng/compat/nanomsg/pair.h delete mode 100644 nng-prebuilt/tda4/include/nng/compat/nanomsg/pipeline.h delete mode 100644 nng-prebuilt/tda4/include/nng/compat/nanomsg/pubsub.h delete mode 100644 nng-prebuilt/tda4/include/nng/compat/nanomsg/reqrep.h delete mode 100644 nng-prebuilt/tda4/include/nng/compat/nanomsg/survey.h delete mode 100644 nng-prebuilt/tda4/include/nng/compat/nanomsg/tcp.h delete mode 100644 nng-prebuilt/tda4/include/nng/compat/nanomsg/ws.h delete mode 100644 nng-prebuilt/tda4/include/nng/nng.h delete mode 100644 nng-prebuilt/tda4/include/nng/protocol/bus0/bus.h delete mode 100644 nng-prebuilt/tda4/include/nng/protocol/pair0/pair.h delete mode 100644 nng-prebuilt/tda4/include/nng/protocol/pair1/pair.h delete mode 100644 nng-prebuilt/tda4/include/nng/protocol/pipeline0/pull.h delete mode 100644 nng-prebuilt/tda4/include/nng/protocol/pipeline0/push.h delete mode 100644 nng-prebuilt/tda4/include/nng/protocol/pubsub0/pub.h delete mode 100644 nng-prebuilt/tda4/include/nng/protocol/pubsub0/sub.h delete mode 100644 nng-prebuilt/tda4/include/nng/protocol/reqrep0/rep.h delete mode 100644 nng-prebuilt/tda4/include/nng/protocol/reqrep0/req.h delete mode 100644 nng-prebuilt/tda4/include/nng/protocol/survey0/respond.h delete mode 100644 nng-prebuilt/tda4/include/nng/protocol/survey0/survey.h delete mode 100644 nng-prebuilt/tda4/include/nng/supplemental/http/http.h delete mode 100644 nng-prebuilt/tda4/include/nng/supplemental/tls/engine.h delete mode 100644 nng-prebuilt/tda4/include/nng/supplemental/tls/tls.h delete mode 100644 nng-prebuilt/tda4/include/nng/supplemental/util/options.h delete mode 100644 nng-prebuilt/tda4/include/nng/supplemental/util/platform.h delete mode 100644 nng-prebuilt/tda4/include/nng/transport/inproc/inproc.h delete mode 100644 nng-prebuilt/tda4/include/nng/transport/ipc/ipc.h delete mode 100644 nng-prebuilt/tda4/include/nng/transport/tcp/tcp.h delete mode 100644 nng-prebuilt/tda4/include/nng/transport/tls/tls.h delete mode 100644 nng-prebuilt/tda4/include/nng/transport/ws/websocket.h delete mode 100644 nng-prebuilt/tda4/include/nng/transport/zerotier/zerotier.h delete mode 100644 nng-prebuilt/tda4/lib/J7/A72/LINUX/libnng.a delete mode 100644 nng-prebuilt/tda4/lib/J7/A72/QNX/libnng.a create mode 100644 packaging/generators.cmake delete mode 100644 tweak-app-cl/concerto.mak create mode 100644 tweak-common/src/tweak_id_gen_zephyr.c rename tweak-common/src/{tweaklog_unix.c => tweaklog.c} (99%) create mode 100644 tweak-common/src/tweaklog_format_time_zephyr.c create mode 100644 tweak-common/src/tweaklog_thread_id_zephyr.c create mode 100644 tweak-gw/CMakeLists.txt delete mode 100644 tweak-gw/concerto.mak create mode 100644 zephyr/CMakeLists.txt create mode 100644 zephyr/Kconfig create mode 100644 zephyr/module.yml diff --git a/.gitignore b/.gitignore index ce1f435..400556d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,4 @@ /out/* /docker-build/* CMakeSettings.json -/build* +CMakeUserPresets.json diff --git a/CMakeLists.txt b/CMakeLists.txt index b162b8b..763a3c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ # ------------------------------------------------------------------------------ # Check CMake version # ------------------------------------------------------------------------------ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.16) # ------------------------------------------------------------------------------ # Generate project version @@ -40,6 +40,9 @@ if(POLICY CMP0092) cmake_policy(SET CMP0092 NEW) endif() +# search for additional CMake modules +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) + # ------------------------------------------------------------------------------ # Create project # ------------------------------------------------------------------------------ @@ -71,6 +74,7 @@ cmake_dependent_option(BUILD_CLI "Build command line client" ON "NOT MSVC" OFF) option(WITH_DOXYGEN "Enable Doxygen-based documentation" OFF) option(WITH_PYTHON "Build Python 3 binding" ON) option(WITH_WIRE_NNG "Build NNG wire backend" ON) +option(WITH_TWEAK_GW "Build Tweak RPMSG<=>NNG Gateway app" OFF) # cmake-format: on set(WIRE_RPMSG_BACKENDS OFF TI_API CHRDEV) @@ -91,7 +95,9 @@ set_property(CACHE TWEAK_COMMON_LOG_LEVEL PROPERTY STRINGS # Global project configuration # ------------------------------------------------------------------------------ -set(CMAKE_POSITION_INDEPENDENT_CODE YES) +if (WITH_PYTHON) + set(CMAKE_POSITION_INDEPENDENT_CODE YES) +endif() set(PROJECT_VENDOR "Cogent Embedded, Inc.") add_definitions(-DPROJECT_VENDOR=\"${PROJECT_VENDOR}\") @@ -101,6 +107,10 @@ add_definitions(-DPROJECT_DOMAIN=\"${PROJECT_DOMAIN}\") add_definitions(-DPROJECT_SUMMARY=\"${PROJECT_SUMMARY}\") add_definitions(-DPROJECT_FULL_NAME=\"${PROJECT_FULL_NAME}\") +if (CMAKE_SYSTEM_PROCESSOR STREQUAL "TI_ARM_R5F") + add_definitions(-DTI_ARM_R5F) +endif() + set(PROJECT_NAMESPACE tweak2) set(GUI_TOOL_NAME tweak-gui) @@ -109,9 +119,6 @@ set(GUI_TOOL_NAME tweak-gui) # Dependencies # ------------------------------------------------------------------------------ -# search for additional CMake modules -list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) - if(BUILD_TESTS) # Acutest has MIT license @@ -146,9 +153,6 @@ include(GenerateExportHeader) include(AppendToGlobalList) include(TweakComponentInstall) -set(THREADS_PREFER_PTHREAD_FLAG ON) -find_package(Threads REQUIRED) - if(CMAKE_BUILD_TYPE STREQUAL "Asan") if(MSVC) add_compile_options(/Zi /fsanitize=address @@ -201,7 +205,7 @@ if(NO_DEPRECATED_COPY_SUPPORTED) add_compile_options($<$:-Wno-deprecated-copy>) endif() -if(CMAKE_BUILD_TYPE STREQUAL "Release") +if(CMAKE_BUILD_TYPE STREQUAL "Release" AND NOT CMAKE_CXX_COMPILER_ID STREQUAL "TI") include(CheckCXXCompilerFlag) check_cxx_compiler_flag(-ffile-prefix-map=${CMAKE_CURRENT_LIST_DIR}= CXX_FILE_PREFIX_MAP_SUPPORTED) @@ -248,6 +252,10 @@ if(BUILD_GUI) add_subdirectory(tweak-gui-qml) endif() +if (WITH_TWEAK_GW) + add_subdirectory(tweak-gw) +endif() + # ------------------------------------------------------------------------------ # Generate CMake infrastructure # ------------------------------------------------------------------------------ @@ -272,6 +280,18 @@ install( DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAMESPACE} COMPONENT dev) +if(CMAKE_SYSTEM_NAME STREQUAL "Concerto") + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/concerto.mak.in + ${CMAKE_CURRENT_BINARY_DIR}/concerto.mak + @ONLY) + + install( + FILES "${CMAKE_CURRENT_BINARY_DIR}/concerto.mak" + DESTINATION ${CMAKE_INSTALL_PREFIX} + COMPONENT dev + ) +endif() + # ------------------------------------------------------------------------------ # Building docs with collected sets of files # ------------------------------------------------------------------------------ diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 0000000..6094544 --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,464 @@ +{ + "version": 4, + "cmakeMinimumRequired": { + "major": 3, + "minor": 23, + "patch": 0 + }, + "configurePresets": [ + { + "name":"pc-linux-debug", + "displayName": "PC Linux Debug Config", + "description": "Default PC Linux Debug", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/${presetName}", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_INSTALL_PREFIX": "/usr", + "BUILD_TESTS": "ON", + "BUILD_GUI": "ON", + "TWEAK_COMMON_LOG_LEVEL": "Debug" + } + }, + { + "name":"pc-linux-release", + "inherits": "pc-linux-debug", + "displayName": "PC Linux Release Config", + "description": "Default PC Linux Release", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/${presetName}", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "BUILD_TESTS": "OFF", + "TWEAK_COMMON_LOG_LEVEL": "Error" + } + }, + { + "name": "r5f-build-options", + "hidden": true, + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/${presetName}", + "cacheVariables": { + "CMAKE_INSTALL_PREFIX": "/cogent_tweaktool", + "WITH_WIRE_NNG": "OFF", + "BUILD_MOCK": "OFF", + "WIRE_RPMSG_BACKEND": "TI_API", + "BUILD_CLI": "OFF", + "WITH_PYTHON": "OFF" + } + }, + { + "name": "vb4-r5f-sysbios-debug", + "inherits": "r5f-build-options", + "displayName": "VB4 R5F SYSBIOS Debug Config", + "description": "VB4 R5F SYSBIOS Debug Build Configuration", + "environment": { + "DEVICE_NAME": "vb4", + "BSP_ROOT":"/opt/$env{DEVICE_NAME}", + "PSDKR_PATH": "$env{BSP_ROOT}/ti-processor-sdk-rtos-j721e-evm-07_01_00_11" + }, + "toolchainFile": "${sourceDir}/cmake/tda4_bsp7_cgt_arm.toolchain.cmake", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "vb4-r5f-sysbios-debug-env", + "inherits": "vb4-r5f-sysbios-debug", + "displayName": "VB4 R5F SYSBIOS Debug Config using env BSP_ROOT", + "description": "VB4 R5F SYSBIOS Debug Build Configuration using env BSP_ROOT", + "environment": { + "BSP_ROOT": "$penv{BSP_ROOT}" + } + }, + { + "name": "vb4-r5f-sysbios-release", + "inherits": "vb4-r5f-sysbios-debug", + "displayName": "VB4 R5F SYSBIOS Release Config", + "description": "VB4 R5F SYSBIOS Release Build Configuration", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "vb4-r5f-sysbios-release-env", + "inherits": "vb4-r5f-sysbios-release", + "displayName": "VB4 R5F SYSBIOS Release Config using env BSP_ROOT", + "description": "VB4 R5F SYSBIOS Release Build Configuration using env BSP_ROOT", + "environment": { + "BSP_ROOT": "$penv{BSP_ROOT}" + } + }, + { + "name": "vb4.3-r5f-freertos-debug", + "inherits": "r5f-build-options", + "displayName": "VB4.3 R5F FREERTOS Debug Config", + "description": "VB4.3 R5F FREERTOS Debug Build Configuration", + "environment": { + "DEVICE_NAME": "vb4.3", + "BSP_ROOT":"/opt/$env{DEVICE_NAME}", + "PSDKR_PATH": "$env{BSP_ROOT}/ti-processor-sdk-rtos-j721e-evm-08_02_00_05" + }, + "toolchainFile": "${sourceDir}/cmake/tda4_bsp_8.02_cgt_armllvm.toolchain.cmake", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "vb4.3-r5f-freertos-debug-env", + "inherits": "vb4.3-r5f-freertos-debug", + "displayName": "VB4.3 R5F FREERTOS Debug Config using env BSP_ROOT", + "description": "VB4.3 R5F FREERTOS Debug Build Configuration using env BSP_ROOT", + "environment": { + "BSP_ROOT": "$penv{BSP_ROOT}" + } + }, + { + "name": "vb4.3-r5f-freertos-release", + "inherits": "vb4.3-r5f-freertos-debug", + "displayName": "VB4.3 R5F FREERTOS Release Config", + "description": "VB4.3 R5F FREERTOS Release Build Configuration", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "vb4.3-r5f-freertos-release-env", + "inherits": "vb4.3-r5f-freertos-release", + "displayName": "VB4.3 R5F FREERTOS Release Config using env BSP_ROOT", + "description": "VB4.3 R5F FREERTOS Release Build Configuration using env BSP_ROOT", + "environment": { + "BSP_ROOT": "$penv{BSP_ROOT}" + } + }, + { + "name": "evm-r5f-freertos-debug", + "displayName": "EVM R5F FREERTOS Debug Config", + "description": "EVM R5F FREERTOS Debug Build Configuration", + "inherits": "r5f-build-options", + "environment": { + "DEVICE_NAME": "evm", + "BSP_ROOT":"/opt/$env{DEVICE_NAME}", + "PSDKR_PATH": "$env{BSP_ROOT}/ti-processor-sdk-rtos-j721e-evm-08_04_00_02" + }, + "toolchainFile": "${sourceDir}/cmake/tda4_bsp_8.04_cgt_armllvm.toolchain.cmake", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "evm-r5f-freertos-debug-env", + "inherits": "evm-r5f-freertos-debug", + "displayName": "EVM R5F FREERTOS Debug Config using env BSP_ROOT", + "description": "EVM R5F FREERTOS Debug Build Configuration using env BSP_ROOT", + "environment": { + "BSP_ROOT": "$penv{BSP_ROOT}" + } + }, + { + "name": "evm-r5f-freertos-release", + "inherits": "evm-r5f-freertos-debug", + "displayName": "EVM R5F FREERTOS Release Config", + "description": "EVM R5F FREERTOS Release Build Configuration", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "evm-r5f-freertos-release-env", + "inherits": "evm-r5f-freertos-release", + "displayName": "EVM R5F FREERTOS Release Config using env BSP_ROOT", + "description": "EVM R5F FREERTOS Release Build Configuration using env BSP_ROOT", + "environment": { + "BSP_ROOT": "$penv{BSP_ROOT}" + } + }, + { + "name": "a72-linux-build-options", + "hidden": true, + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/${presetName}", + "environment": { + "SDKTARGETSYSROOT": "$env{LINUX_DEVKIT}/sysroots/aarch64-linux", + "OECORE_NATIVE_SYSROOT": "$env{LINUX_DEVKIT}/sysroots/x86_64-arago-linux", + "OECORE_TARGET_SYSROOT": "$env{SDKTARGETSYSROOT}", + "OE_CMAKE_TOOLCHAIN_FILE": "$env{OECORE_NATIVE_SYSROOT}/usr/share/cmake/OEToolchainConfig.cmake", + "PKG_CONFIG_SYSROOT_DIR": "$env{SDKTARGETSYSROOT}", + "PKG_CONFIG_PATH": "$env{SDKTARGETSYSROOT}/usr/lib/pkgconfig:$env{SDKTARGETSYSROOT}/usr/share/pkgconfig", + "CONFIG_SITE":"$env{LINUX_DEVKIT}/site-config-aarch64-linux", + "PATH": "$env{OECORE_NATIVE_SYSROOT}/usr/bin:$env{OECORE_NATIVE_SYSROOT}/sbin:$penv{PATH}", + "CC": "aarch64-none-linux-gnu-gcc --sysroot=$env{SDKTARGETSYSROOT}", + "CXX": "aarch64-none-linux-gnu-g++ --sysroot=$env{SDKTARGETSYSROOT}", + "CPP": "aarch64-none-linux-gnu-gcc -E --sysroot=$env{SDKTARGETSYSROOT}", + "AS": "aarch64-none-linux-gnu-as", + "LD": "aarch64-none-linux-gnu-ld --sysroot=$env{SDKTARGETSYSROOT}", + "STRIP": "aarch64-none-linux-gnu-strip", + "RANLIB": "aarch64-none-linux-gnu-ranlib", + "OBJCOPY": "aarch64-none-linux-gnu-objcopy", + "AR": "aarch64-none-linux-gnu-ar", + "NM": "aarch64-none-linux-gnu-nm", + "M4": "m4", + "ARCH": "arm64" + }, + "toolchainFile": "${sourceDir}/cmake/tda4_linux.toolchain.cmake", + "cacheVariables": { + "CMAKE_INSTALL_PREFIX": "/usr", + "WITH_TWEAK_GW":"ON", + "WIRE_RPMSG_BACKEND": "CHRDEV", + "WITH_PYTHON": "ON" + } + }, + { + "name": "vb4-a72-linux-debug", + "inherits": "a72-linux-build-options", + "displayName": "VB4 A72 Linux Debug Config", + "description": "VB4 A72 Linux Debug Build Configuration", + "environment": { + "DEVICE_NAME": "vb4", + "BSP_ROOT":"/opt/$env{DEVICE_NAME}", + "PSDKR_PATH": "$env{BSP_ROOT}/ti-processor-sdk-rtos-j721e-evm-07_01_00_11", + "LINUX_DEVKIT": "$env{BSP_ROOT}/ti-processor-sdk-linux-j7-evm-07_01_00_10/linux-devkit" + }, + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "vb4-a72-linux-debug-env", + "inherits": "vb4-a72-linux-debug", + "displayName": "VB4 A72 Linux Debug Config using env BSP_ROOT", + "description": "VB4 A72 Linux Debug Build Configuration using env BSP_ROOT", + "environment": { + "BSP_ROOT": "$penv{BSP_ROOT}" + } + }, + { + "name": "vb4-a72-linux-release", + "inherits": "vb4-a72-linux-debug", + "displayName": "VB4 A72 Linux Release Config", + "description": "VB4 A72 Linux Release Build Configuration", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "vb4-a72-linux-release-env", + "inherits": "vb4-a72-linux-release", + "displayName": "VB4 A72 Linux Release Config using env BSP_ROOT", + "description": "VB4 A72 Linux Release Build Configuration using env BSP_ROOT", + "environment": { + "BSP_ROOT": "$penv{BSP_ROOT}" + } + }, + { + "name": "vb4.3-a72-linux-debug", + "inherits": "a72-linux-build-options", + "displayName": "VB4.3 A72 Linux Debug Config", + "description": "VB4.3 A72 Linux Debug Build Configuration", + "environment": { + "DEVICE_NAME": "vb4.3", + "BSP_ROOT":"/opt/$env{DEVICE_NAME}", + "PSDKR_PATH": "$env{BSP_ROOT}/ti-processor-sdk-rtos-j721e-evm-08_02_00_05", + "LINUX_DEVKIT": "$env{BSP_ROOT}/ti-processor-sdk-linux-j7-evm-08_02_00_03/linux-devkit" + }, + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug" + } + }, + { + "name": "vb4.3-a72-linux-debug-env", + "inherits": "vb4.3-a72-linux-debug", + "displayName": "VB4.3 A72 Linux Debug Config using env BSP_ROOT", + "description": "VB4.3 A72 Linux Debug Build Configuration using env BSP_ROOT", + "environment": { + "BSP_ROOT": "$penv{BSP_ROOT}" + } + }, + { + "name": "vb4.3-a72-linux-release", + "inherits": "vb4.3-a72-linux-debug", + "displayName": "VB4.3 A72 Linux Release Config", + "description": "VB4.3 A72 Linux Release Build Configuration", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "vb4.3-a72-linux-release-env", + "inherits": "vb4.3-a72-linux-release", + "displayName": "VB4.3 A72 Linux Release Config using env BSP_ROOT", + "description": "VB4.3 A72 Linux Release Build Configuration using env BSP_ROOT", + "environment": { + "BSP_ROOT": "$penv{BSP_ROOT}" + } + }, + { + "name": "evm-a72-linux-debug", + "inherits": "a72-linux-build-options", + "displayName": "EVM A72 Linux Debug Config", + "description": "EVM A72 Linux Debug Build Configuration", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/${presetName}", + "environment": { + "DEVICE_NAME": "evm", + "BSP_ROOT":"/opt/$env{DEVICE_NAME}", + "PSDKR_PATH": "$env{BSP_ROOT}/ti-processor-sdk-rtos-j721e-evm-08_04_00_02", + "LINUX_DEVKIT": "$env{BSP_ROOT}/ti-processor-sdk-linux-j7-evm-08_04_00_11/linux-devkit" + } + }, + { + "name": "evm-a72-linux-debug-env", + "inherits": "evm-a72-linux-debug", + "displayName": "EVM A72 Linux Debug Config using env BSP_ROOT", + "description": "EVM A72 Linux Debug Build Configuration using env BSP_ROOT", + "environment": { + "BSP_ROOT": "$penv{BSP_ROOT}" + } + }, + { + "name": "evm-a72-linux-release", + "inherits": "evm-a72-linux-debug", + "displayName": "EVM A72 Linux Release Config", + "description": "EVM A72 Linux Release Build Configuration", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + }, + { + "name": "evm-a72-linux-release-env", + "inherits": "evm-a72-linux-release", + "displayName": "EVM A72 Linux Release Config using env BSP_ROOT", + "description": "EVM A72 Linux Release Build Configuration using env BSP_ROOT", + "environment": { + "BSP_ROOT": "$penv{BSP_ROOT}" + } + } + ], + "buildPresets": [ + { + "name": "pc-linux-release", + "configurePreset":"pc-linux-release", + "targets": ["all", "package"] + }, + { + "name": "vb4-r5f-sysbios-debug", + "configurePreset":"vb4-r5f-sysbios-debug", + "targets": ["all", "package"] + }, + { + "name": "vb4-r5f-sysbios-debug-env", + "configurePreset":"vb4-r5f-sysbios-debug-env", + "targets": ["all", "package"] + }, + { + "name": "vb4-r5f-sysbios-release", + "configurePreset":"vb4-r5f-sysbios-release", + "targets": ["all", "package"] + }, + { + "name": "vb4-r5f-sysbios-release-env", + "configurePreset":"vb4-r5f-sysbios-release-env", + "targets": ["all", "package"] + }, + { + "name": "vb4.3-r5f-freertos-debug", + "configurePreset":"vb4.3-r5f-freertos-debug", + "targets": ["all", "package"] + }, + { + "name": "vb4.3-r5f-freertos-debug-env", + "configurePreset":"vb4.3-r5f-freertos-debug-env", + "targets": ["all", "package"] + }, + { + "name": "vb4.3-r5f-freertos-release", + "configurePreset":"vb4.3-r5f-freertos-release", + "targets": ["all", "package"] + }, + { + "name": "vb4.3-r5f-freertos-release-env", + "configurePreset":"vb4.3-r5f-freertos-release-env", + "targets": ["all", "package"] + }, + { + "name": "evm-r5f-freertos-debug", + "configurePreset":"evm-r5f-freertos-debug", + "targets": ["all", "package"] + }, + { + "name": "evm-r5f-freertos-debug-env", + "configurePreset":"evm-r5f-freertos-debug-env", + "targets": ["all", "package"] + }, + { + "name": "evm-r5f-freertos-release", + "configurePreset":"evm-r5f-freertos-release", + "targets": ["all", "package"] + }, + { + "name": "evm-r5f-freertos-release-env", + "configurePreset":"evm-r5f-freertos-release-env", + "targets": ["all", "package"] + }, + { + "name": "vb4-a72-linux-debug", + "configurePreset":"vb4-a72-linux-debug", + "targets": ["all", "package"] + }, + { + "name": "vb4-a72-linux-debug-env", + "configurePreset":"vb4-a72-linux-debug-env", + "targets": ["all", "package"] + }, + { + "name": "vb4-a72-linux-release", + "configurePreset":"vb4-a72-linux-release", + "targets": ["all", "package"] + }, + { + "name": "vb4-a72-linux-release-env", + "configurePreset":"vb4-a72-linux-release-env", + "targets": ["all", "package"] + }, + { + "name": "vb4.3-a72-linux-debug", + "configurePreset":"vb4.3-a72-linux-debug", + "targets": ["all", "package"] + }, + { + "name": "vb4.3-a72-linux-debug-env", + "configurePreset":"vb4.3-a72-linux-debug-env", + "targets": ["all", "package"] + }, + { + "name": "vb4.3-a72-linux-release", + "configurePreset":"vb4.3-a72-linux-release", + "targets": ["all", "package"] + }, + { + "name": "vb4.3-a72-linux-release-env", + "configurePreset":"vb4.3-a72-linux-release-env", + "targets": ["all", "package"] + }, + { + "name": "evm-a72-linux-debug", + "configurePreset":"evm-a72-linux-debug", + "targets": ["all", "package"] + }, + { + "name": "evm-a72-linux-debug-env", + "configurePreset":"evm-a72-linux-debug-env", + "targets": ["all", "package"] + }, + { + "name": "evm-a72-linux-release", + "configurePreset":"evm-a72-linux-release", + "targets": ["all", "package"] + }, + { + "name": "evm-a72-linux-release-env", + "configurePreset":"evm-a72-linux-release-env", + "targets": ["all", "package"] + } + ] +} diff --git a/README.md b/README.md index 752389c..eb74f8c 100644 --- a/README.md +++ b/README.md @@ -12,279 +12,327 @@ that can be updated using remote GUI or a command line client. The protocol is reactive and full duplex by design, so both sides are kept in sync and get live updates. -## Installation and Configuration +## Prebuilt Releases -Two options are available: using docker or local build. -Docker is better option for making deliveries. With this option, builds are reproducible -and user's environment doesn't interfere with build process in any way. +Download location: -Local builds are better for developers. With this option, user could play with compilation -options, build program with Debug symbols and/or trace logs. +## Building from source code -### Step-by-step guide to build tweaktool2 on Ubuntu 20.0 +Tweak tool uses docker to build external dependencies not available directly from host OS. + +Docker is a framework for creating reproducible environments using lightweight virtual machines. +This library provides scripts for reproducible builds of its packages for Ubuntu LTS variants: 18.04, 20.04 and 22.04. + +First, you have to install docker: + + + +Ensure current user belongs to "docker" group. + +### Step-by-step guide to build on Ubuntu LTS variants Step 1 -Install basic Ubuntu build utilities and Qt developer's packages. +Choose appropriate Ubuntu version (18.04, 20.04, 22.04) and set `VERSION` variable. +Prepare docker image with dependencies. ```bash -sudo apt-get -y install git cmake build-essential \ - libreadline-dev qt5-default qml-module-qtqml-models2 qml-module-qtquick-controls2 \ - qml-module-qtquick-* qml-module-qt-labs-settings \ - qtdeclarative5-dev qtquickcontrols2-5-dev expect +export VERSION=18.04 +DOCKER_BUILDKIT=1 docker build -t tweak-builder:${VERSION} devops/ubuntu${VERSION} ``` +To build tweak in host OS install build dependencies as required by `devops/ubuntu${VERSION}/Dockerfile`. + Step 2 -Checkout actual tweaktool2 branch. +Fetch prebuilt NNG library from Docker image. ```bash -git clone https://github.com/CogentEmbedded/tweaktool.git --recursive +mkdir -p nng-prebuilt/${VERSION} +DOCKER_BUILDKIT=1 docker build -f devops/ubuntu${VERSION}/fetch-nng --output type=local,dest=nng-prebuilt/${VERSION} devops/ubuntu${VERSION} ``` -Step 3 - -Install NNG library for tweaktool 2. - -Option A: Install pre-built NNG packages +Install pre-built NNG packages ```bash -sudo apt-get -y install libmbedtls-dev libmbedcrypto3 libmbedtls12 libmbedx509-0 -sudo dpkg -i ./tweaktool/nng-prebuilt/ubuntu_20_04/libnng1_1.4.0-1build1.1_amd64.deb \ - ./tweaktool/nng-prebuilt/ubuntu_20_04/libnng-dev_1.4.0-1build1.1_amd64.deb \ - ./tweaktool/nng-prebuilt/ubuntu_20_04/nng-utils_1.4.0-1build1.1_amd64.deb +sudo apt-get -y install +sudo dpkg -i nng-prebuilt/${VERSION}/*.deb ``` -Option B: Build NNG packages manually +Step 3 -Infrastructure for deb packaging is needed here. -This script installs NNG packages being built, thus it requires sudo. +Checkout source code. ```bash -sudo apt-get -y install fakeroot devscripts equivs dh-python debhelper-compat ubuntu-dev-tools \ - scons protobuf-compiler libmbedtls-dev libmbedcrypto3 libmbedtls12 libmbedx509-0 -sudo ../tweaktool/build-nng-debs.sh +git clone https://github.com/CogentEmbedded/tweaktool.git --recurse-submodules +cd tweaktool ``` Step 4 -```bash -mkdir -p ./tweaktool-build +---- -cd ./tweaktool-build -``` +Optional: if using docker -Step 5 +Create docker image with same user as on host to minimize hassle with file permissions: ```bash -../tweaktool/build-debs.sh ../tweaktool +DOCKER_BUILDKIT=1 docker build \ + --build-arg USER \ + --build-arg UID=$(id -u) \ + --build-arg GID=$(id -g) \ + -t tweak-user-builder:${VERSION} \ + -f devops/ubuntu${VERSION}/user-builder \ + devops/ubuntu${VERSION} ``` -After all these commands user should get all the debs inside ./tweak-build directory. +Start temporary docker container with current source code -### Step-by-step guide to build tweaktool2 on Ubuntu 18.04 +```bash +docker run --rm -it -v "$PWD:$PWD" --workdir="$PWD" tweak-user-builder:${VERSION} bash +``` -Step 1 +---- + +Following steps can be executed inside docker container or on host. -Install basic Ubuntu build utilities and Qt developer's packages. +Option 1: if using cmake 3.23+ use preset ```bash -sudo apt-get -y install git cmake build-essential \ - libreadline-dev qt5-default qml-module-qtqml-models2 qml-module-qtquick-controls2 \ - qml-module-qtquick-* qml-module-qt-labs-settings \ - qtdeclarative5-dev qtquickcontrols2-5-dev expect +rm -rf build/pc-linux-release +cmake --preset pc-linux-release +cmake --build --preset pc-linux-release ``` -Step 2 +After successful build deb and rpm files are available at build output directory `build/pc-linux-release`. -Checkout actual tweaktool2 branch. +Option 2: configure build manually according to application needs, e.g. for PC: ```bash -git clone https://github.com/CogentEmbedded/tweaktool.git --recursive +mkdir build +cd build +cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_GUI=ON .. +cmake --build . +cmake --build . --target package ``` -Step 3 +User could provide additional flags to CMake: -Install NNG library for tweaktool 2. +- BUILD_TESTS - Adds "test" target. Default: OFF. +- BUILD_GUI - Builds Qt GUI client. Default: OFF. +- BUILD_MOCK - Build mock tweak server. Default: ON. +- BUILD_CLI - Build console tweak client application. Default: ON, Windows is not supported. +- WITH_DOXYGEN - Generate tweak2 documentation from source code using Doxygen. Default: OFF. +- WITH_PYTHON - enable python bindings. Default: ON. +- WITH_WIRE_NNG - Adds NNG support to connection factory. Default: ON. ---- -**NOTE** -There's no step-by-step entry on how to build NNG packages for Ubuntu 18. -It requires non trivial build environment. +For systems with RPMSG IPC: -If the user aren't satisfied with prebuilt deb files, one have to refer -advanced build recipes. ---- +- WIRE_RPMSG_BACKEND - enable specific backend. Default: OFF. Possible values: + - OFF - disabled + - TI_API - for direct use of TI API + - CHRDEV - for Linux RPMSG driver +- WITH_TWEAK_GW - build gateway application that creates bridge between RPMSG and NNG. + It is used in case when tweak server is running on core with RTOS and tweak access is required from Linux host. + +### Using CMake Presets + +Since CMake v3.23 build presets are available. + +If default paths are not valid for cross-build toolchains, create +new file `CMakeUserPresets.json` at the project root and fill it with custom settings. + +Add as many overrides as needed, user defined presets file is not version controlled. + +Visual Studio Code with CMake Tools plugin will allow configuration and building via its UI. + +From command line it can be invoked as: ```bash -sudo apt-get -y install libmbedtls-dev libmbedcrypto1 libmbedtls10 libmbedx509-0 -sudo dpkg -i ./tweaktool/nng-prebuilt/ubuntu_18_04/libnng1_1.4.0-1build1.1_amd64.deb \ - ./tweaktool/nng-prebuilt/ubuntu_18_04/libnng-dev_1.4.0-1build1.1_amd64.deb \ - ./tweaktool/nng-prebuilt/ubuntu_18_04/nng-utils_1.4.0-1build1.1_amd64.deb +cmake --preset pc-linux-release +cmake --build --preset pc-linux-release ``` -Step 4 +For Cogent Embedded VB4 target prebuilt binary version can be generated with following commands: ---- -**NOTE** -There's currently a defect not allowing to build tweaktool with cmake provided with Ubuntu 18.04 +```bash -build-debs.sh could fail with error in target "SortFilterProxyModel". +cmake --preset vb4-r5f-sysbios-release +cmake --build --preset vb4-r5f-sysbios-release +cd build/vb4-r5f-sysbios-release +DESTDIR=/opt/vb4/ti-processor-sdk-rtos-j721e-evm-07_01_00_11/vision_apps/utils ninja install +cd - + +cmake --preset vb4-a72-linux-release +cmake --build --preset vb4-a72-linux-release +for f in build/vb4-a72-linux-release/tweaktool-*.tar.gz; do + # Update concerto targetfs + sudo tar xf $f -C /opt/vb4/ti-processor-sdk-rtos-j721e-evm-07_01_00_11/targetfs + # Update SDK sysroot + sudo tar xf $f -C /opt/vb4/ti-processor-sdk-linux-j7-evm-07_01_00_10/linux-devkit/sysroots/aarch64-linux/ +done +``` + +Rebuild VB4 BSP afterwards. -Until there's a solution, there's no option but to upgrade cmake, as in Step 3/Option B. ---- +List all available presets in command line: ```bash -mkdir -p ./tweaktool-build -cd ./tweaktool-build -../tweaktool/build-debs.sh ../tweaktool +cmake --list-presets ``` -After all these commands user should get all the debs inside ./tweak-build directory. +### Building for TDA4 EVM targets -### Build Using Docker +#### Prebuilt SDK 8.04 -Docker is a framework for creating reproducible environments using lightweight virtual machines. -This library provides scripts for reproducible builds of its packages for Ubuntu 18.04 -and Ubuntu 20.04. +```bash +export EVM_BSP_PATH=/opt/evm -First, you have to install docker: +${DOWNLOADS}/ti-processor-sdk-linux-j7-evm-08_04_00_11-Linux-x86-Install.bin \ + --mode unattended \ + --prefix ${EVM_BSP_PATH}/ti-processor-sdk-linux-j7-evm-08_04_00_11 - +tar xf ${DOWNLOADS}/ti-processor-sdk-rtos-j721e-evm-08_04_00_02.tar.gz -Then, you have to install docker-compose utility: - +${DOWNLOADS}/ti-processor-sdk-rtos-j721e-evm-08_04_00_02-addon-linux-x64-installer.run \ + --mode unattended \ + --prefix ${EVM_BSP_PATH} -Then, start script build-with-docker.sh --build-images-only from project root directory. -This shall build reproducible build environment. This has to be run only once. -Since then, existing build environment could be re-used many times. -When there's build environment available, run build-with-docker.sh without arguments. -It shall build deb packages in ./docker-build directory. +tar xf ${DOWNLOADS}/ti-processor-sdk-rtos-j721e-evm-08_04_00_02-prebuilt.tar.gz -Note: If your linux user doesn't belong to "docker" users' group, -the script build-with-docker.sh won't work without sudo. +# Update Linux development kit sysroot with RTOS components -## Build on local linux installation +sudo tar xf ${EVM_BSP_PATH}/ti-processor-sdk-rtos-j721e-evm-08_04_00_02-prebuilt/tisdk-default-image-j7-evm.tar.xz \ + -C ${EVM_BSP_PATH}/ti-processor-sdk-linux-j7-evm-08_04_00_11/linux-devkit/sysroots/aarch64-linux -This section covers Ubuntu 18.04 and Ubuntu 20.04 Linux distributions. -This library is reported to work in Fedora 33. Other modern Linux -distributions should work with library without any problems. +sudo cp -a ${EVM_BSP_PATH}/ti-processor-sdk-rtos-j721e-evm-08_04_00_02-prebuilt/rootfs/* \ + ${EVM_BSP_PATH}/ti-processor-sdk-linux-j7-evm-08_04_00_11/linux-devkit/sysroots/aarch64-linux + +``` -### Build pre-conditions +#### Building NNG ```bash -sudo apt-get install git build-essential libreadline-dev \ - qt5-default qml-module-qtqml-models2 qml-module-qtquick-controls2 \ - qml-module-qtquick-* qml-module-qt-labs-settings \ - qtdeclarative5-dev qtquickcontrols2-5-dev expect -``` +# Use mainline after https://github.com/nanomsg/nng/pull/1623 is merged +git clone https://github.com/CogentEmbedded/nng.git +cd nng -Also, there's dependency on nng v1.4.0 library. Version prior to that version -are known to have deadlock in nng_close during TCP disconnect. +mkdir build +cd build -User could run docker build and take libnng and libnng-dev debs from docker build directory, -thus skipping need for the new step and allowing one to go straight to fetch tweaktool/build tweaktool -sections. +source ${EVM_BSP_PATH}/ti-processor-sdk-linux-j7-evm-08_04_00_11/linux-devkit/environment-setup-aarch64-linux -### Build NNG on Ubuntu 18.04 +# Use cmake 3.17+, otherwise exported target files are not valid for static library dependencies, see https://gitlab.kitware.com/cmake/cmake/-/issues/20204 +/usr/bin/cmake \ + -DCMAKE_TOOLCHAIN_FILE=${OE_CMAKE_TOOLCHAIN_FILE} \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + .. -This library is available on [github](https://github.com/nanomsg/nng). +make -j -Ubuntu 18.04 version is known to have older version of cmake that is not sufficient to build NNG. -User should install cmake from KitWare. +# Update BSP SDK +sudo make DESTDIR=${OECORE_TARGET_SYSROOT} install -Cmake developers (Kitware) have their own PPA with newer cmake releases. +# Update Concerto targetfs if apps from BSP build use tweak on Linux +sudo make DESTDIR=${EVM_BSP_PATH}/ti-processor-sdk-rtos-j721e-evm-08_02_00_05/targetfs install -```bash -wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add - -sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main' -sudo apt-get update -sudo apt-get install cmake ``` -Check if cmake has been updated: +#### Build Tweak for R5F FREERTOS ```bash -cmake -version +cd tweaktool +rm -rf build/evm-r5f-freertos-release +cmake --preset evm-r5f-freertos-release +cmake --build --preset evm-r5f-freertos-release + ``` -Version greater than 3.13 is expected. + +On successful build `build/evm-r5f-freertos-release/tweaktool-${TWEAK_VERSION}-Concerto-dev.tar.gz` package is generated. + +To integrate it into BSP for R5F app development with tweak support: ```bash -git clone https://github.com/nanomsg/nng.git -cd ./nng -git checkout tags/v1.4.0 -mkdir build -cd ./build -cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr .. -make -j -sudo make install +tar xf build/evm-r5f-freertos-release/tweaktool-*-Concerto-dev.tar.gz -C ${VISION_APPS}/utils ``` ---- -**NOTE** +Open `${VISION_APPS}/platform/j721e/rtos/mcu2_0/concerto_mcu2_0_inc.mak` in editor +and add tweak libraries into R5F image: -Another and probably more preferred option is to refer script -[build-nng-deps.sh](build-nng-deps.sh) from project directory -to build proper Ubuntu-styled deb packages. +```mak +STATIC_LIBS += tweak2app tweak2server tweak2json tweak2metadata tweak2pickle tweak2wire tweak2common +``` -Pre-conditions for that script are: +R5F application that uses tweak shall add include search path into its own concerto.mak -```bash -apt-get -y install git build-essential fakeroot devscripts equivs \ - dh-python debhelper-compat ubuntu-dev-tools libreadline-dev \ - scons protobuf-compiler python3-protobuf libmbedtls-dev +```mak +IDIRS += $(VISION_APPS_PATH)/utils/cogent_tweaktool/include ``` ---- -### Build NNG on Ubuntu 20.04 +Launch `tweak-gw` A72 Linux application on target to initialize RPC gateway and get access to R5F tweak server +via Linux network. -Known issues: +#### Build Tweak for A72 Linux -Ubuntu 20.04 LTS cmake 3.16.+ will not create properly export files for default configuration -(NNG as a static library). +```bash +cd tweaktool +rm -rf build/evm-a72-linux-release +cmake --preset evm-a72-linux-release +cmake --build --preset evm-a72-linux-release -See: +``` -Thus, user have to install cmake from KitWare to build library, selecting focal repository +Update Linux development kit sysroot to build apps externally and targetfs for concerto system ```bash -wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add - -sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main' -sudo apt-get update -sudo apt-get install cmake +tar xf build/evm-a72-linux-release/tweaktool-*-Linux-dev.tar.gz -C ${EVM_BSP_PATH}/ti-processor-sdk-linux-j7-evm-08_04_00_11/linux-devkit/sysroots/aarch64-linux +tar xf build/evm-a72-linux-release/tweaktool-*-Linux-dev.tar.gz -C ${EVM_BSP_PATH}/targetfs ``` -Other steps are the same as in Ubuntu 20.04 section. The script build-nng-deps.sh -works with this Ubuntu version as well. +Unpack tweak tools from `build/evm-a72-linux-release/tweaktool-*-Linux-tools.tar.gz` to target rootfs. -## Fetch tweaktool sources +Applications that are built with concerto.mak and use tweak shall add: -```bash -git clone https://github.com/CogentEmbedded/tweaktool.git --recursive +```mak +IDIRS += $(VISION_APPS_PATH)/utils/cogent_tweaktool/include +STATIC_LIBS += tweak2app tweak2server tweak2json tweak2metadata tweak2pickle tweak2wire tweak2common nng ``` -## Build tweaktool -```bash -cd tweaktool -mkdir ./build -cd ./build -cmake -DBUILD_GUI=ON -DBUILD_TESTS=ON .. -make -j -cpack -G DEB -``` +To build with BSP at non-default location (`/opt/$DEVICE_NAME`) provide `BSP_ROOT` via env. -User could provide additional flags to CMake: +```bash +function build_combo() +{ + TARGET=$1 + CPU=$2 + OS=$3 + BUILD_TYPE=$4 + COMBO="${TARGET}-${CPU}-${OS}-${BUILD_TYPE}" + + rm -rf build/${COMBO}-env + cmake --preset ${COMBO}-env + cmake --build --preset ${COMBO}-env +} + +# Adjust to proper location for VB4 +export BSP_ROOT=/opt/vb4 +build_combo vb4 r5f sysbios release +build_combo vb4 a72 linux release + +# Adjust to proper location for EVM +export BSP_ROOT=/opt/evm +build_combo evm r5f freertos release +build_combo evm a72 linux release - - BUILD_TESTS Adds "make test" target. Default: OFF. - - BUILD_GUI Builds gui client. Requires Qt5. Default: OFF. - - WITH_DOXYGEN Run doxygen on source code. Default: OFF. - - WITH_WIRE_NNG Adds NNG support to connection factory. Default: ON. - - WITH_WIRE_RPMSG Adds RPMSG support to connection factory. Default: OFF. +``` -# Building on Visual Studio +## Building on Visual Studio -## Preconditions +### Preconditions - Microsoft Visual Studio Community 2019 or later - Integrated vcpkg @@ -299,7 +347,7 @@ https://github.com/microsoft/vcpkg/issues/16983 Here, we assume that Qt was installed to C:\Qt\5.15.2 and its bin directory is C:\Qt\5.15.2\msvc2019_64 -## Compilation +### Compilation In MSVC++ IDE, open tweak2 directory with `File/Open folder...` menu, adjust options in `Project/CMake` settings, set Qt directories in `Project/CMake` settings for tweak2 @@ -307,14 +355,14 @@ to ones placed in `C:/Qt/5.15.2/msvc2019_64/lib/cmake/`. There are Qt libraries used: - - Qt5_DIR: C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5 - - Qt5Core_DIR: C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Core - - Qt5Gui_DIR: C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Gui - - Qt5Network_DIR C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Network - - Qt5Qml_DIR C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Qml - - Qt5QmlModels_DIR C:/Qt/5.15.2/msvc2019_64/lib/cmakeQt5QmlModels - - Qt5Quick_DIR C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Quick - - Qt5QuickControls2_DIR C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5QuickControls2 +- Qt5_DIR: C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5 +- Qt5Core_DIR: C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Core +- Qt5Gui_DIR: C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Gui +- Qt5Network_DIR C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Network +- Qt5Qml_DIR C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Qml +- Qt5QmlModels_DIR C:/Qt/5.15.2/msvc2019_64/lib/cmakeQt5QmlModels +- Qt5Quick_DIR C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5Quick +- Qt5QuickControls2_DIR C:/Qt/5.15.2/msvc2019_64/lib/cmake/Qt5QuickControls2 Adjust project settings, then build and install via `Build` menu in Visual Studio. @@ -324,7 +372,7 @@ Copy Qt files using following command from project root folder from project root After this, package is ready in `.\out\install\x64-Release` directory. -## Components +### Components - `tweak2::server` is a thin wrapper around `tweak2::app`. It provides simple C99 context-less API to create a collection of items, alter item's values and monitor changes initiated by client application. diff --git a/cmake/FindRPMSG.cmake b/cmake/FindRPMSG.cmake new file mode 100644 index 0000000..11c505a --- /dev/null +++ b/cmake/FindRPMSG.cmake @@ -0,0 +1,30 @@ +# +# Finds the TI TDA4 RPMSG framework includes and libraries +# +# RPMSG_FOUND - True if RPMSG framework was found +# RPMSG::RPMSG - RPMSG imported target +# + +find_path(RPMSG_INCLUDE_DIR NAMES ti_rpmsg_char.h) + +find_library(RPMSG_LIBRARY ti_rpmsg_char) + +set(RPMSG_INCLUDE_DIRS + ${RPMSG_INCLUDE_DIR} +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args("RPMSG" DEFAULT_MSG RPMSG_INCLUDE_DIRS RPMSG_LIBRARY) + +if(RPMSG_FOUND) + if (NOT TARGET RPMSG::RPMSG) + add_library(RPMSG::RPMSG UNKNOWN IMPORTED) + + set_target_properties(RPMSG::RPMSG PROPERTIES + IMPORTED_LOCATION "${RPMSG_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${RPMSG_INCLUDE_DIRS}" + ) + endif() +endif() + +mark_as_advanced(RPMSG_INCLUDE_DIRS RPMSG_LIBRARY) diff --git a/cmake/FindTIOVX.cmake b/cmake/FindTIOVX.cmake new file mode 100644 index 0000000..36043e2 --- /dev/null +++ b/cmake/FindTIOVX.cmake @@ -0,0 +1,229 @@ +# +# Finds the TIOVX framework includes and libraries +# +# TIOVX_FOUND - True if TIOVX framework was found +# TIOVX::TIOVX - TIOVX imported target +# + +# For PC simulator and QNX builds use absolute paths +if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_NAME STREQUAL QNX) + if (NOT TI_BUILD_PROFILE) + set(TI_BUILD_PROFILE "release") + endif() + + find_path(TIDL_INCLUDE_DIR + NAMES itidl_ti.h + PATHS ${PSDKR_TIDL_PATH}/ti_dl/inc + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH + ) + + find_path(TIOVX_COMMON_INCLUDE_DIR + NAMES include/TI/tivx.h + PATHS ${BSP_TOPDIR}/tiovx + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH + ) + + find_path(VISION_APPS_INCLUDE_DIR + NAMES utils/console_io/include/app_log.h + PATHS ${BSP_TOPDIR}/vision_apps + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH + ) + + find_path(VISION_APPS_INIT_INCLUDE_DIR + NAMES app_init.h + PATHS + ${BSP_TOPDIR}/vision_apps/apps/basic_demos/app_tirtos/tirtos_qnx/mpu1 # PSDK 7.x + ${BSP_TOPDIR}/vision_apps/utils/app_init/include # PSDK 8 + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH + ) + + find_path(VISION_APPS_RTOS_INCLUDE_DIR + NAMES common/app.h + PATHS + ${BSP_TOPDIR}/vision_apps/apps/basic_demos/app_tirtos # PSDK 7.x + ${BSP_TOPDIR}/vision_apps/platform/j721e/rtos # PSDK 8 + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH + ) + + find_path(IMAGING_INCLUDE_DIR + NAMES sensor_drv/include/iss_sensors.h + PATHS ${BSP_TOPDIR}/imaging + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH + ) + + find_path(CE_IMAGING_INCLUDE_DIR + NAMES sensor_drv/include/ice_sensors.h + PATHS ${BSP_TOPDIR}/ce-imaging + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH + ) + + find_path(IVISION_INCLUDE_DIR + NAMES ivision.h + PATHS ${BSP_TOPDIR}/ivision + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH + ) + + find_path(PDK_INCLUDE_DIR + NAMES packages/ti/csl/csl.h + PATHS ${PSDKR_PDK_JACINTO_PATH} + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH + ) + + if (CMAKE_SYSTEM_NAME STREQUAL QNX) + find_library(TIOVX_LIBRARY + tivision_apps + PATHS "${BSP_TOPDIR}/vision_apps/out/J7/A72/QNX/${TI_BUILD_PROFILE}" + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH) + else() + find_library(TIOVX_LIBRARY + tivision_apps + PATHS "${BSP_TOPDIR}/vision_apps/out/PC/x86_64/LINUX/${TI_BUILD_PROFILE}" + NO_DEFAULT_PATH + NO_CMAKE_FIND_ROOT_PATH) + endif() +else() + # For target build lookup only in devkit sysroot + find_path(TIDL_INCLUDE_DIR + NAMES itidl_ti.h + PATH_SUFFIXES processor_sdk/tidl_j7_01_03_00_11/ti_dl/inc # PSDK 7.01 + processor_sdk/tidl_j7_02_00_00_07/ti_dl/inc # PSDK 7.03 + processor_sdk/tidl_j7_08_00_00_10/ti_dl/inc # PSDK 8.00 + processor_sdk/tidl_j7/ti_dl/inc # Symlink since PSDK 8.01 + ) + + find_path(TIOVX_COMMON_INCLUDE_DIR + NAMES include/TI/tivx.h + PATH_SUFFIXES processor_sdk/tiovx) + + find_path(VISION_APPS_INCLUDE_DIR + NAMES utils/console_io/include/app_log.h + PATH_SUFFIXES processor_sdk/vision_apps) + + find_path(VISION_APPS_INIT_INCLUDE_DIR + NAMES app_init.h + PATH_SUFFIXES + processor_sdk/vision_apps/apps/basic_demos/app_tirtos/tirtos_linux/mpu1 # PSDK 7.x + processor_sdk/vision_apps/utils/app_init/include # PSDK 8 + ) + + find_path(VISION_APPS_RTOS_INCLUDE_DIR + NAMES common/app.h + PATH_SUFFIXES + processor_sdk/vision_apps/apps/basic_demos/app_tirtos # PSDK 7.x + processor_sdk/vision_apps/platform/j721e/rtos # PSDK 8 + ) + + find_path(IMAGING_INCLUDE_DIR + NAMES sensor_drv/include/iss_sensors.h + PATH_SUFFIXES processor_sdk/imaging) + + find_path(CE_IMAGING_INCLUDE_DIR + NAMES sensor_drv/include/ice_sensors.h + PATH_SUFFIXES processor_sdk/ce-imaging) + + find_path(IVISION_INCLUDE_DIR + NAMES ivision.h + PATH_SUFFIXES processor_sdk/ivision) + + find_library(TIOVX_LIBRARY tivision_apps) +endif() + +set(TIOVX_INCLUDE_DIRS + ${TIDL_INCLUDE_DIR} + ${TIOVX_COMMON_INCLUDE_DIR}/include + ${TIOVX_COMMON_INCLUDE_DIR}/kernels/include + ${TIOVX_COMMON_INCLUDE_DIR}/kernels_j7/include + ${TIOVX_COMMON_INCLUDE_DIR}/utils/include + ${VISION_APPS_INCLUDE_DIR} + ${VISION_APPS_INCLUDE_DIR}/kernels/img_proc/include + ${VISION_APPS_INIT_INCLUDE_DIR} + ${VISION_APPS_RTOS_INCLUDE_DIR} + ${IMAGING_INCLUDE_DIR} + ${IMAGING_INCLUDE_DIR}/kernels/include + ${IVISION_INCLUDE_DIR} +) + +# It is used on selected platforms, append if found +if (CE_IMAGING_INCLUDE_DIR) + list(APPEND TIOVX_INCLUDE_DIRS ${CE_IMAGING_INCLUDE_DIR}) +endif() + +# SDK 8.01 or later +if (EXISTS ${VISION_APPS_INCLUDE_DIR}/utils/app_init/include) + list(APPEND TIOVX_INCLUDE_DIRS ${VISION_APPS_INCLUDE_DIR}/utils/app_init/include) +endif() + +message(STATUS "TIOVX_INCLUDE_DIRS: ${TIOVX_INCLUDE_DIRS}") +message(STATUS "TIOVX_LIBRARY: ${TIOVX_LIBRARY}") + +get_filename_component(TIOVX_LIBRARY_REALPATH ${TIOVX_LIBRARY} REALPATH) +get_filename_component(TIOVX_LIBRARY_EXT ${TIOVX_LIBRARY_REALPATH} EXT) + +if (TIOVX_LIBRARY_EXT MATCHES "^\\.so\\..+$") + string(REGEX REPLACE "^\\.so\\.([0-9]+)\\.[0-9]+\\.[0-9]+$" "\\1" PSDK_MAJOR_VERSION ${TIOVX_LIBRARY_EXT}) + message(STATUS "PSDK MAJOR VERSION: ${PSDK_MAJOR_VERSION}") + if (PSDK_MAJOR_VERSION LESS "8") + add_definitions(-DHAS_TIOVX_J7_INCLUDE) + endif() +else() + message(STATUS "TIOVX library is not a symlink to soversion, realpath: ${TIOVX_LIBRARY_REALPATH}") +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args("TIOVX" DEFAULT_MSG TIOVX_INCLUDE_DIRS TIOVX_LIBRARY) + +if(TIOVX_FOUND) + if (NOT TARGET TIOVX::TIOVX) + add_library(TIOVX::TIOVX UNKNOWN IMPORTED) + + if (CMAKE_CROSSCOMPILING) + if (NOT DEFINED TDA_PLATFORM_DIR) + message(CRITICAL "TDA_PLATFORM_DIR is not set in toolchain file") + endif() + + target_link_options(TIOVX::TIOVX INTERFACE + "-Wl,-rpath,/usr/lib" + "-Wl,-rpath-link,${TDA_PLATFORM_DIR}/usr/lib" + "-Wl,-rpath-link,${TDA_PLATFORM_DIR}/lib" + ) + + if (EXISTS "${TDA_PLATFORM_DIR}/tilib") + target_link_options(TIOVX::TIOVX INTERFACE "-Wl,-rpath-link,${TDA_PLATFORM_DIR}/tilib") + endif() + + find_package(Python QUIET COMPONENTS Interpreter Development) + if (Python_FOUND) + string(REPLACE x86_64-arago-linux aarch64-linux TARGET_SITELIB ${Python_SITELIB}) + find_library(DLR_LIBRARY dlr ${TARGET_SITELIB}/dlr) + if (DLR_LIBRARY) + target_link_options(TIOVX::TIOVX INTERFACE + "-Wl,-rpath=/usr/lib/python3.8/site-packages/dlr" + "-Wl,-rpath-link=${TDA_PLATFORM_DIR}/usr/lib/python3.8/site-packages/dlr" + ) + target_link_libraries(TIOVX::TIOVX INTERFACE ${DLR_LIBRARY}) + endif() + endif() + else() + target_link_options(TIOVX::TIOVX INTERFACE "-Wl,--allow-shlib-undefined") + # Some TI includes have static inline/struct definitions that depend on these defines + target_compile_definitions(TIOVX::TIOVX INTERFACE x86_64 HOST_EMULATION) + endif() + + set_target_properties(TIOVX::TIOVX PROPERTIES + IMPORTED_LOCATION "${TIOVX_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${TIOVX_INCLUDE_DIRS}" + ) + endif() +endif() + +mark_as_advanced(TIOVX_INCLUDE_DIRS TIOVX_LIBRARY) diff --git a/cmake/Platform/Concerto.cmake b/cmake/Platform/Concerto.cmake new file mode 100644 index 0000000..4e5af97 --- /dev/null +++ b/cmake/Platform/Concerto.cmake @@ -0,0 +1,16 @@ +# TI TDA4 BSP / Concerto specific names +set(CMAKE_LINK_LIBRARY_SUFFIX "") +set(CMAKE_STATIC_LIBRARY_PREFIX "") +set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib") +set(CMAKE_SHARED_LIBRARY_PREFIX "") +set(CMAKE_SHARED_LIBRARY_SUFFIX ".lib") +set(CMAKE_EXECUTABLE_SUFFIX ".out") +set(CMAKE_DL_LIBS "") + +set(CMAKE_FIND_LIBRARY_PREFIXES "") +set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib") + +set_property(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS FALSE) + +set(CMAKE_C_LINK_SHARED_LIBRARY ) +set(CMAKE_C_LINK_MODULE_LIBRARY ) diff --git a/cmake/TweakComponentInstall.cmake b/cmake/TweakComponentInstall.cmake index 048fc3a..b5870fb 100644 --- a/cmake/TweakComponentInstall.cmake +++ b/cmake/TweakComponentInstall.cmake @@ -22,14 +22,6 @@ # THE SOFTWARE. # -# CMake older than than 3.10 does not support find_dependency with PATHS -# argument, see https://github.com/ros-industrial/abb_librws/issues/84 -if(${CMAKE_VERSION} VERSION_LESS "3.10.0") - set(FIND_COMPONENT_COMMAND find_package) -else() - set(FIND_COMPONENT_COMMAND find_dependency) -endif() - # Installs a tweak component using standard component rules macro(tweak_component_install TARGET_NAME) @@ -44,10 +36,6 @@ macro(tweak_component_install TARGET_NAME) FILES ${${TARGET_NAME}_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAMESPACE} COMPONENT dev) - target_include_directories( - ${TARGET_NAME} - INTERFACE - $) set(COMPONENT_DEPENDENCIES ${${TARGET_NAME}_DEPENDENCIES}) install( @@ -74,6 +62,15 @@ macro(tweak_component_install TARGET_NAME) DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAMESPACE} COMPONENT dev) + foreach(_dependency ${COMPONENT_DEPENDENCIES}) + set(DEPENDENCY_LOOKUP_MODULE "${PROJECT_SOURCE_DIR}/cmake/Find${_dependency}.cmake") + if (EXISTS ${DEPENDENCY_LOOKUP_MODULE}) + install(FILES ${DEPENDENCY_LOOKUP_MODULE} + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAMESPACE} + COMPONENT dev) + endif() + endforeach() + unset(COMPONENT_DEPENDENCIES) endmacro() diff --git a/cmake/componentConfig.cmake.in b/cmake/componentConfig.cmake.in index 8b6ee6d..20c6dc3 100644 --- a/cmake/componentConfig.cmake.in +++ b/cmake/componentConfig.cmake.in @@ -1,11 +1,13 @@ @PACKAGE_INIT@ +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) + include(CMakeFindDependencyMacro) foreach(_dependency @COMPONENT_DEPENDENCIES@) if (_dependency MATCHES "^tweak2::") # An internal dependency STRING(REPLACE "tweak2::" "tweak2" _dependency ${_dependency}) - @FIND_COMPONENT_COMMAND@(${_dependency} PATHS "${CMAKE_CURRENT_LIST_DIR}" NO_CMAKE_FIND_ROOT_PATH) + find_dependency(${_dependency} PATHS "${CMAKE_CURRENT_LIST_DIR}" NO_CMAKE_FIND_ROOT_PATH) else() # An external dependency find_dependency(${_dependency}) diff --git a/cmake/concerto.mak.in b/cmake/concerto.mak.in new file mode 100644 index 0000000..f5c9c67 --- /dev/null +++ b/cmake/concerto.mak.in @@ -0,0 +1,33 @@ +# Concerto configuration for prebuilt Tweak2 library + +ifeq ($(TARGET_CPU),$(filter $(TARGET_CPU), R5F)) +ifeq ($(TARGET_OS),$(filter $(TARGET_OS),SYSBIOS FREERTOS)) + +define tweak2_add_library_target + +_MODULE := $(1) + +include $(PRELUDE) + +TARGET := $(1) +TARGETTYPE := prebuilt +PREBUILT := lib/@SOC_ID_OUT@/$(TARGET_CPU)/$(TARGET_OS)/$(PROFILE)/$(1).lib + +include $(FINALE) + +endef + +TWEAK2_LIBS := +TWEAK2_LIBS += tweak2app +TWEAK2_LIBS += tweak2common +TWEAK2_LIBS += tweak2compatibility-server +TWEAK2_LIBS += tweak2json +TWEAK2_LIBS += tweak2metadata +TWEAK2_LIBS += tweak2pickle +TWEAK2_LIBS += tweak2server +TWEAK2_LIBS += tweak2wire + +$(foreach library,$(TWEAK2_LIBS),$(eval $(call tweak2_add_library_target,$(library)))) + +endif +endif diff --git a/cmake/external-usage-test/CMakeLists.txt b/cmake/external-usage-test/CMakeLists.txt index 57c8dfc..5713f11 100644 --- a/cmake/external-usage-test/CMakeLists.txt +++ b/cmake/external-usage-test/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.16) project(test-user-app VERSION 1.0 LANGUAGES CXX C) # Locate basic tweak package with needed components only. Dependencies are added automatically. diff --git a/cmake/tda4_bsp7_cgt_arm.toolchain.cmake b/cmake/tda4_bsp7_cgt_arm.toolchain.cmake new file mode 100644 index 0000000..663cfd5 --- /dev/null +++ b/cmake/tda4_bsp7_cgt_arm.toolchain.cmake @@ -0,0 +1,98 @@ +set(CMAKE_SYSTEM_NAME Concerto) +set(CMAKE_SYSTEM_PROCESSOR TI_ARM_R5F) + +set(BSP_TOPDIR "$ENV{PSDKR_PATH}") + +message(STATUS "PSDK: ${BSP_TOPDIR}") + +set(SOC_ID_OUT J7) + +set(CGT_ROOT + "${BSP_TOPDIR}/ti-cgt-arm_20.2.0.LTS" + CACHE PATH "TI CGT Toolchain path") + +set(R5F_OS "SYSBIOS") + +set(CMAKE_AR + "${CGT_ROOT}/bin/armar" + CACHE PATH "TI CGT ar Program") +set(CMAKE_NM + "${CGT_ROOT}/bin/armnm" + CACHE PATH "TI CGT nm Program") +set(CMAKE_OBJCOPY + "${CGT_ROOT}/bin/armobjcopy" + CACHE PATH "TI CGT objcopy Program") +set(CMAKE_OBJDUMP + "${CGT_ROOT}/bin/armobjdump" + CACHE PATH "TI CGT objdump Program") +set(CMAKE_LINKER + "${CGT_ROOT}/bin/armlink" + CACHE PATH "TI CGT Linker Program") +set(CMAKE_STRIP + "${CGT_ROOT}/bin/armstrip" + CACHE PATH "TI CGT Strip Program") + +set(CMAKE_C_COMPILER "${CGT_ROOT}/bin/armcl") +set(CMAKE_CXX_COMPILER "${CMAKE_C_COMPILER}") + +# Embedded firmware does not have any rootfs as such, so emulate it as well as possible +set(CMAKE_FIND_ROOT_PATH "${CGT_ROOT}") +set(CMAKE_PREFIX_PATH "${BSP_TOPDIR}/.sysbios-cmake-rootfs/") + +# search headers and libraries in the target environment, search programs in the +# host environment +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +# SYSBIOS minimal include configuration to be able to compile a test program +set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES + ${BSP_TOPDIR}/bios_6_83_00_18/packages + ${BSP_TOPDIR}/ti-cgt-arm_20.2.0.LTS/include + ${BSP_TOPDIR}/xdctools_3_61_03_29_core/packages + ${BSP_TOPDIR}/pdk_jacinto_07_01_00_45/packages + ${BSP_TOPDIR}/tiovx/include + ${BSP_TOPDIR}/tiovx/kernels/include + ${BSP_TOPDIR}/vision_apps + ${BSP_TOPDIR}/vision_apps/apps/basic_demos/app_tirtos) + +set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_C_STANDARD_INCLUDE_DIRECTORIES}) + +set(CMAKE_C_FLAGS + "-DSOC_J721E \ + -DSYSBIOS \ + -DJ7 \ + -DR5F=R5F \ + -DTARGET_NUM_CORES=1 \ + -DTARGET_ARCH=32 \ + -DARCH_32 \ + -DARM \ + -DTARGET_BUILD=1 \ + -Dxdc_target_name__=ti/targets/arm/elf/R5F \ + -Dxdc_target_types__=ti/targets/arm/elf/std.h \ + --endian=little \ + --abi=eabi \ + -mv=7R5 \ + --float_support=vfpv3d16 \ + --emit_warnings_as_errors \ + --c99") + +set(CMAKE_CXX_FLAGS ${CMAKE_C_FLAGS}) + +set(CMAKE_C_FLAGS_RELEASE_INIT "--symdebug:none -DNDEBUG -O3 --gen_opt_info=2") +set(CMAKE_CXX_FLAGS_RELEASE_INIT ${CMAKE_C_FLAGS_RELEASE_INIT}) + +set(CMAKE_LINKER_FLAGS "-z --reread_libs --rom_model --search_path=${CGT_ROOT}/lib") +set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_LINKER_FLAGS}) + +set(CMAKE_C_STANDARD_LIBRARIES "--library=rtsv7R4_T_le_v3D16_eabi.lib") +set(CMAKE_CXX_STANDARD_LIBRARIES ${CMAKE_C_STANDARD_LIBRARIES}) + +set(CMAKE_LINK_LIBRARY_FLAG --library=) +set(CMAKE_LIBRARY_PATH_FLAG --search-path=) + +set(CMAKE_INSTALL_INCLUDEDIR include) +set(CMAKE_INSTALL_BINDIR bin) +string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE) +set(CMAKE_INSTALL_LIBDIR lib/${SOC_ID_OUT}/R5F/${R5F_OS}/${BUILD_TYPE}) diff --git a/cmake/tda4_bsp_8.02_cgt_armllvm.toolchain.cmake b/cmake/tda4_bsp_8.02_cgt_armllvm.toolchain.cmake new file mode 100644 index 0000000..1e3c816 --- /dev/null +++ b/cmake/tda4_bsp_8.02_cgt_armllvm.toolchain.cmake @@ -0,0 +1,8 @@ +set(SOC_ID SOC_J721E) +set(SOC_ID_OUT J7) + +include(${CMAKE_CURRENT_LIST_DIR}/tda4_bsp_8_cgt_armllvm.cmake) + +list(APPEND CMAKE_C_STANDARD_INCLUDE_DIRECTORIES + ${BSP_TOPDIR}/pdk_jacinto_08_02_00_21/packages +) diff --git a/cmake/tda4_bsp_8.04_cgt_armllvm.toolchain.cmake b/cmake/tda4_bsp_8.04_cgt_armllvm.toolchain.cmake new file mode 100644 index 0000000..a532009 --- /dev/null +++ b/cmake/tda4_bsp_8.04_cgt_armllvm.toolchain.cmake @@ -0,0 +1,8 @@ +set(SOC_ID SOC_J721E) +set(SOC_ID_OUT J7) + +include(${CMAKE_CURRENT_LIST_DIR}/tda4_bsp_8_cgt_armllvm.cmake) + +list(APPEND CMAKE_C_STANDARD_INCLUDE_DIRECTORIES + ${BSP_TOPDIR}/pdk_jacinto_08_04_00_21/packages +) diff --git a/cmake/tda4_bsp_8.1_cgt_armllvm.toolchain.cmake b/cmake/tda4_bsp_8.1_cgt_armllvm.toolchain.cmake new file mode 100644 index 0000000..8e5a7a2 --- /dev/null +++ b/cmake/tda4_bsp_8.1_cgt_armllvm.toolchain.cmake @@ -0,0 +1,8 @@ +set(SOC_ID SOC_J721E) +set(SOC_ID_OUT J7) + +include(${CMAKE_CURRENT_LIST_DIR}/tda4_bsp_8_cgt_armllvm.cmake) + +list(APPEND CMAKE_C_STANDARD_INCLUDE_DIRECTORIES + ${BSP_TOPDIR}/pdk_jacinto_08_01_00_36/packages +) diff --git a/cmake/tda4_bsp_8_cgt_armllvm.cmake b/cmake/tda4_bsp_8_cgt_armllvm.cmake new file mode 100644 index 0000000..3cd9b13 --- /dev/null +++ b/cmake/tda4_bsp_8_cgt_armllvm.cmake @@ -0,0 +1,39 @@ +set(CMAKE_SYSTEM_NAME Concerto) +set(CMAKE_SYSTEM_PROCESSOR TI_ARM_R5F) + +set(BSP_TOPDIR "$ENV{PSDKR_PATH}") + +set(R5F_OS "FREERTOS") + +set(TIARMCGT_LLVM_ROOT ${BSP_TOPDIR}/ti-cgt-armllvm_1.3.0.LTS) +set(CMAKE_FIND_ROOT_PATH ${TIARMCGT_LLVM_ROOT}) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + +set(CMAKE_C_COMPILER ${TIARMCGT_LLVM_ROOT}/bin/tiarmclang) +set(CMAKE_CXX_COMPILER ${TIARMCGT_LLVM_ROOT}/bin/tiarmclang) +set(CMAKE_AR ${TIARMCGT_LLVM_ROOT}/bin/tiarmar) + +set(CMAKE_C_FLAGS "-D${SOC_ID} -mfloat-abi=hard -mfpu=vfpv3-d16 -mcpu=cortex-r5 -march=armv7-r -fno-strict-aliasing") +set(CMAKE_CXX_FLAGS ${CMAKE_C_FLAGS}) + +set(CMAKE_LINKER_FLAGS "-Wl,--diag_suppress=10063-D -Wl,--diag_suppress=10068-D -Wl,--zero_init=on -Wl,--rom_model") +set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_LINKER_FLAGS}) + +set(CMAKE_C_CREATE_STATIC_LIBRARY "${CMAKE_AR} -rscu ") +set(CMAKE_CXX_CREATE_STATIC_LIBRARY ${CMAKE_C_CREATE_STATIC_LIBRARY}) + +set(CMAKE_C_STANDARD_INCLUDE_DIRECTORIES + ${BSP_TOPDIR}/vision_apps + ${BSP_TOPDIR}/tiovx/include + ${BSP_TOPDIR}/tiovx/kernels/include + ${BSP_TOPDIR}/tiovx/kernels_j7/include + ${BSP_TOPDIR}/vision_apps/platform/j721e/rtos +) + +set(CMAKE_INSTALL_INCLUDEDIR include) +set(CMAKE_INSTALL_BINDIR bin) +string(TOLOWER "${CMAKE_BUILD_TYPE}" BUILD_TYPE) +set(CMAKE_INSTALL_LIBDIR lib/${SOC_ID_OUT}/R5F/${R5F_OS}/${BUILD_TYPE}) diff --git a/cmake/tda4_j721s2_bsp_8.04_cgt_armllvm.toolchain.cmake b/cmake/tda4_j721s2_bsp_8.04_cgt_armllvm.toolchain.cmake new file mode 100644 index 0000000..5071004 --- /dev/null +++ b/cmake/tda4_j721s2_bsp_8.04_cgt_armllvm.toolchain.cmake @@ -0,0 +1,8 @@ +set(SOC_ID SOC_J721S2) +set(SOC_ID_OUT J721S2) + +include(${CMAKE_CURRENT_LIST_DIR}/tda4_bsp_8_cgt_armllvm.cmake) + +list(APPEND CMAKE_C_STANDARD_INCLUDE_DIRECTORIES + ${BSP_TOPDIR}/pdk_j721s2_08_00_04_09/packages +) diff --git a/cmake/tda4_linux.toolchain.cmake b/cmake/tda4_linux.toolchain.cmake new file mode 100644 index 0000000..eb5ce82 --- /dev/null +++ b/cmake/tda4_linux.toolchain.cmake @@ -0,0 +1,17 @@ +# CMake toolchain file for TDA4/J721E Linux +# +# Copyright (c) 2022, Cogent Embedded, Inc. All rights reserved. + +if(NOT DEFINED ENV{OE_CMAKE_TOOLCHAIN_FILE}) + message(FATAL_ERROR "Yocto SDK is not configured, failed to find SDK toolchain file") +endif() + +include($ENV{OE_CMAKE_TOOLCHAIN_FILE}) + +set(BSP_TOPDIR "$ENV{PSDKR_PATH}") +set(TDA_PLATFORM_DIR "${BSP_TOPDIR}/targetfs") + +set(CMAKE_FIND_ROOT_PATH $ENV{OECORE_TARGET_SYSROOT} ${TDA_PLATFORM_DIR}/usr) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DSOC_J721E" CACHE INTERNAL "" FORCE) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DSOC_J721E" CACHE INTERNAL "" FORCE) diff --git a/concerto.mak b/concerto.mak deleted file mode 100644 index 3261d84..0000000 --- a/concerto.mak +++ /dev/null @@ -1,162 +0,0 @@ -ifeq ($(TARGET_CPU),$(filter $(TARGET_CPU), R5F A72)) - -include $(PRELUDE) - -TARGET := cogent_tweaktool -TARGETTYPE := library - -DEFS := -CSOURCES := -IDIRS := - -DEFS += SOC_J721E - -ifeq ($(TARGET_CPU),A72) -DEFS += CPU_mpu1 -endif -ifeq ($(TARGET_CPU),R5F) -DEFS += CPU_mcu2_0 -endif - -################ Basic directories ################# -TWEAK_PATH := $(VISION_APPS_PATH)/utils/cogent_tweaktool - - -################ Auto-detect PSDK version ################# -PSDK_MAJOR_VERSION ?= $(shell echo $(PSDK_VERSION) | head -c 1) -ifeq ($(PSDK_MAJOR_VERSION),7) - IDIRS += $(VISION_APPS_PATH)/apps/basic_demos/app_tirtos -endif -ifeq ($(PSDK_MAJOR_VERSION),8) - IDIRS += $(VISION_APPS_PATH)/platform/j721e/rtos -endif - -################ Configuration options ################ -ifeq ($(TARGET_OS),LINUX) -DEFS += WIRE_RPMSG_BACKEND_CHRDEV -else -# All other OS (QNX, SYSBIOS, FreeRTOS) use RPMsg API directly -DEFS += WIRE_RPMSG_BACKEND_TI_API -endif - -DEFS += WITH_WIRE_RPMSG -DEFS += TWEAK_LOG_LEVEL=3 - -ifeq ($(TARGET_CPU),A72) -DEFS += WITH_WIRE_NNG -endif - -ifeq ($(TARGET_CPU),R5F) -DEFS += TI_ARM_R5F -endif - -################ Include directories ################# -IDIRS += $(VISION_APPS_PATH) -IDIRS += $(XDCTOOLS_PATH)/packages - -ifeq ($(TARGET_CPU),R5F) -IDIRS += $(BIOS_PATH)/packages -IDIRS += $(BIOS_PATH)/packages/ti/posix/ccs -endif - -ifeq ($(TARGET_CPU),A72) -IDIRS += $(TWEAK_PATH)/nng-prebuilt/tda4/include -endif - -ifeq ($(TARGET_OS),QNX) -IDIRS += $(QNX_TARGET)/usr/include -IDIRS += $(PDK_QNX_PATH)/packages -endif - -ifeq ($(TARGET_OS),LINUX) -IDIRS += $(LINUX_FS_PATH)/usr/include -endif - -IDIRS += $(TWEAK_PATH)/extern/uthash/include -IDIRS += $(TWEAK_PATH)/tweak-app/include -IDIRS += $(TWEAK_PATH)/tweak-common/include -IDIRS += $(TWEAK_PATH)/tweak-json/include -IDIRS += $(TWEAK_PATH)/tweak-metadata/include -IDIRS += $(TWEAK_PATH)/tweak-pickle/include -IDIRS += $(TWEAK_PATH)/tweak-pickle/src/autogen -IDIRS += $(TWEAK_PATH)/tweak-wire/include -IDIRS += $(TWEAK_PATH)/tweak2lib/include - -################ Source files ######################## -CSOURCES += tweak-app/src/tweakappclient.c -CSOURCES += tweak-app/src/tweakappcommon.c -CSOURCES += tweak-app/src/tweakappfeatures.c -CSOURCES += tweak-app/src/tweakappqueue.c -CSOURCES += tweak-app/src/tweakappserver.c -CSOURCES += tweak-app/src/tweakmodel.c -CSOURCES += tweak-app/src/tweakmodel_uri_to_tweak_id_index.c -CSOURCES += tweak-common/src/tweakbuffer.c -CSOURCES += tweak-common/src/tweaklog_format_time_tda4.c -CSOURCES += tweak-common/src/tweaklog_out_tda4.c -CSOURCES += tweak-common/src/tweaklog_unix.c -CSOURCES += tweak-common/src/tweakstring.c -CSOURCES += tweak-common/src/tweakvariant.c -CSOURCES += tweak-metadata/src/tweakmetadata.c -CSOURCES += tweak-json/src/tweakjson.c -CSOURCES += tweak-pickle/src/autogen/pb_common.c -CSOURCES += tweak-pickle/src/autogen/pb_decode.c -CSOURCES += tweak-pickle/src/autogen/pb_encode.c -CSOURCES += tweak-pickle/src/autogen/tweak.pb.c -CSOURCES += tweak-pickle/src/tweakpickle_client_pb.c -CSOURCES += tweak-pickle/src/tweakpickle_pb_util.c -CSOURCES += tweak-pickle/src/tweakpickle_server_pb.c -CSOURCES += tweak-wire/src/tweakwire.c -CSOURCES += tweak-wire/src/tweakwire_rpmsg.c -CSOURCES += tweak2lib/src/tweak2.c - -ifeq ($(TARGET_OS),LINUX) -CSOURCES += tweak-wire/src/tweakwire_rpmsg_transport_linux.c -else -# All other OS (QNX, SYSBIOS, FreeRTOS) use RPMsg API directly -CSOURCES += tweak-wire/src/tweakwire_rpmsg_transport_ti_api.c -endif - -ifeq ($(TARGET_CPU),R5F) -CSOURCES += tweak-common/src/tweaklog_out_tda4.c -CSOURCES += tweak-common/src/tweaklog_thread_id_sysbios.c -CSOURCES += tweak-common/src/tweak_id_gen_sysbios.c -endif - -ifeq ($(TARGET_CPU),A72) -CSOURCES += tweak-common/src/tweak_id_gen_sync_fetch_and_add.c -CSOURCES += tweak-common/src/tweaklog_out_stderr.c -CSOURCES += tweak-wire/src/tweakwire_nng.c - -ifeq ($(TARGET_OS),LINUX) -CSOURCES += tweak-common/src/tweaklog_thread_id_common.c -CSOURCES += tweak-common/src/tweaklog_thread_id_linux_syscall.c -else -CSOURCES += tweak-common/src/tweaklog_thread_id_fallback.c -endif - -endif - -################ Libraries ########################### -STATIC_LIBS += app_utils_console_io - -ifeq ($(TARGET_CPU),A72) -STATIC_LIBS += nng -endif - -################ Compiler options #################### -ifeq ($(HOST_COMPILER),TIARMCGT) -CFLAGS += --display_error_number -CFLAGS += --c99 -endif - -ifeq ($(HOST_COMPILER),TIARMCGT_LLVM) -CFLAGS += -std=c99 -endif - -ifeq ($(TARGET_CPU),A72) -include $(VISION_APPS_PATH)/apps/concerto_a72_inc.mak -endif - -include $(FINALE) - -endif diff --git a/devops/Jenkinsfile b/devops/Jenkinsfile index 139829d..a031a13 100644 --- a/devops/Jenkinsfile +++ b/devops/Jenkinsfile @@ -7,6 +7,9 @@ node() { } def builders = [:] + builders['ubuntu22.04'] = { + load 'devops/ubuntu22.04/Jenkinsfile' + } builders['ubuntu20.04'] = { load 'devops/ubuntu20.04/Jenkinsfile' } diff --git a/devops/ubuntu18.04/Dockerfile b/devops/ubuntu18.04/Dockerfile index 74abfe2..d13bf21 100644 --- a/devops/ubuntu18.04/Dockerfile +++ b/devops/ubuntu18.04/Dockerfile @@ -1,5 +1,5 @@ # -# Copyright (c) 2018-2022, Cogent Embedded +# Copyright (c) 2018-2022, Cogent Embedded, Inc # # THIS FILE IS SUBJECT TO THE LICENSE TERMS PROVIDED IN THE 'LICENSE' FILE FOUND # IN THE TOP-LEVEL DIRECTORY OF THIS SOFTWARE PACKAGE OR BY REQUEST VIA diff --git a/devops/ubuntu18.04/Jenkinsfile b/devops/ubuntu18.04/Jenkinsfile index d37abf3..200e27c 100644 --- a/devops/ubuntu18.04/Jenkinsfile +++ b/devops/ubuntu18.04/Jenkinsfile @@ -7,7 +7,7 @@ node('docker') { } def image stage('docker image') { - image = docker.build('tweaktool', './devops/ubuntu20.04/') + image = docker.build('tweaktool', './devops/ubuntu18.04/') } image.inside() { dir('build-ubuntu18.04') { @@ -16,7 +16,7 @@ node('docker') { cmakeBuild ( buildType: 'Release', sourceDir: '../', - cmakeArgs: '-DBUILD_GUI=ON -DBUILD_SHARED_LIBS=ON -DPACKAGE_RPM=OFF -DBUILD_TESTS=ON -DWITH_PYTHON=OFF -DCMAKE_INSTALL_PREFIX=/usr', + cmakeArgs: '-DBUILD_GUI=ON -DBUILD_SHARED_LIBS=ON -DPACKAGE_RPM=OFF -DBUILD_TESTS=ON -DWITH_PYTHON=ON -DCMAKE_INSTALL_PREFIX=/usr', cleanBuild: true, installation: 'InSearchPath', steps: [[withCmake: true, args: '--parallel']] diff --git a/devops/ubuntu18.04/build-nng-debs.sh b/devops/ubuntu18.04/build-nng-debs.sh index 98629a2..26c470d 100755 --- a/devops/ubuntu18.04/build-nng-debs.sh +++ b/devops/ubuntu18.04/build-nng-debs.sh @@ -6,7 +6,7 @@ BUILD_DIR=$(mktemp -d -t ci-$(date +%Y-%m-%d-%H-%M-%S)-XXXXXXXXXX) NNG_VER=1.5.2 mkdir -p "$BUILD_DIR" cd "$BUILD_DIR" -pull-lp-source nng $NNG_VER-1build1 +pull-lp-source nng $NNG_VER-2 sed -ie 's/Build-Depends: debhelper-compat (= .*)/Build-Depends: debhelper-compat (= 11)/g' ./nng-$NNG_VER/debian/control cd ./nng-$NNG_VER dch -n "Backported to debhelper-compat 11" diff --git a/devops/ubuntu18.04/fetch-nng b/devops/ubuntu18.04/fetch-nng new file mode 100644 index 0000000..969ca48 --- /dev/null +++ b/devops/ubuntu18.04/fetch-nng @@ -0,0 +1,22 @@ +# +# Copyright (c) 2022, Cogent Embedded, Inc +# +# THIS FILE IS SUBJECT TO THE LICENSE TERMS PROVIDED IN THE 'LICENSE' FILE FOUND +# IN THE TOP-LEVEL DIRECTORY OF THIS SOFTWARE PACKAGE OR BY REQUEST VIA +# http://cogentembedded.com, source@cogentembedded.com +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +FROM tweak-builder:18.04 AS build-stage + +FROM scratch AS export-stage + +COPY --from=build-stage /*.deb / + +CMD ["/bin/bash"] diff --git a/devops/ubuntu18.04/user-builder b/devops/ubuntu18.04/user-builder new file mode 100644 index 0000000..cd843e0 --- /dev/null +++ b/devops/ubuntu18.04/user-builder @@ -0,0 +1,28 @@ +# +# Copyright (c) 2022, Cogent Embedded, Inc +# +# THIS FILE IS SUBJECT TO THE LICENSE TERMS PROVIDED IN THE 'LICENSE' FILE FOUND +# IN THE TOP-LEVEL DIRECTORY OF THIS SOFTWARE PACKAGE OR BY REQUEST VIA +# http://cogentembedded.com, source@cogentembedded.com +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +FROM tweak-builder:18.04 + +ARG USER=builder +ARG UID=1000 +ARG GID=1000 + +RUN groupadd -g $GID -o $USER +RUN useradd -m -u $UID -g $GID -o -s /bin/bash $USER + +USER $USER +ENV LANG=en_US.UTF-8 + +CMD ["/bin/bash"] diff --git a/devops/ubuntu20.04/Dockerfile b/devops/ubuntu20.04/Dockerfile index cb62012..d1ffee5 100644 --- a/devops/ubuntu20.04/Dockerfile +++ b/devops/ubuntu20.04/Dockerfile @@ -1,5 +1,5 @@ # -# Copyright (c) 2018-2022, Cogent Embedded +# Copyright (c) 2018-2022, Cogent Embedded, Inc # # THIS FILE IS SUBJECT TO THE LICENSE TERMS PROVIDED IN THE 'LICENSE' FILE FOUND # IN THE TOP-LEVEL DIRECTORY OF THIS SOFTWARE PACKAGE OR BY REQUEST VIA diff --git a/devops/ubuntu20.04/Jenkinsfile b/devops/ubuntu20.04/Jenkinsfile index b0801ad..389afdc 100644 --- a/devops/ubuntu20.04/Jenkinsfile +++ b/devops/ubuntu20.04/Jenkinsfile @@ -16,7 +16,7 @@ node('docker') { cmakeBuild ( buildType: 'Release', sourceDir: '../', - cmakeArgs: '-DBUILD_GUI=ON -DBUILD_SHARED_LIBS=ON -DPACKAGE_RPM=OFF -DBUILD_TESTS=ON -DWITH_PYTHON=OFF -DCMAKE_INSTALL_PREFIX=/usr', + cmakeArgs: '-DBUILD_GUI=ON -DBUILD_SHARED_LIBS=ON -DPACKAGE_RPM=OFF -DBUILD_TESTS=ON -DWITH_PYTHON=ON -DCMAKE_INSTALL_PREFIX=/usr', cleanBuild: true, installation: 'InSearchPath', steps: [[withCmake: true, args: '--parallel']] diff --git a/devops/ubuntu20.04/build-nng-debs.sh b/devops/ubuntu20.04/build-nng-debs.sh index 98629a2..26c470d 100755 --- a/devops/ubuntu20.04/build-nng-debs.sh +++ b/devops/ubuntu20.04/build-nng-debs.sh @@ -6,7 +6,7 @@ BUILD_DIR=$(mktemp -d -t ci-$(date +%Y-%m-%d-%H-%M-%S)-XXXXXXXXXX) NNG_VER=1.5.2 mkdir -p "$BUILD_DIR" cd "$BUILD_DIR" -pull-lp-source nng $NNG_VER-1build1 +pull-lp-source nng $NNG_VER-2 sed -ie 's/Build-Depends: debhelper-compat (= .*)/Build-Depends: debhelper-compat (= 11)/g' ./nng-$NNG_VER/debian/control cd ./nng-$NNG_VER dch -n "Backported to debhelper-compat 11" diff --git a/devops/ubuntu20.04/fetch-nng b/devops/ubuntu20.04/fetch-nng new file mode 100644 index 0000000..d8f442f --- /dev/null +++ b/devops/ubuntu20.04/fetch-nng @@ -0,0 +1,22 @@ +# +# Copyright (c) 2022, Cogent Embedded, Inc +# +# THIS FILE IS SUBJECT TO THE LICENSE TERMS PROVIDED IN THE 'LICENSE' FILE FOUND +# IN THE TOP-LEVEL DIRECTORY OF THIS SOFTWARE PACKAGE OR BY REQUEST VIA +# http://cogentembedded.com, source@cogentembedded.com +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +FROM tweak-builder:20.04 AS build-stage + +FROM scratch AS export-stage + +COPY --from=build-stage /*.deb / + +CMD ["/bin/bash"] diff --git a/devops/ubuntu20.04/user-builder b/devops/ubuntu20.04/user-builder new file mode 100644 index 0000000..2e16efe --- /dev/null +++ b/devops/ubuntu20.04/user-builder @@ -0,0 +1,28 @@ +# +# Copyright (c) 2022, Cogent Embedded, Inc. +# +# THIS FILE IS SUBJECT TO THE LICENSE TERMS PROVIDED IN THE 'LICENSE' FILE FOUND +# IN THE TOP-LEVEL DIRECTORY OF THIS SOFTWARE PACKAGE OR BY REQUEST VIA +# http://cogentembedded.com, source@cogentembedded.com +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +FROM tweak-builder:20.04 + +ARG USER=builder +ARG UID=1000 +ARG GID=1000 + +RUN groupadd -g $GID -o $USER +RUN useradd -m -u $UID -g $GID -o -s /bin/bash $USER + +USER $USER +ENV LANG=en_US.UTF-8 + +CMD ["/bin/bash"] diff --git a/devops/ubuntu22.04/Dockerfile b/devops/ubuntu22.04/Dockerfile new file mode 100644 index 0000000..8ef015d --- /dev/null +++ b/devops/ubuntu22.04/Dockerfile @@ -0,0 +1,75 @@ +# +# Copyright (c) 2018-2022, Cogent Embedded, Inc +# +# THIS FILE IS SUBJECT TO THE LICENSE TERMS PROVIDED IN THE 'LICENSE' FILE FOUND +# IN THE TOP-LEVEL DIRECTORY OF THIS SOFTWARE PACKAGE OR BY REQUEST VIA +# http://cogentembedded.com, source@cogentembedded.com +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +FROM ubuntu:22.04 + +ENV DEBIAN_FRONTEND noninteractive + +RUN apt-get update && apt-get install --no-install-recommends -y \ + apt-utils \ + ca-certificates \ + gpg \ + software-properties-common \ + sudo \ + wget \ + unzip + +RUN wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null + +RUN echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ jammy main' | tee /etc/apt/sources.list.d/kitware.list >/dev/null + +RUN apt-get update && apt-get -y install \ + bash \ + build-essential \ + cmake \ + debhelper \ + debhelper-compat \ + devscripts \ + dh-python \ + doxygen \ + equivs \ + expect \ + fakeroot \ + git \ + graphviz \ + libmbedtls-dev \ + libreadline-dev \ + ninja-build \ + protobuf-compiler \ + pybind11-dev \ + python3-dev \ + python3-numpy \ + python3-protobuf \ + qml-module-qt-labs-settings \ + qml-module-qtqml-models2 \ + qml-module-qtquick-* \ + qml-module-qtquick-controls2 \ + qt5-qmake \ + qtbase5-dev \ + qtbase5-dev-tools \ + qtdeclarative5-dev \ + qtquickcontrols2-5-dev \ + scons \ + ubuntu-dev-tools + +# Build and install nng +ADD build-nng-debs.sh ./ +RUN chmod +x ./build-nng-debs.sh && \ + ./build-nng-debs.sh + +# Clean apt cache +RUN apt-get clean && apt-get autoclean + +CMD ["/bin/bash"] diff --git a/devops/ubuntu22.04/Jenkinsfile b/devops/ubuntu22.04/Jenkinsfile new file mode 100644 index 0000000..ed780df --- /dev/null +++ b/devops/ubuntu22.04/Jenkinsfile @@ -0,0 +1,54 @@ +#!/usr/bin/env groovy + +node('docker') { + stage('checkout') { + cleanWs() + checkout scm + } + def image + stage('docker image') { + image = docker.build('tweaktool', './devops/ubuntu22.04/') + } + image.inside() { + dir('build-ubuntu22.04') { + stage('build') { + sh 'ls -l' + cmakeBuild ( + buildType: 'Release', + sourceDir: '../', + cmakeArgs: '-DBUILD_GUI=ON -DBUILD_SHARED_LIBS=ON -DPACKAGE_RPM=OFF -DBUILD_TESTS=ON -DWITH_PYTHON=ON -DCMAKE_INSTALL_PREFIX=/usr', + cleanBuild: true, + installation: 'InSearchPath', + steps: [[withCmake: true, args: '--parallel']] + ) + } + stage('test') { + try { + // Allow tests to fail until they are stable + ctest ( + arguments: '-T test --no-compress-output --output-on-failure', + installation: 'InSearchPath' + ) + } catch(err) { + echo err.getMessage() + } + } + stage('pack') { + cpack( + arguments: '-G DEB', + installation: 'InSearchPath' + ) + } + } + } + stage('archive') { + dir('build-ubuntu22.04') { + sh 'mkdir -p ubuntu-22.04 && mv *.deb ubuntu-22.04' + archiveArtifacts ( + artifacts: 'ubuntu-22.04/*.deb', + fingerprint: true, + onlyIfSuccessful: true + ) + } + } +} diff --git a/devops/ubuntu22.04/build-nng-debs.sh b/devops/ubuntu22.04/build-nng-debs.sh new file mode 100755 index 0000000..26c470d --- /dev/null +++ b/devops/ubuntu22.04/build-nng-debs.sh @@ -0,0 +1,15 @@ +#!/bin/sh +set -e + +TARGET_DIR=$(pwd) +BUILD_DIR=$(mktemp -d -t ci-$(date +%Y-%m-%d-%H-%M-%S)-XXXXXXXXXX) +NNG_VER=1.5.2 +mkdir -p "$BUILD_DIR" +cd "$BUILD_DIR" +pull-lp-source nng $NNG_VER-2 +sed -ie 's/Build-Depends: debhelper-compat (= .*)/Build-Depends: debhelper-compat (= 11)/g' ./nng-$NNG_VER/debian/control +cd ./nng-$NNG_VER +dch -n "Backported to debhelper-compat 11" +debuild -us -uc -b +find "$BUILD_DIR" -name "*.deb" -exec cp {} "$TARGET_DIR" \; +debi diff --git a/devops/ubuntu22.04/fetch-nng b/devops/ubuntu22.04/fetch-nng new file mode 100644 index 0000000..7caef4f --- /dev/null +++ b/devops/ubuntu22.04/fetch-nng @@ -0,0 +1,22 @@ +# +# Copyright (c) 2022, Cogent Embedded, Inc +# +# THIS FILE IS SUBJECT TO THE LICENSE TERMS PROVIDED IN THE 'LICENSE' FILE FOUND +# IN THE TOP-LEVEL DIRECTORY OF THIS SOFTWARE PACKAGE OR BY REQUEST VIA +# http://cogentembedded.com, source@cogentembedded.com +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +FROM tweak-builder:22.04 AS build-stage + +FROM scratch AS export-stage + +COPY --from=build-stage /*.deb / + +CMD ["/bin/bash"] diff --git a/devops/ubuntu22.04/user-builder b/devops/ubuntu22.04/user-builder new file mode 100644 index 0000000..e90b3bc --- /dev/null +++ b/devops/ubuntu22.04/user-builder @@ -0,0 +1,28 @@ +# +# Copyright (c) 2022, Cogent Embedded, Inc +# +# THIS FILE IS SUBJECT TO THE LICENSE TERMS PROVIDED IN THE 'LICENSE' FILE FOUND +# IN THE TOP-LEVEL DIRECTORY OF THIS SOFTWARE PACKAGE OR BY REQUEST VIA +# http://cogentembedded.com, source@cogentembedded.com +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +FROM tweak-builder:22.04 + +ARG USER=builder +ARG UID=1000 +ARG GID=1000 + +RUN groupadd -g $GID -o $USER +RUN useradd -m -u $UID -g $GID -o -s /bin/bash $USER + +USER $USER +ENV LANG=en_US.UTF-8 + +CMD ["/bin/bash"] diff --git a/examples/use-case-tweak-1/CMakeLists.txt b/examples/use-case-tweak-1/CMakeLists.txt index 6e021d2..a031b41 100644 --- a/examples/use-case-tweak-1/CMakeLists.txt +++ b/examples/use-case-tweak-1/CMakeLists.txt @@ -24,7 +24,7 @@ # ------------------------------------------------------------------------------ # Check CMake version # ------------------------------------------------------------------------------ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.16) # ------------------------------------------------------------------------------ # Create project diff --git a/libtweak2.gpj b/libtweak2.gpj index 8cf2a9b..de76a97 100644 --- a/libtweak2.gpj +++ b/libtweak2.gpj @@ -41,7 +41,7 @@ $(__TWEAK_DIR)/tweak-pickle/src/tweakpickle_pb_util.c $(__TWEAK_DIR)/tweak-pickle/src/tweakpickle_server_pb.c $(__TWEAK_DIR)/tweak-common/src/tweakstring.c $(__TWEAK_DIR)/tweak-common/src/tweakvariant.c -$(__TWEAK_DIR)/tweak-common/src/tweaklog_unix.c +$(__TWEAK_DIR)/tweak-common/src/tweaklog.c $(__TWEAK_DIR)/tweak1lib/src/tweakcompat.c $(__TWEAK_DIR)/tweak-app/src/tweakmodel_uri_to_tweak_id_index.c $(__TWEAK_DIR)/tweak-app/src/tweakmodel.c diff --git a/nng-prebuilt/tda4/concerto.mak b/nng-prebuilt/tda4/concerto.mak deleted file mode 100644 index 9fbf30a..0000000 --- a/nng-prebuilt/tda4/concerto.mak +++ /dev/null @@ -1,40 +0,0 @@ -ifeq ($(TARGET_CPU),A72) - -include $(PRELUDE) - -TARGET = nng -TARGETTYPE = prebuilt -PREBUILT = lib/J7/$(TARGET_CPU)/$(TARGET_OS)/libnng.a -PREFIX = lib - -include $(FINALE) - -# Workaround for libnng.a -> nng.a loosing its prefix -# -# Concerto does not handle Linux libraries properly. The following decalaration: -# -# $(_MODULE)_BIN := $($(_MODULE)_TDIR)/$(TARGET)$(suffix $(PREBUILT)) -# -# in finale.mak assumes that the target filename is $(TARGET)$(SUFFIX) which is -# not true for Linux. - -# I cannot use $(_MODULE) here so I replace it with $(TARGET) - -$(TARGET)_BIN := $(TDIR)/$(PREFIX)$(TARGET)$(suffix $(PREBUILT)) -build:: $($(TARGET)_BIN) - -#In Windows, copy does not update the timestamp, so we have to do an extra step below to update the timestamp -define $(TARGET)_PREBUILT -$($(TARGET)_BIN): $(SDIR)/$(1) $(TDIR)/.gitignore - @echo Copying Prebuilt binary $(SDIR)/$(1) to $($(TARGET)_BIN) - -$(Q)$(COPY) $(call PATH_CONV,$(SDIR)/$(1) $($(TARGET)_BIN)) -ifeq ($(HOST_OS),Windows_NT) - -$(Q)cd $(TDIR) && $(COPY) $(call PATH_CONV,$($(TARGET)_BIN))+,, -endif - -$(TARGET)_CLEAN_LNK = -endef - -$(eval $(call $(TARGET)_PREBUILT,$(PREBUILT))) - -endif diff --git a/nng-prebuilt/tda4/include/nng/compat/nanomsg/bus.h b/nng-prebuilt/tda4/include/nng/compat/nanomsg/bus.h deleted file mode 100644 index 004a9ac..0000000 --- a/nng-prebuilt/tda4/include/nng/compat/nanomsg/bus.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_COMPAT_BUS_H -#define NNG_COMPAT_BUS_H - -// This header contains interfaces that are intended to offer compatibility -// with nanomsg v1.0. These are not the "preferred" interfaces for nng, -// and consumers should only use these if they are porting software that -// previously used nanomsg. New programs should use the nng native APIs. - -#ifdef __cplusplus -extern "C" { -#endif - -// BUS sockopt level. -#define NN_PROTO_BUS 7 -#define NN_BUS (NN_PROTO_BUS * 16 + 0) - -// BUS has no options. - -#ifdef __cplusplus -} -#endif - -#endif // NNG_COMPAT_BUS_H diff --git a/nng-prebuilt/tda4/include/nng/compat/nanomsg/inproc.h b/nng-prebuilt/tda4/include/nng/compat/nanomsg/inproc.h deleted file mode 100644 index 9c71a1e..0000000 --- a/nng-prebuilt/tda4/include/nng/compat/nanomsg/inproc.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_COMPAT_INPROC_H -#define NNG_COMPAT_INPROC_H - -// This header contains interfaces that are intended to offer compatibility -// with nanomsg v1.0. These are not the "preferred" interfaces for nng, -// and consumers should only use these if they are porting software that -// previously used nanomsg. New programs should use the nng native APIs. - -#ifdef __cplusplus -extern "C" { -#endif - -// inproc sockopt level. -// There are no inproc tunables. -#define NN_INPROC (-1) - -#ifdef __cplusplus -} -#endif - -#endif // NNG_COMPAT_INPROC_H diff --git a/nng-prebuilt/tda4/include/nng/compat/nanomsg/ipc.h b/nng-prebuilt/tda4/include/nng/compat/nanomsg/ipc.h deleted file mode 100644 index fad520d..0000000 --- a/nng-prebuilt/tda4/include/nng/compat/nanomsg/ipc.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_COMPAT_IPC_H -#define NNG_COMPAT_IPC_H - -// This header contains interfaces that are intended to offer compatibility -// with nanomsg v1.0. These are not the "preferred" interfaces for nng, -// and consumers should only use these if they are porting software that -// previously used nanomsg. New programs should use the nng native APIs. - -#ifdef __cplusplus -extern "C" { -#endif - -// IPC sockopt level. -#define NN_IPC (-2) - -// IPC options. Note that these are not currently supported. -// IPC_SEC_ATTR works quite differently in NNG, and must be -// configured using the new API. The buffer sizing options are -// not supported at all. None of these were ever documented, and -// are offered here only for source compatibility. -#define NN_IPC_SEC_ATTR 1 -#define NN_IPC_OUTBUFSZ 2 -#define NN_IPC_INBUFSZ 3 - -#ifdef __cplusplus -} -#endif - -#endif // NNG_COMPAT_IPC_H diff --git a/nng-prebuilt/tda4/include/nng/compat/nanomsg/nn.h b/nng-prebuilt/tda4/include/nng/compat/nanomsg/nn.h deleted file mode 100644 index 60c33c6..0000000 --- a/nng-prebuilt/tda4/include/nng/compat/nanomsg/nn.h +++ /dev/null @@ -1,284 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_COMPAT_NN_H -#define NNG_COMPAT_NN_H - -// This header contains interfaces that are intended to offer compatibility -// with nanomsg v1.0. These are not the "preferred" interfaces for nng, -// and consumers should only use these if they are porting software that -// previously used nanomsg. New programs should use the nng native APIs. - -// Note that compatibility promises are limited to public portions of the -// nanomsg API, and specifically do NOT extend to the ABI. Furthermore, -// there may be other limitations around less commonly used portions of the -// API; for example only SP headers may be transported in control data for -// messages, there is almost no compatibility offered for statistics. -// Error values may differ from those returned by nanomsg as well; the nng -// error reporting facility expresses only a subset of the possibilities of -// nanomsg. - -// Note that unlike nanomsg, nng does not aggressively recycle socket or -// endpoint IDs, which means applications which made assumptions that these -// would be relatively small integers (e.g. to use them as array indices) -// may break. (No promise about values was ever made.) - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include - -// clang-format gets in the way of most of this file. -// We turn it off, at least until it gets smarter about aligning -// macro definitions or we adopt enums or somesuch. -// clang-format off - -// NNG_DECL is used on declarations to deal with scope. -// For building Windows DLLs, it should be the appropriate __declspec(). -// For shared libraries with platforms that support hidden visibility, -// it should evaluate to __attribute__((visibility("default"))). -#ifndef NN_DECL -#if defined(_WIN32) && !defined(NNG_STATIC_LIB) -#if defined(NNG_SHARED_LIB) -#define NN_DECL __declspec(dllexport) -#else -#define NN_DECL __declspec(dllimport) -#endif // NNG_SHARED_LIB -#else -#if defined(NNG_SHARED_LIB) && defined(NNG_HIDDEN_VISIBILITY) -#define NN_DECL __attribute__((visibility("default"))) -#else -#define NN_DECL extern -#endif -#endif // _WIN32 && !NNG_STATIC_LIB -#endif // NN_DECL - -#define AF_SP 1 -#define AF_SP_RAW 2 - -#define NN_SOCKADDR_MAX 128 -#define NN_SOL_SOCKET 0 - -// Flag for send/recv (nonblocking) -#define NN_DONTWAIT 1 - -// CMSG data type -#define PROTO_SP 1 -#define SP_HDR 1 - -// Errnos. Legacy nanomsg uses posix errnos where possible. -// If a define is not set, use add NN_ERRBASE. nng does not -// return all of these values, so there may be some loss of -// of information for edge cases, but we don't expect that to be -// a problem really. -#define NN_ERRBASE (0x10000000) -#ifndef ENOTSUP -#define ENOTSUP (NN_ERRBASE+1) -#endif -#ifndef EPROTONOSUPPORT -#define EPROTONOSUPPORT (NN_ERRBASE+2) -#endif -#ifndef ENOBUFS -#define ENOBUFS (NN_ERRBASE+3) -#endif -#ifndef ENETDOWN -#define ENETDOWN (NN_ERRBASE+4) -#endif -#ifndef EADDRINUSE -#define EADDRINUSE (NN_ERRBASE+5) -#endif -#ifndef EADDRNOTAVAIL -#define EADDRNOTAVAIL (NN_ERRBASE+6) -#endif -#ifndef ENOTSOCK -#define ENOTSOCK (NN_ERRBASE+7) -#endif -#ifndef EAGAIN -#define EAGAIN (NN_ERRBASE+8) -#endif -#ifndef EBADF -#define EBADF (NN_ERRBASE+9) -#endif -#ifndef EINVAL -#define EINVAL (NN_ERRBASE+10) -#endif -#ifndef EMFILE -#define EMFILE (NN_ERRBASE+11) -#endif -#ifndef EFAULT -#define EFAULT (NN_ERRBASE+12) -#endif -#ifndef EACCES -#define EACCES (NN_ERRBASE+13) -#endif -#ifndef ENETRESET -#define ENETRESET (NN_ERRBASE+14) -#endif -#ifndef ENETUNREACH -#define ENETUNREACH (NN_ERRBASE+15) -#endif -#ifndef EHOSTUNREACH -#define EHOSTUNREACH (NN_ERRBASE+16) -#endif -#ifndef EAFNOSUPPORT -#define EAFNOSUPPORT (NN_ERRBASE+17) -#endif -#ifndef EINPROGRESS -#define EINPROGRESS (NN_ERRBASE+18) -#endif -#ifndef EPROTO -#define EPROTO (NN_ERRBASE+19) -#endif -#ifndef ECONNREFUSED -#define ECONNREFUSED (NN_ERRBASE+20) -#endif -#ifndef ENOTCONN -#define ENOTCONN (NN_ERRBASE+21) -#endif -#ifndef EMSGSIZE -#define EMSGSIZE (NN_ERRBASE+22) -#endif -#ifndef ETIMEDOUT -#define ETIMEDOUT (NN_ERRBASE+23) -#endif -#ifndef ECONNABORTED -#define ECONNABORTED (NN_ERRBASE+24) -#endif -#ifndef ECONNRESET -#define ECONNRESET (NN_ERRBASE+25) -#endif -#ifndef ENOPROTOOPT -#define ENOPROTOOPT (NN_ERRBASE+26) -#endif -#ifndef EISCONN -#define EISCONN (NN_ERRBASE+27) -#endif -#ifndef ESOCKNOSUPPORT -#define ESOCKNOSPPORT (NN_ERRBASE+28) -#endif -#ifndef ETERM -#define ETERM (NN_ERRBASE+29) -#endif -#ifndef EFSM -#define EFSM (NN_ERRBASE+30) -#endif -#ifndef ENOENT -#define ENOENT (NN_ERRBASE+31) -#endif -#ifndef EIO -#define EIO (NN_ERRBASE+32) -#endif -#ifndef EEXIST -#define EEXIST (NN_ERRBASE+33) -#endif -#ifndef ENOSPC -#define ENOSPC (NN_ERRBASE+34) -#endif - - -// Socket options -#define NN_LINGER 1 -#define NN_SNDBUF 2 -#define NN_RCVBUF 3 -#define NN_SNDTIMEO 4 -#define NN_RCVTIMEO 5 -#define NN_RECONNECT_IVL 6 -#define NN_RECONNECT_IVL_MAX 7 -#define NN_SNDPRIO 8 -#define NN_RCVPRIO 9 -#define NN_SNDFD 10 -#define NN_RCVFD 11 -#define NN_DOMAIN 12 -#define NN_PROTOCOL 13 -#define NN_IPV4ONLY 14 -#define NN_SOCKET_NAME 15 -#define NN_RCVMAXSIZE 16 -#define NN_MAXTTL 17 - -// from this point on formatting is fine -// clang-format on - -// Poll stuff -#define NN_POLLIN 1 -#define NN_POLLOUT 2 -struct nn_pollfd { - int fd; - uint16_t events; - uint16_t revents; -}; - -// Magical size for allocation -#define NN_MSG ((size_t) -1) - -struct nn_iovec { - void * iov_base; - size_t iov_len; -}; - -struct nn_msghdr { - struct nn_iovec *msg_iov; - int msg_iovlen; - void * msg_control; - size_t msg_controllen; -}; - -struct nn_cmsghdr { - size_t cmsg_len; - int cmsg_level; - int cmsg_type; -}; - -#define NN_CMSG_ALIGN(len) \ - (((len) + sizeof(size_t) - 1) & (size_t) ~(sizeof(size_t) - 1)) - -// Unlike old nanomsg, we explicitly only support the SP header as attached -// cmsg data. It turns out that old nanomsg didn't really store anything -// useful otherwise anyway. (One specific exception was that it stored the -// message type of text or binary for the websocket transport. We don't think -// anyone used that in practice though.) -#define NN_CMSG_FIRSTHDR(mh) nn_cmsg_next((struct nn_msghdr *) (mh), NULL) -#define NN_CMSG_NXTHDR(mh, ch) \ - nn_cmsg_next((struct nn_msghdr *) (mh), (struct nn_cmsghdr *) ch) -#define NN_CMSG_DATA(ch) ((unsigned char *) (((struct nn_cmsghdr *) (ch)) + 1)) -#define NN_CMSG_SPACE(len) \ - (NN_CMSG_ALIGN(len) + NN_CMSG_ALIGN(sizeof(struct nn_cmsghdr))) -#define NN_CMSG_LEN(len) (NN_CMSG_ALIGN(sizeof(struct nn_cmsghdr)) + (len)) - -NN_DECL struct nn_cmsghdr *nn_cmsg_next( - struct nn_msghdr *, struct nn_cmsghdr *); -NN_DECL int nn_socket(int, int); -NN_DECL int nn_setsockopt(int, int, int, const void *, size_t); -NN_DECL int nn_getsockopt(int, int, int, void *, size_t *); -NN_DECL int nn_bind(int, const char *); -NN_DECL int nn_connect(int, const char *); -NN_DECL int nn_shutdown(int, int); -NN_DECL int nn_send(int, const void *, size_t, int); -NN_DECL int nn_recv(int, void *, size_t, int); -NN_DECL int nn_sendmsg(int, const struct nn_msghdr *, int); -NN_DECL int nn_recvmsg(int, struct nn_msghdr *, int); -NN_DECL int nn_close(int); -NN_DECL int nn_poll(struct nn_pollfd *, int, int); -NN_DECL int nn_device(int, int); -NN_DECL uint64_t nn_get_statistic(int, int); -NN_DECL void * nn_allocmsg(size_t, int); -NN_DECL void * nn_reallocmsg(void *, size_t); -NN_DECL int nn_freemsg(void *); -NN_DECL int nn_errno(void); -NN_DECL const char *nn_strerror(int); -NN_DECL void nn_term(void); - -#ifdef __cplusplus -} -#endif - -#endif // NNG_COMPAT_NN_H diff --git a/nng-prebuilt/tda4/include/nng/compat/nanomsg/pair.h b/nng-prebuilt/tda4/include/nng/compat/nanomsg/pair.h deleted file mode 100644 index 458aac8..0000000 --- a/nng-prebuilt/tda4/include/nng/compat/nanomsg/pair.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_COMPAT_PAIR_H -#define NNG_COMPAT_PAIR_H - -// This header contains interfaces that are intended to offer compatibility -// with nanomsg v1.0. These are not the "preferred" interfaces for nng, -// and consumers should only use these if they are porting software that -// previously used nanomsg. New programs should use the nng native APIs. - -#ifdef __cplusplus -extern "C" { -#endif - -// PAIR sockopt level. -#define NN_PROTO_PAIR 1 -#define NN_PAIR (NN_PROTO_PAIR * 16 + 0) - -// These are technically "new", and not available in nanomsg, but -// offered here as a transition aid. If you want to use the advanced -// PAIRv1 options (POLYAMOROUS mode) you still need to use the new API. -#define NN_PAIR_v0 (NN_PROTO_PAIR * 16 + 0) -#define NN_PAIR_V1 (NN_PROTO_PAIR * 16 + 1) - -// PAIR has no options. - -#ifdef __cplusplus -} -#endif - -#endif // NNG_COMPAT_PAIR_H diff --git a/nng-prebuilt/tda4/include/nng/compat/nanomsg/pipeline.h b/nng-prebuilt/tda4/include/nng/compat/nanomsg/pipeline.h deleted file mode 100644 index 187a4b4..0000000 --- a/nng-prebuilt/tda4/include/nng/compat/nanomsg/pipeline.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_COMPAT_PIPELINE_H -#define NNG_COMPAT_PIPELINE_H - -// This header contains interfaces that are intended to offer compatibility -// with nanomsg v1.0. These are not the "preferred" interfaces for nng, -// and consumers should only use these if they are porting software that -// previously used nanomsg. New programs should use the nng native APIs. - -#ifdef __cplusplus -extern "C" { -#endif - -// PUSH and PULL sockopt level. -#define NN_PROTO_PIPELINE 5 -#define NN_PUSH (NN_PROTO_PIPELINE * 16 + 0) -#define NN_PULL (NN_PROTO_PIPELINE * 16 + 1) - -// PUSH and PULL have no options. - -#ifdef __cplusplus -} -#endif - -#endif // NNG_COMPAT_PIPELINE_H diff --git a/nng-prebuilt/tda4/include/nng/compat/nanomsg/pubsub.h b/nng-prebuilt/tda4/include/nng/compat/nanomsg/pubsub.h deleted file mode 100644 index 43118f6..0000000 --- a/nng-prebuilt/tda4/include/nng/compat/nanomsg/pubsub.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_COMPAT_PUBSUB_H -#define NNG_COMPAT_PUBSUB_H - -// This header contains interfaces that are intended to offer compatibility -// with nanomsg v1.0. These are not the "preferred" interfaces for nng, -// and consumers should only use these if they are porting software that -// previously used nanomsg. New programs should use the nng native APIs. - -#ifdef __cplusplus -extern "C" { -#endif - -// PUB and SUB sockopt level. -#define NN_PROTO_PUBSUB 2 -#define NN_PUB (NN_PROTO_PUBSUB * 16 + 0) -#define NN_SUB (NN_PROTO_PUBSUB * 16 + 1) - -// SUB options. (PUB has none.) -#define NN_SUB_SUBSCRIBE (NN_SUB * 16 + 1) -#define NN_SUB_UNSUBSCRIBE (NN_SUB * 16 + 2) - -#ifdef __cplusplus -} -#endif - -#endif // NNG_COMPAT_PUBSUB_H diff --git a/nng-prebuilt/tda4/include/nng/compat/nanomsg/reqrep.h b/nng-prebuilt/tda4/include/nng/compat/nanomsg/reqrep.h deleted file mode 100644 index 9490a8f..0000000 --- a/nng-prebuilt/tda4/include/nng/compat/nanomsg/reqrep.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_COMPAT_REQREP_H -#define NNG_COMPAT_REQREP_H - -// This header contains interfaces that are intended to offer compatibility -// with nanomsg v1.0. These are not the "preferred" interfaces for nng, -// and consumers should only use these if they are porting software that -// previously used nanomsg. New programs should use the nng native APIs. - -#ifdef __cplusplus -extern "C" { -#endif - -// REQ and REP sockopt level. -#define NN_PROTO_REQREP 3 -#define NN_REQ (NN_PROTO_REQREP * 16 + 0) -#define NN_REP (NN_PROTO_REQREP * 16 + 1) - -// REQ options. (REP has none.) -#define NN_REQ_RESEND_IVL (NN_REQ * 16 + 1) - -#ifdef __cplusplus -} -#endif - -#endif // NNG_COMPAT_REQREP_H diff --git a/nng-prebuilt/tda4/include/nng/compat/nanomsg/survey.h b/nng-prebuilt/tda4/include/nng/compat/nanomsg/survey.h deleted file mode 100644 index fdef10c..0000000 --- a/nng-prebuilt/tda4/include/nng/compat/nanomsg/survey.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_COMPAT_SURVEY_H -#define NNG_COMPAT_SURVEY_H - -// This header contains interfaces that are intended to offer compatibility -// with nanomsg v1.0. These are not the "preferred" interfaces for nng, -// and consumers should only use these if they are porting software that -// previously used nanomsg. New programs should use the nng native APIs. - -#ifdef __cplusplus -extern "C" { -#endif - -// SURVEYOR and RESPONDENT sockopt level. -#define NN_PROTO_SURVEY 6 -#define NN_SURVEYOR (NN_PROTO_SURVEY * 16 + 2) -#define NN_RESPONDENT (NN_PROTO_SURVEY * 16 + 3) - -// SURVEYOR options. (RESPONDENT has none.) - -#define NN_SURVEYOR_DEADLINE (NN_SURVEYOR * 16 + 1) - -#ifdef __cplusplus -} -#endif - -#endif // NNG_COMPAT_SURVEY_H diff --git a/nng-prebuilt/tda4/include/nng/compat/nanomsg/tcp.h b/nng-prebuilt/tda4/include/nng/compat/nanomsg/tcp.h deleted file mode 100644 index 5a305c4..0000000 --- a/nng-prebuilt/tda4/include/nng/compat/nanomsg/tcp.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_COMPAT_TCP_H -#define NNG_COMPAT_TCP_H - -// This header contains interfaces that are intended to offer compatibility -// with nanomsg v1.0. These are not the "preferred" interfaces for nng, -// and consumers should only use these if they are porting software that -// previously used nanomsg. New programs should use the nng native APIs. - -#ifdef __cplusplus -extern "C" { -#endif - -// TCP sockopt level. -#define NN_TCP (-3) - -// TCP options. -#define NN_TCP_NODELAY 1 - -#ifdef __cplusplus -} -#endif - -#endif // NNG_COMPAT_TCP_H diff --git a/nng-prebuilt/tda4/include/nng/compat/nanomsg/ws.h b/nng-prebuilt/tda4/include/nng/compat/nanomsg/ws.h deleted file mode 100644 index 3072a3b..0000000 --- a/nng-prebuilt/tda4/include/nng/compat/nanomsg/ws.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_COMPAT_WS_H -#define NNG_COMPAT_WS_H - -// This header contains interfaces that are intended to offer compatibility -// with nanomsg v1.0. These are not the "preferred" interfaces for nng, -// and consumers should only use these if they are porting software that -// previously used nanomsg. New programs should use the nng native APIs. - -#ifdef __cplusplus -extern "C" { -#endif - -// WS sockopt level. -#define NN_WS (-4) - -// WS options. - -// Note that while legacy libnanomsg had *some* support for text messages, -// NNG only supports binary. Binary types are required to pass protocol -// headers with NNG and nanomsg in any event. This means that the NNG -// WebSocket support will not be compatible with some very old browsers. -#define NN_WS_MSG_TYPE 1 - -#define NN_WS_MSG_TYPE_TEXT 0x1 -#define NN_WS_MSG_TYPE_BINARY 0x2 - -#ifdef __cplusplus -} -#endif - -#endif // NNG_COMPAT_WS_H diff --git a/nng-prebuilt/tda4/include/nng/nng.h b/nng-prebuilt/tda4/include/nng/nng.h deleted file mode 100644 index 933c0de..0000000 --- a/nng-prebuilt/tda4/include/nng/nng.h +++ /dev/null @@ -1,1284 +0,0 @@ -// -// Copyright 2020 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_NNG_H -#define NNG_NNG_H - -// NNG (nanomsg-next-gen) is an improved implementation of the SP protocols. -// The APIs have changed, and there is no attempt to provide API compatibility -// with legacy libnanomsg. This file defines the library consumer-facing -// Public API. Use of definitions or declarations not found in this header -// file is specifically unsupported and strongly discouraged. - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include - -// NNG_DECL is used on declarations to deal with scope. -// For building Windows DLLs, it should be the appropriate __declspec(). -// For shared libraries with platforms that support hidden visibility, -// it should evaluate to __attribute__((visibility("default"))). -#ifndef NNG_DECL -#if defined(_WIN32) && !defined(NNG_STATIC_LIB) -#if defined(NNG_SHARED_LIB) -#define NNG_DECL __declspec(dllexport) -#else -#define NNG_DECL __declspec(dllimport) -#endif // NNG_SHARED_LIB -#else -#if defined(NNG_SHARED_LIB) && defined(NNG_HIDDEN_VISIBILITY) -#define NNG_DECL __attribute__((visibility("default"))) -#else -#define NNG_DECL extern -#endif -#endif // _WIN32 && !NNG_STATIC_LIB -#endif // NNG_DECL - -// NNG Library & API version. -// We use SemVer, and these versions are about the API, and -// may not necessarily match the ABI versions. -#define NNG_MAJOR_VERSION 1 -#define NNG_MINOR_VERSION 4 -#define NNG_PATCH_VERSION 0 -#define NNG_RELEASE_SUFFIX "" // if non-empty, this is a pre-release - -// Maximum length of a socket address. This includes the terminating NUL. -// This limit is built into other implementations, so do not change it. -// Note that some transports are quite happy to let you use addresses -// in excess of this, but if you do you may not be able to communicate -// with other implementations. -#define NNG_MAXADDRLEN (128) - -// NNG_PROTOCOL_NUMBER is used by protocol headers to calculate their -// protocol number from a major and minor number. Applications should -// probably not need to use this. -#define NNG_PROTOCOL_NUMBER(maj, min) (((x) *16) + (y)) - -// Types common to nng. - -// Identifiers are wrapped in a structure to improve compiler validation -// of incorrect passing. This gives us strong type checking. Modern -// compilers compile passing these by value to identical code as passing -// the integer type (at least with optimization applied). Please do not -// access the ID member directly. - -typedef struct nng_ctx_s { - uint32_t id; -} nng_ctx; - -typedef struct nng_dialer_s { - uint32_t id; -} nng_dialer; - -typedef struct nng_listener_s { - uint32_t id; -} nng_listener; - -typedef struct nng_pipe_s { - uint32_t id; -} nng_pipe; - -typedef struct nng_socket_s { - uint32_t id; -} nng_socket; - -typedef int32_t nng_duration; // in milliseconds -typedef struct nng_msg nng_msg; -typedef struct nng_stat nng_stat; -typedef struct nng_aio nng_aio; - -// Initializers. -// clang-format off -#define NNG_PIPE_INITIALIZER { 0 } -#define NNG_SOCKET_INITIALIZER { 0 } -#define NNG_DIALER_INITIALIZER { 0 } -#define NNG_LISTENER_INITIALIZER { 0 } -#define NNG_CTX_INITIALIZER { 0 } -// clang-format on - -// Some address details. This is in some ways like a traditional sockets -// sockaddr, but we have our own to cope with our unique families, etc. -// The details of this structure are directly exposed to applications. -// These structures can be obtained via property lookups, etc. -struct nng_sockaddr_inproc { - uint16_t sa_family; - char sa_name[NNG_MAXADDRLEN]; -}; - -struct nng_sockaddr_path { - uint16_t sa_family; - char sa_path[NNG_MAXADDRLEN]; -}; - -struct nng_sockaddr_in6 { - uint16_t sa_family; - uint16_t sa_port; - uint8_t sa_addr[16]; - uint32_t sa_scope; -}; -struct nng_sockaddr_in { - uint16_t sa_family; - uint16_t sa_port; - uint32_t sa_addr; -}; - -struct nng_sockaddr_zt { - uint16_t sa_family; - uint64_t sa_nwid; - uint64_t sa_nodeid; - uint32_t sa_port; -}; - -struct nng_sockaddr_abstract { - uint16_t sa_family; - uint16_t sa_len; // will be 0 - 107 max. - uint8_t sa_name[107]; // 108 linux/windows, without leading NUL -}; - -// nng_sockaddr_storage is the the size required to store any nng_sockaddr. -// This size must not change, and no individual nng_sockaddr type may grow -// larger than this without breaking binary compatibility. -struct nng_sockaddr_storage { - uint16_t sa_family; - uint16_t sa_pad[64]; -}; - -typedef struct nng_sockaddr_inproc nng_sockaddr_inproc; -typedef struct nng_sockaddr_path nng_sockaddr_path; -typedef struct nng_sockaddr_path nng_sockaddr_ipc; -typedef struct nng_sockaddr_in nng_sockaddr_in; -typedef struct nng_sockaddr_in6 nng_sockaddr_in6; -typedef struct nng_sockaddr_zt nng_sockaddr_zt; -typedef struct nng_sockaddr_abstract nng_sockaddr_abstract; -typedef struct nng_sockaddr_storage nng_sockaddr_storage; - -typedef union nng_sockaddr { - uint16_t s_family; - nng_sockaddr_ipc s_ipc; - nng_sockaddr_inproc s_inproc; - nng_sockaddr_in6 s_in6; - nng_sockaddr_in s_in; - nng_sockaddr_zt s_zt; - nng_sockaddr_abstract s_abstract; - nng_sockaddr_storage s_storage; -} nng_sockaddr; - -enum nng_sockaddr_family { - NNG_AF_UNSPEC = 0, - NNG_AF_INPROC = 1, - NNG_AF_IPC = 2, - NNG_AF_INET = 3, - NNG_AF_INET6 = 4, - NNG_AF_ZT = 5, // ZeroTier - NNG_AF_ABSTRACT = 6 -}; - -// Scatter/gather I/O. -typedef struct nng_iov { - void * iov_buf; - size_t iov_len; -} nng_iov; - -// Some definitions for durations used with timeouts. -#define NNG_DURATION_INFINITE (-1) -#define NNG_DURATION_DEFAULT (-2) -#define NNG_DURATION_ZERO (0) - -// nng_fini is used to terminate the library, freeing certain global resources. -// This should only be called during atexit() or just before dlclose(). -// THIS FUNCTION MUST NOT BE CALLED CONCURRENTLY WITH ANY OTHER FUNCTION -// IN THIS LIBRARY; IT IS NOT REENTRANT OR THREADSAFE. -// -// For most cases, this call is unnecessary, but it is provided to assist -// when debugging with memory checkers (e.g. valgrind). Calling this -// function prevents global library resources from being reported incorrectly -// as memory leaks. In those cases, we recommend doing this with atexit(). -NNG_DECL void nng_fini(void); - -// nng_close closes the socket, terminating all activity and -// closing any underlying connections and releasing any associated -// resources. -NNG_DECL int nng_close(nng_socket); - -// nng_socket_id returns the positive socket id for the socket, or -1 -// if the socket is not valid. -NNG_DECL int nng_socket_id(nng_socket); - -NNG_DECL int nng_socket_set(nng_socket, const char *, const void *, size_t); -NNG_DECL int nng_socket_set_bool(nng_socket, const char *, bool); -NNG_DECL int nng_socket_set_int(nng_socket, const char *, int); -NNG_DECL int nng_socket_set_size(nng_socket, const char *, size_t); -NNG_DECL int nng_socket_set_uint64(nng_socket, const char *, uint64_t); -NNG_DECL int nng_socket_set_string(nng_socket, const char *, const char *); -NNG_DECL int nng_socket_set_ptr(nng_socket, const char *, void *); -NNG_DECL int nng_socket_set_ms(nng_socket, const char *, nng_duration); -NNG_DECL int nng_socket_set_addr( - nng_socket, const char *, const nng_sockaddr *); - -NNG_DECL int nng_socket_get(nng_socket, const char *, void *, size_t *); -NNG_DECL int nng_socket_get_bool(nng_socket, const char *, bool *); -NNG_DECL int nng_socket_get_int(nng_socket, const char *, int *); -NNG_DECL int nng_socket_get_size(nng_socket, const char *, size_t *); -NNG_DECL int nng_socket_get_uint64(nng_socket, const char *, uint64_t *); -NNG_DECL int nng_socket_get_string(nng_socket, const char *, char **); -NNG_DECL int nng_socket_get_ptr(nng_socket, const char *, void **); -NNG_DECL int nng_socket_get_ms(nng_socket, const char *, nng_duration *); -NNG_DECL int nng_socket_get_addr(nng_socket, const char *, nng_sockaddr *); - -// Arguably the pipe callback functions could be handled as an option, -// but with the need to specify an argument, we find it best to unify -// this as a separate function to pass in the argument and the callback. -// Only one callback can be set on a given socket, and there is no way -// to retrieve the old value. -typedef enum { - NNG_PIPE_EV_ADD_PRE, // Called just before pipe added to socket - NNG_PIPE_EV_ADD_POST, // Called just after pipe added to socket - NNG_PIPE_EV_REM_POST, // Called just after pipe removed from socket - NNG_PIPE_EV_NUM, // Used internally, must be last. -} nng_pipe_ev; - -typedef void (*nng_pipe_cb)(nng_pipe, nng_pipe_ev, void *); - -// nng_pipe_notify registers a callback to be executed when the -// given event is triggered. To watch for different events, register -// multiple times. Each event can have at most one callback registered. -NNG_DECL int nng_pipe_notify(nng_socket, nng_pipe_ev, nng_pipe_cb, void *); - -// nng_listen creates a listening endpoint with no special options, -// and starts it listening. It is functionally equivalent to the legacy -// nn_bind(). The underlying endpoint is returned back to the caller in the -// endpoint pointer, if it is not NULL. The flags are ignored at present. -NNG_DECL int nng_listen(nng_socket, const char *, nng_listener *, int); - -// nng_dial creates a dialing endpoint, with no special options, and -// starts it dialing. Dialers have at most one active connection at a time -// This is similar to the legacy nn_connect(). The underlying endpoint -// is returned back to the caller in the endpoint pointer, if it is not NULL. -// The flags may be NNG_FLAG_NONBLOCK to indicate that the first attempt to -// dial will be made in the background, returning control to the caller -// immediately. In this case, if the connection fails, the function will -// keep retrying in the background. (If the connection is dropped in either -// case, it will still be reconnected in the background -- only the initial -// connection attempt is normally synchronous.) -NNG_DECL int nng_dial(nng_socket, const char *, nng_dialer *, int); - -// nng_dialer_create creates a new dialer, that is not yet started. -NNG_DECL int nng_dialer_create(nng_dialer *, nng_socket, const char *); - -// nng_listener_create creates a new listener, that is not yet started. -NNG_DECL int nng_listener_create(nng_listener *, nng_socket, const char *); - -// nng_dialer_start starts the endpoint dialing. This is only possible if -// the dialer is not already dialing. -NNG_DECL int nng_dialer_start(nng_dialer, int); - -// nng_listener_start starts the endpoint listening. This is only possible if -// the listener is not already listening. -NNG_DECL int nng_listener_start(nng_listener, int); - -// nng_dialer_close closes the dialer, shutting down all underlying -// connections and releasing all associated resources. -NNG_DECL int nng_dialer_close(nng_dialer); - -// nng_listener_close closes the listener, shutting down all underlying -// connections and releasing all associated resources. -NNG_DECL int nng_listener_close(nng_listener); - -// nng_dialer_id returns the positive dialer ID, or -1 if the dialer is -// invalid. -NNG_DECL int nng_dialer_id(nng_dialer); - -// nng_listener_id returns the positive listener ID, or -1 if the listener is -// invalid. -NNG_DECL int nng_listener_id(nng_listener); - -NNG_DECL int nng_dialer_set(nng_dialer, const char *, const void *, size_t); -NNG_DECL int nng_dialer_set_bool(nng_dialer, const char *, bool); -NNG_DECL int nng_dialer_set_int(nng_dialer, const char *, int); -NNG_DECL int nng_dialer_set_size(nng_dialer, const char *, size_t); -NNG_DECL int nng_dialer_set_uint64(nng_dialer, const char *, uint64_t); -NNG_DECL int nng_dialer_set_string(nng_dialer, const char *, const char *); -NNG_DECL int nng_dialer_set_ptr(nng_dialer, const char *, void *); -NNG_DECL int nng_dialer_set_ms(nng_dialer, const char *, nng_duration); -NNG_DECL int nng_dialer_set_addr( - nng_dialer, const char *, const nng_sockaddr *); - -NNG_DECL int nng_dialer_get(nng_dialer, const char *, void *, size_t *); -NNG_DECL int nng_dialer_get_bool(nng_dialer, const char *, bool *); -NNG_DECL int nng_dialer_get_int(nng_dialer, const char *, int *); -NNG_DECL int nng_dialer_get_size(nng_dialer, const char *, size_t *); -NNG_DECL int nng_dialer_get_uint64(nng_dialer, const char *, uint64_t *); -NNG_DECL int nng_dialer_get_string(nng_dialer, const char *, char **); -NNG_DECL int nng_dialer_get_ptr(nng_dialer, const char *, void **); -NNG_DECL int nng_dialer_get_ms(nng_dialer, const char *, nng_duration *); -NNG_DECL int nng_dialer_get_addr(nng_dialer, const char *, nng_sockaddr *); - -NNG_DECL int nng_listener_set( - nng_listener, const char *, const void *, size_t); -NNG_DECL int nng_listener_set_bool(nng_listener, const char *, bool); -NNG_DECL int nng_listener_set_int(nng_listener, const char *, int); -NNG_DECL int nng_listener_set_size(nng_listener, const char *, size_t); -NNG_DECL int nng_listener_set_uint64(nng_listener, const char *, uint64_t); -NNG_DECL int nng_listener_set_string(nng_listener, const char *, const char *); -NNG_DECL int nng_listener_set_ptr(nng_listener, const char *, void *); -NNG_DECL int nng_listener_set_ms(nng_listener, const char *, nng_duration); -NNG_DECL int nng_listener_set_addr( - nng_listener, const char *, const nng_sockaddr *); - -NNG_DECL int nng_listener_get(nng_listener, const char *, void *, size_t *); -NNG_DECL int nng_listener_get_bool(nng_listener, const char *, bool *); -NNG_DECL int nng_listener_get_int(nng_listener, const char *, int *); -NNG_DECL int nng_listener_get_size(nng_listener, const char *, size_t *); -NNG_DECL int nng_listener_get_uint64(nng_listener, const char *, uint64_t *); -NNG_DECL int nng_listener_get_string(nng_listener, const char *, char **); -NNG_DECL int nng_listener_get_ptr(nng_listener, const char *, void **); -NNG_DECL int nng_listener_get_ms(nng_listener, const char *, nng_duration *); -NNG_DECL int nng_listener_get_addr(nng_listener, const char *, nng_sockaddr *); - -// nng_strerror returns a human readable string associated with the error -// code supplied. -NNG_DECL const char *nng_strerror(int); - -// nng_send sends (or arranges to send) the data on the socket. Note that -// this function may (will!) return before any receiver has actually -// received the data. The return value will be zero to indicate that the -// socket has accepted the entire data for send, or an errno to indicate -// failure. The flags may include NNG_FLAG_NONBLOCK or NNG_FLAG_ALLOC. -// If the flag includes NNG_FLAG_ALLOC, then the function will call -// nng_free() on the supplied pointer & size on success. (If the call -// fails then the memory is not freed.) -NNG_DECL int nng_send(nng_socket, void *, size_t, int); - -// nng_recv receives message data into the socket, up to the supplied size. -// The actual size of the message data will be written to the value pointed -// to by size. The flags may include NNG_FLAG_NONBLOCK and NNG_FLAG_ALLOC. -// If NNG_FLAG_ALLOC is supplied then the library will allocate memory for -// the caller. In that case the pointer to the allocated will be stored -// instead of the data itself. The caller is responsible for freeing the -// associated memory with nng_free(). -NNG_DECL int nng_recv(nng_socket, void *, size_t *, int); - -// nng_sendmsg is like nng_send, but offers up a message structure, which -// gives the ability to provide more control over the message, including -// providing backtrace information. It also can take a message that was -// obtain via nn_recvmsg, allowing for zero copy forwarding. -NNG_DECL int nng_sendmsg(nng_socket, nng_msg *, int); - -// nng_recvmsg is like nng_recv, but is used to obtain a message structure -// as well as the data buffer. This can be used to obtain more information -// about where the message came from, access raw headers, etc. It also -// can be passed off directly to nng_sendmsg. -NNG_DECL int nng_recvmsg(nng_socket, nng_msg **, int); - -// nng_send_aio sends data on the socket asynchronously. As with nng_send, -// the completion may be executed before the data has actually been delivered, -// but only when it is accepted for delivery. The supplied AIO must have -// been initialized, and have an associated message. The message will be -// "owned" by the socket if the operation completes successfully. Otherwise -// the caller is responsible for freeing it. -NNG_DECL void nng_send_aio(nng_socket, nng_aio *); - -// nng_recv_aio receives data on the socket asynchronously. On a successful -// result, the AIO will have an associated message, that can be obtained -// with nng_aio_get_msg(). The caller takes ownership of the message at -// this point. -NNG_DECL void nng_recv_aio(nng_socket, nng_aio *); - -// Context support. User contexts are not supported by all protocols, -// but for those that do, they give a way to create multiple contexts -// on a single socket, each of which runs the protocol's state machinery -// independently, offering a way to achieve concurrent protocol support -// without resorting to raw mode sockets. See the protocol specific -// documentation for further details. (Note that at this time, only -// asynchronous send/recv are supported for contexts, but its easy enough -// to make synchronous versions with nng_aio_wait().) Note that nng_close -// of the parent socket will *block* as long as any contexts are open. - -// nng_ctx_open creates a context. This returns NNG_ENOTSUP if the -// protocol implementation does not support separate contexts. -NNG_DECL int nng_ctx_open(nng_ctx *, nng_socket); - -// nng_ctx_close closes the context. -NNG_DECL int nng_ctx_close(nng_ctx); - -// nng_ctx_id returns the numeric id for the context; this will be -// a positive value for a valid context, or < 0 for an invalid context. -// A valid context is not necessarily an *open* context. -NNG_DECL int nng_ctx_id(nng_ctx); - -// nng_ctx_recv receives asynchronously. It works like nng_recv_aio, but -// uses a local context instead of the socket global context. -NNG_DECL void nng_ctx_recv(nng_ctx, nng_aio *); - -// nng_ctx_send sends asynchronously. It works like nng_send_aio, but -// uses a local context instead of the socket global context. -NNG_DECL void nng_ctx_send(nng_ctx, nng_aio *); - -NNG_DECL int nng_ctx_get(nng_ctx, const char *, void *, size_t *); -NNG_DECL int nng_ctx_get_bool(nng_ctx, const char *, bool *); -NNG_DECL int nng_ctx_get_int(nng_ctx, const char *, int *); -NNG_DECL int nng_ctx_get_size(nng_ctx, const char *, size_t *); -NNG_DECL int nng_ctx_get_uint64(nng_ctx, const char *, uint64_t *); -NNG_DECL int nng_ctx_get_string(nng_ctx, const char *, char **); -NNG_DECL int nng_ctx_get_ptr(nng_ctx, const char *, void **); -NNG_DECL int nng_ctx_get_ms(nng_ctx, const char *, nng_duration *); -NNG_DECL int nng_ctx_get_addr(nng_ctx, const char *, nng_sockaddr *); - -NNG_DECL int nng_ctx_set(nng_ctx, const char *, const void *, size_t); -NNG_DECL int nng_ctx_set_bool(nng_ctx, const char *, bool); -NNG_DECL int nng_ctx_set_int(nng_ctx, const char *, int); -NNG_DECL int nng_ctx_set_size(nng_ctx, const char *, size_t); -NNG_DECL int nng_ctx_set_uint64(nng_ctx, const char *, uint64_t); -NNG_DECL int nng_ctx_set_string(nng_ctx, const char *, const char *); -NNG_DECL int nng_ctx_set_ptr(nng_ctx, const char *, void *); -NNG_DECL int nng_ctx_set_ms(nng_ctx, const char *, nng_duration); -NNG_DECL int nng_ctx_set_addr(nng_ctx, const char *, const nng_sockaddr *); - -// nng_alloc is used to allocate memory. It's intended purpose is for -// allocating memory suitable for message buffers with nng_send(). -// Applications that need memory for other purposes should use their platform -// specific API. -NNG_DECL void *nng_alloc(size_t); - -// nng_free is used to free memory allocated with nng_alloc, which includes -// memory allocated by nng_recv() when the NNG_FLAG_ALLOC message is supplied. -// As the application is required to keep track of the size of memory, this -// is probably less convenient for general uses than the C library malloc and -// calloc. -NNG_DECL void nng_free(void *, size_t); - -// nng_strdup duplicates the source string, using nng_alloc. The result -// should be freed with nng_strfree (or nng_free(strlen(s)+1)). -NNG_DECL char *nng_strdup(const char *); - -// nng_strfree is equivalent to nng_free(strlen(s)+1). -NNG_DECL void nng_strfree(char *); - -// Async IO API. AIO structures can be thought of as "handles" to -// support asynchronous operations. They contain the completion callback, and -// a pointer to consumer data. This is similar to how overlapped I/O -// works in Windows, when used with a completion callback. -// -// AIO structures can carry up to 4 distinct input values, and up to -// 4 distinct output values, and up to 4 distinct "private state" values. -// The meaning of the inputs and the outputs are determined by the -// I/O functions being called. - -// nng_aio_alloc allocates a new AIO, and associated the completion -// callback and its opaque argument. If NULL is supplied for the -// callback, then the caller must use nng_aio_wait() to wait for the -// operation to complete. If the completion callback is not NULL, then -// when a submitted operation completes (or is canceled or fails) the -// callback will be executed, generally in a different thread, with no -// locks held. -NNG_DECL int nng_aio_alloc(nng_aio **, void (*)(void *), void *); - -// nng_aio_free frees the AIO and any associated resources. -// It *must not* be in use at the time it is freed. -NNG_DECL void nng_aio_free(nng_aio *); - -// nng_aio_reap is like nng_aio_free, but calls it from a background -// reaper thread. This can be useful to free aio objects from aio -// callbacks (e.g. when the result of the callback is to discard -// the object in question.) The aio object must be in further use -// when this is called. -NNG_DECL void nng_aio_reap(nng_aio *); - -// nng_aio_stop stops any outstanding operation, and waits for the -// AIO to be free, including for the callback to have completed -// execution. Therefore the caller must NOT hold any locks that -// are acquired in the callback, or deadlock will occur. -NNG_DECL void nng_aio_stop(nng_aio *); - -// nng_aio_result returns the status/result of the operation. This -// will be zero on successful completion, or an nng error code on -// failure. -NNG_DECL int nng_aio_result(nng_aio *); - -// nng_aio_count returns the number of bytes transferred for certain -// I/O operations. This is meaningless for other operations (e.g. -// DNS lookups or TCP connection setup). -NNG_DECL size_t nng_aio_count(nng_aio *); - -// nng_aio_cancel attempts to cancel any in-progress I/O operation. -// The AIO callback will still be executed, but if the cancellation is -// successful then the status will be NNG_ECANCELED. -NNG_DECL void nng_aio_cancel(nng_aio *); - -// nng_aio_abort is like nng_aio_cancel, but allows for a different -// error result to be returned. -NNG_DECL void nng_aio_abort(nng_aio *, int); - -// nng_aio_wait waits synchronously for any pending operation to complete. -// It also waits for the callback to have completed execution. Therefore, -// the caller of this function must not hold any locks acquired by the -// callback or deadlock may occur. -NNG_DECL void nng_aio_wait(nng_aio *); - -// nng_aio_set_msg sets the message structure to use for asynchronous -// message send operations. -NNG_DECL void nng_aio_set_msg(nng_aio *, nng_msg *); - -// nng_aio_get_msg returns the message structure associated with a completed -// receive operation. -NNG_DECL nng_msg *nng_aio_get_msg(nng_aio *); - -// nng_aio_set_input sets an input parameter at the given index. -NNG_DECL int nng_aio_set_input(nng_aio *, unsigned, void *); - -// nng_aio_get_input retrieves the input parameter at the given index. -NNG_DECL void *nng_aio_get_input(nng_aio *, unsigned); - -// nng_aio_set_output sets an output result at the given index. -NNG_DECL int nng_aio_set_output(nng_aio *, unsigned, void *); - -// nng_aio_get_output retrieves the output result at the given index. -NNG_DECL void *nng_aio_get_output(nng_aio *, unsigned); - -// nng_aio_set_timeout sets a timeout on the AIO. This should be called for -// operations that should time out after a period. The timeout should be -// either a positive number of milliseconds, or NNG_DURATION_INFINITE to -// indicate that the operation has no timeout. A poll may be done by -// specifying NNG_DURATION_ZERO. The value NNG_DURATION_DEFAULT indicates -// that any socket specific timeout should be used. -NNG_DECL void nng_aio_set_timeout(nng_aio *, nng_duration); - -// nng_aio_set_iov sets a scatter/gather vector on the aio. The iov array -// itself is copied. Data members (the memory regions referenced) *may* be -// copied as well, depending on the operation. This operation is guaranteed -// to succeed if n <= 4, otherwise it may fail due to NNG_ENOMEM. -NNG_DECL int nng_aio_set_iov(nng_aio *, unsigned, const nng_iov *); - -// nng_aio_begin is called by the provider to mark the operation as -// beginning. If it returns false, then the provider must take no -// further action on the aio. -NNG_DECL bool nng_aio_begin(nng_aio *); - -// nng_aio_finish is used to "finish" an asynchronous operation. -// It should only be called by "providers" (such as HTTP server API users). -// The argument is the value that nng_aio_result() should return. -// IMPORTANT: Callers must ensure that this is called EXACTLY ONCE on any -// given aio. -NNG_DECL void nng_aio_finish(nng_aio *, int); - -// nng_aio_defer is used to register a cancellation routine, and indicate -// that the operation will be completed asynchronously. It must only be -// called once per operation on an aio, and must only be called by providers. -// If the operation is canceled by the consumer, the cancellation callback -// will be called. The provider *must* still ensure that the nng_aio_finish() -// function is called EXACTLY ONCE. If the operation cannot be canceled -// for any reason, the cancellation callback should do nothing. The -// final argument is passed to the cancelfn. The final argument of the -// cancellation function is the error number (will not be zero) corresponding -// to the reason for cancellation, e.g. NNG_ETIMEDOUT or NNG_ECANCELED. -typedef void (*nng_aio_cancelfn)(nng_aio *, void *, int); -NNG_DECL void nng_aio_defer(nng_aio *, nng_aio_cancelfn, void *); - -// nng_aio_sleep does a "sleeping" operation, basically does nothing -// but wait for the specified number of milliseconds to expire, then -// calls the callback. This returns 0, rather than NNG_ETIMEDOUT. -NNG_DECL void nng_sleep_aio(nng_duration, nng_aio *); - -// Message API. -NNG_DECL int nng_msg_alloc(nng_msg **, size_t); -NNG_DECL void nng_msg_free(nng_msg *); -NNG_DECL int nng_msg_realloc(nng_msg *, size_t); -NNG_DECL void * nng_msg_header(nng_msg *); -NNG_DECL size_t nng_msg_header_len(const nng_msg *); -NNG_DECL void * nng_msg_body(nng_msg *); -NNG_DECL size_t nng_msg_len(const nng_msg *); -NNG_DECL int nng_msg_append(nng_msg *, const void *, size_t); -NNG_DECL int nng_msg_insert(nng_msg *, const void *, size_t); -NNG_DECL int nng_msg_trim(nng_msg *, size_t); -NNG_DECL int nng_msg_chop(nng_msg *, size_t); -NNG_DECL int nng_msg_header_append(nng_msg *, const void *, size_t); -NNG_DECL int nng_msg_header_insert(nng_msg *, const void *, size_t); -NNG_DECL int nng_msg_header_trim(nng_msg *, size_t); -NNG_DECL int nng_msg_header_chop(nng_msg *, size_t); -NNG_DECL int nng_msg_header_append_u16(nng_msg *, uint16_t); -NNG_DECL int nng_msg_header_append_u32(nng_msg *, uint32_t); -NNG_DECL int nng_msg_header_append_u64(nng_msg *, uint64_t); -NNG_DECL int nng_msg_header_insert_u16(nng_msg *, uint16_t); -NNG_DECL int nng_msg_header_insert_u32(nng_msg *, uint32_t); -NNG_DECL int nng_msg_header_insert_u64(nng_msg *, uint64_t); -NNG_DECL int nng_msg_header_chop_u16(nng_msg *, uint16_t *); -NNG_DECL int nng_msg_header_chop_u32(nng_msg *, uint32_t *); -NNG_DECL int nng_msg_header_chop_u64(nng_msg *, uint64_t *); -NNG_DECL int nng_msg_header_trim_u16(nng_msg *, uint16_t *); -NNG_DECL int nng_msg_header_trim_u32(nng_msg *, uint32_t *); -NNG_DECL int nng_msg_header_trim_u64(nng_msg *, uint64_t *); -NNG_DECL int nng_msg_append_u16(nng_msg *, uint16_t); -NNG_DECL int nng_msg_append_u32(nng_msg *, uint32_t); -NNG_DECL int nng_msg_append_u64(nng_msg *, uint64_t); -NNG_DECL int nng_msg_insert_u16(nng_msg *, uint16_t); -NNG_DECL int nng_msg_insert_u32(nng_msg *, uint32_t); -NNG_DECL int nng_msg_insert_u64(nng_msg *, uint64_t); -NNG_DECL int nng_msg_chop_u16(nng_msg *, uint16_t *); -NNG_DECL int nng_msg_chop_u32(nng_msg *, uint32_t *); -NNG_DECL int nng_msg_chop_u64(nng_msg *, uint64_t *); -NNG_DECL int nng_msg_trim_u16(nng_msg *, uint16_t *); -NNG_DECL int nng_msg_trim_u32(nng_msg *, uint32_t *); -NNG_DECL int nng_msg_trim_u64(nng_msg *, uint64_t *); -NNG_DECL int nng_msg_dup(nng_msg **, const nng_msg *); -NNG_DECL void nng_msg_clear(nng_msg *); -NNG_DECL void nng_msg_header_clear(nng_msg *); -NNG_DECL void nng_msg_set_pipe(nng_msg *, nng_pipe); -NNG_DECL nng_pipe nng_msg_get_pipe(const nng_msg *); - -// Pipe API. Generally pipes are only "observable" to applications, but -// we do permit an application to close a pipe. This can be useful, for -// example during a connection notification, to disconnect a pipe that -// is associated with an invalid or untrusted remote peer. -NNG_DECL int nng_pipe_get(nng_pipe, const char *, void *, size_t *); -NNG_DECL int nng_pipe_get_bool(nng_pipe, const char *, bool *); -NNG_DECL int nng_pipe_get_int(nng_pipe, const char *, int *); -NNG_DECL int nng_pipe_get_ms(nng_pipe, const char *, nng_duration *); -NNG_DECL int nng_pipe_get_size(nng_pipe, const char *, size_t *); -NNG_DECL int nng_pipe_get_uint64(nng_pipe, const char *, uint64_t *); -NNG_DECL int nng_pipe_get_string(nng_pipe, const char *, char **); -NNG_DECL int nng_pipe_get_ptr(nng_pipe, const char *, void **); -NNG_DECL int nng_pipe_get_addr(nng_pipe, const char *, nng_sockaddr *); - -NNG_DECL int nng_pipe_close(nng_pipe); -NNG_DECL int nng_pipe_id(nng_pipe); -NNG_DECL nng_socket nng_pipe_socket(nng_pipe); -NNG_DECL nng_dialer nng_pipe_dialer(nng_pipe); -NNG_DECL nng_listener nng_pipe_listener(nng_pipe); - -// Flags. -#define NNG_FLAG_ALLOC 1u // Recv to allocate receive buffer -#define NNG_FLAG_NONBLOCK 2u // Non-blocking operations - -// Options. -#define NNG_OPT_SOCKNAME "socket-name" -#define NNG_OPT_RAW "raw" -#define NNG_OPT_PROTO "protocol" -#define NNG_OPT_PROTONAME "protocol-name" -#define NNG_OPT_PEER "peer" -#define NNG_OPT_PEERNAME "peer-name" -#define NNG_OPT_RECVBUF "recv-buffer" -#define NNG_OPT_SENDBUF "send-buffer" -#define NNG_OPT_RECVFD "recv-fd" -#define NNG_OPT_SENDFD "send-fd" -#define NNG_OPT_RECVTIMEO "recv-timeout" -#define NNG_OPT_SENDTIMEO "send-timeout" -#define NNG_OPT_LOCADDR "local-address" -#define NNG_OPT_REMADDR "remote-address" -#define NNG_OPT_URL "url" -#define NNG_OPT_MAXTTL "ttl-max" -#define NNG_OPT_RECVMAXSZ "recv-size-max" -#define NNG_OPT_RECONNMINT "reconnect-time-min" -#define NNG_OPT_RECONNMAXT "reconnect-time-max" - -// TLS options are only used when the underlying transport supports TLS. - -// NNG_OPT_TLS_CONFIG is a pointer to an nng_tls_config object. Generally -// this can used with endpoints, although once an endpoint is started, or -// once a configuration is used, the value becomes read-only. Note that -// when configuring the object, a hold is placed on the TLS configuration, -// using a reference count. When retrieving the object, no such hold is -// placed, and so the caller must take care not to use the associated object -// after the endpoint it is associated with is closed. -#define NNG_OPT_TLS_CONFIG "tls-config" - -// NNG_OPT_TLS_AUTH_MODE is a write-only integer (int) option that specifies -// whether peer authentication is needed. The option can take one of the -// values of NNG_TLS_AUTH_MODE_NONE, NNG_TLS_AUTH_MODE_OPTIONAL, or -// NNG_TLS_AUTH_MODE_REQUIRED. The default is typically NNG_TLS_AUTH_MODE_NONE -// for listeners, and NNG_TLS_AUTH_MODE_REQUIRED for dialers. If set to -// REQUIRED, then connections will be rejected if the peer cannot be verified. -// If set to OPTIONAL, then a verification step takes place, but the connection -// is still permitted. (The result can be checked with NNG_OPT_TLS_VERIFIED). -#define NNG_OPT_TLS_AUTH_MODE "tls-authmode" - -// NNG_OPT_TLS_CERT_KEY_FILE names a single file that contains a certificate -// and key identifying the endpoint. This is a write-only value. This can be -// set multiple times for times for different keys/certs corresponding to -// different algorithms on listeners, whereas dialers only support one. The -// file must contain both cert and key as PEM blocks, and the key must -// not be encrypted. (If more flexibility is needed, use the TLS configuration -// directly, via NNG_OPT_TLS_CONFIG.) -#define NNG_OPT_TLS_CERT_KEY_FILE "tls-cert-key-file" - -// NNG_OPT_TLS_CA_FILE names a single file that contains certificate(s) for a -// CA, and optionally CRLs, which are used to validate the peer's certificate. -// This is a write-only value, but multiple CAs can be loaded by setting this -// multiple times. -#define NNG_OPT_TLS_CA_FILE "tls-ca-file" - -// NNG_OPT_TLS_SERVER_NAME is a write-only string that can typically be -// set on dialers to check the CN of the server for a match. This -// can also affect SNI (server name indication). It usually has no effect -// on listeners. -#define NNG_OPT_TLS_SERVER_NAME "tls-server-name" - -// NNG_OPT_TLS_VERIFIED returns a boolean indicating whether the peer has -// been verified (true) or not (false). Typically this is read-only, and -// only available for pipes. This option may return incorrect results if -// peer authentication is disabled with `NNG_TLS_AUTH_MODE_NONE`. -#define NNG_OPT_TLS_VERIFIED "tls-verified" - -// TCP options. These may be supported on various transports that use -// TCP underneath such as TLS, or not. - -// TCP nodelay disables the use of Nagle, so that messages are sent -// as soon as data is available. This tends to reduce latency, but -// can come at the cost of extra messages being sent, and may have -// a detrimental effect on performance. For most uses, we recommend -// enabling this. (Disable it if you are on a very slow network.) -// This is a boolean. -#define NNG_OPT_TCP_NODELAY "tcp-nodelay" - -// TCP keepalive causes the underlying transport to send keep-alive -// messages, and keep the session active. Keepalives are zero length -// messages with the ACK flag turned on. If we don't get an ACK back, -// then we know the other side is gone. This is useful for detecting -// dead peers, and is also used to prevent disconnections caused by -// middle boxes thinking the session has gone idle (e.g. keeping NAT -// state current). This is a boolean. -#define NNG_OPT_TCP_KEEPALIVE "tcp-keepalive" - -// Local TCP port number. This is used on a listener, and is intended -// to be used after starting the listener in combination with a wildcard -// (0) local port. This determines the actual ephemeral port that was -// selected and bound. The value is provided as an int, but only the -// low order 16 bits will be set. This is provided in native byte order, -// which makes it more convenient than using the NNG_OPT_LOCADDR option. -#define NNG_OPT_TCP_BOUND_PORT "tcp-bound-port" - -// IPC options. These will largely vary depending on the platform, -// as POSIX systems have very different options than Windows. - -// Security Descriptor. This option may only be set on listeners -// on the Windows platform, where the object is a pointer to a -// a Windows SECURITY_DESCRIPTOR. -#define NNG_OPT_IPC_SECURITY_DESCRIPTOR "ipc:security-descriptor" - -// Permissions bits. This option is only valid for listeners on -// POSIX platforms and others that honor UNIX style permission bits. -// Note that some platforms may not honor the permissions here, although -// at least Linux and macOS seem to do so. Check before you rely on -// this for security. -#define NNG_OPT_IPC_PERMISSIONS "ipc:permissions" - -// Peer UID. This is only available on POSIX style systems. -#define NNG_OPT_IPC_PEER_UID "ipc:peer-uid" - -// Peer GID (primary group). This is only available on POSIX style systems. -#define NNG_OPT_IPC_PEER_GID "ipc:peer-gid" - -// Peer process ID. Available on Windows, Linux, and SunOS. -// In theory we could obtain this with the first message sent, -// but we have elected not to do this for now. (Nice RFE for a FreeBSD -// guru though.) -#define NNG_OPT_IPC_PEER_PID "ipc:peer-pid" - -// Peer Zone ID. Only on SunOS systems. (Linux containers have no -// definable kernel identity; they are a user-land fabrication made up -// from various pieces of different namespaces. FreeBSD does have -// something called JailIDs, but it isn't obvious how to determine this, -// or even if processes can use IPC across jail boundaries.) -#define NNG_OPT_IPC_PEER_ZONEID "ipc:peer-zoneid" - -// WebSocket Options. - -// NNG_OPT_WS_REQUEST_HEADERS is a string containing the -// request headers, formatted as CRLF terminated lines. -#define NNG_OPT_WS_REQUEST_HEADERS "ws:request-headers" - -// NNG_OPT_WS_RESPONSE_HEADERS is a string containing the -// response headers, formatted as CRLF terminated lines. -#define NNG_OPT_WS_RESPONSE_HEADERS "ws:response-headers" - -// NNG_OPT_WS_REQUEST_HEADER is a prefix, for a dynamic -// property name. This allows direct access to any named header. -// Concatenate this with the name of the property (case is not sensitive). -// Only the first such header is returned. -#define NNG_OPT_WS_RESPONSE_HEADER "ws:response-header:" - -// NNG_OPT_WS_RESPONSE_HEADER is like NNG_OPT_REQUEST_HEADER, but used for -// accessing the request headers. -#define NNG_OPT_WS_REQUEST_HEADER "ws:request-header:" - -// NNG_OPT_WS_REQUEST_URI is used to obtain the URI sent by the client. -// This can be useful when a handler supports an entire directory tree. -#define NNG_OPT_WS_REQUEST_URI "ws:request-uri" - -// NNG_OPT_WS_SENDMAXFRAME is used to configure the fragmentation size -// used for frames. This has a default value of 64k. Large values -// are good for throughput, but penalize latency. They also require -// additional buffering on the peer. This value must not be larger -// than what the peer will accept, and unfortunately there is no way -// to negotiate this. -#define NNG_OPT_WS_SENDMAXFRAME "ws:txframe-max" - -// NNG_OPT_WS_RECVMAXFRAME is the largest frame we will accept. This should -// probably not be larger than NNG_OPT_RECVMAXSZ. If the sender attempts -// to send more data than this in a single message, it will be dropped. -#define NNG_OPT_WS_RECVMAXFRAME "ws:rxframe-max" - -// NNG_OPT_WS_PROTOCOL is the "websocket sub-protocol" -- it's a string. -// This is also known as the Sec-WebSocket-Protocol header. It is treated -// specially. This is part of the websocket handshake. -#define NNG_OPT_WS_PROTOCOL "ws:protocol" - -// NNG_OPT_WS_SEND_TEXT is a boolean used to tell the WS stream -// transport to send text messages. This is not supported for the -// core WebSocket transport, but when using streams it might be useful -// to speak with 3rd party WebSocket applications. This mode should -// not be used unless absolutely required. No validation of the message -// contents is performed by NNG; applications are expected to honor -// the requirement to send only valid UTF-8. (Compliant applications -// will close the socket if they see this message type with invalid UTF-8.) -#define NNG_OPT_WS_SEND_TEXT "ws:send-text" - -// NNG_OPT_WS_RECV_TEXT is a boolean that enables NNG to receive -// TEXT frames. This is only useful for stream mode applications -- -// SP protocol requires the use of binary frames. Note also that -// NNG does not validate the message contents for valid UTF-8; this -// means it will not be conformant with RFC-6455 on it's own. Applications -// that need this should check the message contents themselves, and -// close the connection if invalid UTF-8 is received. This option -// should not be used unless required to communication with 3rd party -// peers that cannot be coerced into sending binary frames. -#define NNG_OPT_WS_RECV_TEXT "ws:recv-text" - -// XXX: TBD: priorities, ipv4only - -// Statistics. These are for informational purposes only, and subject -// to change without notice. The API for accessing these is stable, -// but the individual statistic names, values, and meanings are all -// subject to change. - -// nng_stats_get takes a snapshot of the entire set of statistics. -// While the operation can be somewhat expensive (allocations), it -// is done in a way that minimizes impact to running operations. -// Note that the statistics are provided as a tree, with parents -// used for grouping, and with child statistics underneath. The -// top stat returned will be of type NNG_STAT_SCOPE with name "". -// Applications may choose to consider this root scope as "root", if -// the empty string is not suitable. -NNG_DECL int nng_stats_get(nng_stat **); - -// nng_stats_free frees a previous list of snapshots. This should only -// be called on the parent statistic that obtained via nng_stats_get. -NNG_DECL void nng_stats_free(nng_stat *); - -// nng_stats_dump is a debugging function that dumps the entire set of -// statistics to stdout. -NNG_DECL void nng_stats_dump(nng_stat *); - -// nng_stat_next finds the next sibling for the current stat. If there -// are no more siblings, it returns NULL. -NNG_DECL nng_stat *nng_stat_next(nng_stat *); - -// nng_stat_child finds the first child of the current stat. If no children -// exist, then NULL is returned. -NNG_DECL nng_stat *nng_stat_child(nng_stat *); - -// nng_stat_name is used to determine the name of the statistic. -// This is a human readable name. Statistic names, as well as the presence -// or absence or semantic of any particular statistic are not part of any -// stable API, and may be changed without notice in future updates. -NNG_DECL const char *nng_stat_name(nng_stat *); - -// nng_stat_type is used to determine the type of the statistic. -// Counters generally increment, and therefore changes in the value over -// time are likely more interesting than the actual level. Level -// values reflect some absolute state however, and should be presented to the -// user as is. -NNG_DECL int nng_stat_type(nng_stat *); - -// nng_stat_find is used to find a specific named statistic within -// a statistic tree. NULL is returned if no such statistic exists. -NNG_DECL nng_stat *nng_stat_find(nng_stat *, const char *); - -// nng_stat_find_socket is used to find the stats for the given socket. -NNG_DECL nng_stat *nng_stat_find_socket(nng_stat *, nng_socket); - -// nng_stat_find_dialer is used to find the stats for the given dialer. -NNG_DECL nng_stat *nng_stat_find_dialer(nng_stat *, nng_dialer); - -// nng_stat_find_listener is used to find the stats for the given listener. -NNG_DECL nng_stat *nng_stat_find_listener(nng_stat *, nng_listener); - -enum nng_stat_type_enum { - NNG_STAT_SCOPE = 0, // Stat is for scoping, and carries no value - NNG_STAT_LEVEL = 1, // Numeric "absolute" value, diffs meaningless - NNG_STAT_COUNTER = 2, // Incrementing value (diffs are meaningful) - NNG_STAT_STRING = 3, // Value is a string - NNG_STAT_BOOLEAN = 4, // Value is a boolean - NNG_STAT_ID = 5, // Value is a numeric ID -}; - -// nng_stat_unit provides information about the unit for the statistic, -// such as NNG_UNIT_BYTES or NNG_UNIT_BYTES. If no specific unit is -// applicable, such as a relative priority, then NN_UNIT_NONE is returned. -NNG_DECL int nng_stat_unit(nng_stat *); - -enum nng_unit_enum { - NNG_UNIT_NONE = 0, // No special units - NNG_UNIT_BYTES = 1, // Bytes, e.g. bytes sent, etc. - NNG_UNIT_MESSAGES = 2, // Messages, one per message - NNG_UNIT_MILLIS = 3, // Milliseconds - NNG_UNIT_EVENTS = 4 // Some other type of event -}; - -// nng_stat_value returns returns the actual value of the statistic. -// Statistic values reflect their value at the time that the corresponding -// snapshot was updated, and are undefined until an update is performed. -NNG_DECL uint64_t nng_stat_value(nng_stat *); - -// nng_stat_value returns returns the actual value of the statistic. -// Statistic values reflect their value at the time that the corresponding -// snapshot was updated, and are undefined until an update is performed. -NNG_DECL bool nng_stat_bool(nng_stat *); - -// nng_stat_string returns the string associated with a string statistic, -// or NULL if the statistic is not part of the string. The value returned -// is valid until the associated statistic is freed. -NNG_DECL const char *nng_stat_string(nng_stat *); - -// nng_stat_desc returns a human readable description of the statistic. -// This may be useful for display in diagnostic interfaces, etc. -NNG_DECL const char *nng_stat_desc(nng_stat *); - -// nng_stat_timestamp returns a timestamp (milliseconds) when the statistic -// was captured. The base offset is the same as used by nng_clock(). -// We don't use nng_time though, because that's in the supplemental header. -NNG_DECL uint64_t nng_stat_timestamp(nng_stat *); - -// Device functionality. This connects two sockets together in a device, -// which means that messages from one side are forwarded to the other. -NNG_DECL int nng_device(nng_socket, nng_socket); - -// Symbol name and visibility. TBD. The only symbols that really should -// be directly exported to runtimes IMO are the option symbols. And frankly -// they have enough special logic around them that it might be best not to -// automate the promotion of them to other APIs. This is an area open -// for discussion. - -// Error codes. These generally have different values from UNIX errnos, -// so take care about converting them. The one exception is that 0 is -// unambiguously "success". -// -// NNG_SYSERR is a special code, which allows us to wrap errors from the -// underlying operating system. We generally prefer to map errors to one -// of the above, but if we cannot, then we just encode an error this way. -// The bit is large enough to accommodate all known UNIX and Win32 error -// codes. We try hard to match things semantically to one of our standard -// errors. For example, a connection reset or aborted we treat as a -// closed connection, because that's basically what it means. (The remote -// peer closed the connection.) For certain kinds of resource exhaustion -// we treat it the same as memory. But for files, etc. that's OS-specific, -// and we use the generic below. Some of the above error codes we use -// internally, and the application should never see (e.g. NNG_EINTR). -// -// NNG_ETRANERR is like ESYSERR, but is used to wrap transport specific -// errors, from different transports. It should only be used when none -// of the other options are available. - -enum nng_errno_enum { - NNG_EINTR = 1, - NNG_ENOMEM = 2, - NNG_EINVAL = 3, - NNG_EBUSY = 4, - NNG_ETIMEDOUT = 5, - NNG_ECONNREFUSED = 6, - NNG_ECLOSED = 7, - NNG_EAGAIN = 8, - NNG_ENOTSUP = 9, - NNG_EADDRINUSE = 10, - NNG_ESTATE = 11, - NNG_ENOENT = 12, - NNG_EPROTO = 13, - NNG_EUNREACHABLE = 14, - NNG_EADDRINVAL = 15, - NNG_EPERM = 16, - NNG_EMSGSIZE = 17, - NNG_ECONNABORTED = 18, - NNG_ECONNRESET = 19, - NNG_ECANCELED = 20, - NNG_ENOFILES = 21, - NNG_ENOSPC = 22, - NNG_EEXIST = 23, - NNG_EREADONLY = 24, - NNG_EWRITEONLY = 25, - NNG_ECRYPTO = 26, - NNG_EPEERAUTH = 27, - NNG_ENOARG = 28, - NNG_EAMBIGUOUS = 29, - NNG_EBADTYPE = 30, - NNG_ECONNSHUT = 31, - NNG_EINTERNAL = 1000, - NNG_ESYSERR = 0x10000000, - NNG_ETRANERR = 0x20000000 -}; - -// URL support. We frequently want to process a URL, and these methods -// give us a convenient way of doing so. - -typedef struct nng_url { - char *u_rawurl; // never NULL - char *u_scheme; // never NULL - char *u_userinfo; // will be NULL if not specified - char *u_host; // including colon and port - char *u_hostname; // name only, will be "" if not specified - char *u_port; // port, will be "" if not specified - char *u_path; // path, will be "" if not specified - char *u_query; // without '?', will be NULL if not specified - char *u_fragment; // without '#', will be NULL if not specified - char *u_requri; // includes query and fragment, "" if not specified -} nng_url; - -// nng_url_parse parses a URL string into a structured form. -// Note that the u_port member will be filled out with a numeric -// port if one isn't specified and a default port is appropriate for -// the scheme. The URL structure is allocated, along with individual -// members. It can be freed with nng_url_free. -NNG_DECL int nng_url_parse(nng_url **, const char *); - -// nng_url_free frees a URL structure that was created by nng_url_parse(). -NNG_DECL void nng_url_free(nng_url *); - -// nng_url_clone clones a URL structure. -NNG_DECL int nng_url_clone(nng_url **, const nng_url *); - -// nng_version returns the library version as a human readable string. -NNG_DECL const char *nng_version(void); - -// nng_stream operations permit direct access to low level streams, -// which can have a variety of uses. Internally most of the transports -// are built on top of these. Streams are created by other dialers or -// listeners. The API for creating dialers and listeners varies. - -typedef struct nng_stream nng_stream; -typedef struct nng_stream_dialer nng_stream_dialer; -typedef struct nng_stream_listener nng_stream_listener; - -NNG_DECL void nng_stream_free(nng_stream *); -NNG_DECL void nng_stream_close(nng_stream *); -NNG_DECL void nng_stream_send(nng_stream *, nng_aio *); -NNG_DECL void nng_stream_recv(nng_stream *, nng_aio *); -NNG_DECL int nng_stream_get(nng_stream *, const char *, void *, size_t *); -NNG_DECL int nng_stream_get_bool(nng_stream *, const char *, bool *); -NNG_DECL int nng_stream_get_int(nng_stream *, const char *, int *); -NNG_DECL int nng_stream_get_ms(nng_stream *, const char *, nng_duration *); -NNG_DECL int nng_stream_get_size(nng_stream *, const char *, size_t *); -NNG_DECL int nng_stream_get_uint64(nng_stream *, const char *, uint64_t *); -NNG_DECL int nng_stream_get_string(nng_stream *, const char *, char **); -NNG_DECL int nng_stream_get_ptr(nng_stream *, const char *, void **); -NNG_DECL int nng_stream_get_addr(nng_stream *, const char *, nng_sockaddr *); -NNG_DECL int nng_stream_set(nng_stream *, const char *, const void *, size_t); -NNG_DECL int nng_stream_set_bool(nng_stream *, const char *, bool); -NNG_DECL int nng_stream_set_int(nng_stream *, const char *, int); -NNG_DECL int nng_stream_set_ms(nng_stream *, const char *, nng_duration); -NNG_DECL int nng_stream_set_size(nng_stream *, const char *, size_t); -NNG_DECL int nng_stream_set_uint64(nng_stream *, const char *, uint64_t); -NNG_DECL int nng_stream_set_string(nng_stream *, const char *, const char *); -NNG_DECL int nng_stream_set_ptr(nng_stream *, const char *, void *); -NNG_DECL int nng_stream_set_addr( - nng_stream *, const char *, const nng_sockaddr *); - -NNG_DECL int nng_stream_dialer_alloc(nng_stream_dialer **, const char *); -NNG_DECL int nng_stream_dialer_alloc_url( - nng_stream_dialer **, const nng_url *); -NNG_DECL void nng_stream_dialer_free(nng_stream_dialer *); -NNG_DECL void nng_stream_dialer_close(nng_stream_dialer *); -NNG_DECL void nng_stream_dialer_dial(nng_stream_dialer *, nng_aio *); -NNG_DECL int nng_stream_dialer_set( - nng_stream_dialer *, const char *, const void *, size_t); -NNG_DECL int nng_stream_dialer_get( - nng_stream_dialer *, const char *, void *, size_t *); -NNG_DECL int nng_stream_dialer_get_bool( - nng_stream_dialer *, const char *, bool *); -NNG_DECL int nng_stream_dialer_get_int( - nng_stream_dialer *, const char *, int *); -NNG_DECL int nng_stream_dialer_get_ms( - nng_stream_dialer *, const char *, nng_duration *); -NNG_DECL int nng_stream_dialer_get_size( - nng_stream_dialer *, const char *, size_t *); -NNG_DECL int nng_stream_dialer_get_uint64( - nng_stream_dialer *, const char *, uint64_t *); -NNG_DECL int nng_stream_dialer_get_string( - nng_stream_dialer *, const char *, char **); -NNG_DECL int nng_stream_dialer_get_ptr( - nng_stream_dialer *, const char *, void **); -NNG_DECL int nng_stream_dialer_get_addr( - nng_stream_dialer *, const char *, nng_sockaddr *); -NNG_DECL int nng_stream_dialer_set_bool( - nng_stream_dialer *, const char *, bool); -NNG_DECL int nng_stream_dialer_set_int(nng_stream_dialer *, const char *, int); -NNG_DECL int nng_stream_dialer_set_ms( - nng_stream_dialer *, const char *, nng_duration); -NNG_DECL int nng_stream_dialer_set_size( - nng_stream_dialer *, const char *, size_t); -NNG_DECL int nng_stream_dialer_set_uint64( - nng_stream_dialer *, const char *, uint64_t); -NNG_DECL int nng_stream_dialer_set_string( - nng_stream_dialer *, const char *, const char *); -NNG_DECL int nng_stream_dialer_set_ptr( - nng_stream_dialer *, const char *, void *); -NNG_DECL int nng_stream_dialer_set_addr( - nng_stream_dialer *, const char *, const nng_sockaddr *); - -NNG_DECL int nng_stream_listener_alloc(nng_stream_listener **, const char *); -NNG_DECL int nng_stream_listener_alloc_url( - nng_stream_listener **, const nng_url *); -NNG_DECL void nng_stream_listener_free(nng_stream_listener *); -NNG_DECL void nng_stream_listener_close(nng_stream_listener *); -NNG_DECL int nng_stream_listener_listen(nng_stream_listener *); -NNG_DECL void nng_stream_listener_accept(nng_stream_listener *, nng_aio *); -NNG_DECL int nng_stream_listener_set( - nng_stream_listener *, const char *, const void *, size_t); -NNG_DECL int nng_stream_listener_get( - nng_stream_listener *, const char *, void *, size_t *); -NNG_DECL int nng_stream_listener_get_bool( - nng_stream_listener *, const char *, bool *); -NNG_DECL int nng_stream_listener_get_int( - nng_stream_listener *, const char *, int *); -NNG_DECL int nng_stream_listener_get_ms( - nng_stream_listener *, const char *, nng_duration *); -NNG_DECL int nng_stream_listener_get_size( - nng_stream_listener *, const char *, size_t *); -NNG_DECL int nng_stream_listener_get_uint64( - nng_stream_listener *, const char *, uint64_t *); -NNG_DECL int nng_stream_listener_get_string( - nng_stream_listener *, const char *, char **); -NNG_DECL int nng_stream_listener_get_ptr( - nng_stream_listener *, const char *, void **); -NNG_DECL int nng_stream_listener_get_addr( - nng_stream_listener *, const char *, nng_sockaddr *); -NNG_DECL int nng_stream_listener_set_bool( - nng_stream_listener *, const char *, bool); -NNG_DECL int nng_stream_listener_set_int( - nng_stream_listener *, const char *, int); -NNG_DECL int nng_stream_listener_set_ms( - nng_stream_listener *, const char *, nng_duration); -NNG_DECL int nng_stream_listener_set_size( - nng_stream_listener *, const char *, size_t); -NNG_DECL int nng_stream_listener_set_uint64( - nng_stream_listener *, const char *, uint64_t); -NNG_DECL int nng_stream_listener_set_string( - nng_stream_listener *, const char *, const char *); -NNG_DECL int nng_stream_listener_set_ptr( - nng_stream_listener *, const char *, void *); -NNG_DECL int nng_stream_listener_set_addr( - nng_stream_listener *, const char *, const nng_sockaddr *); - - -#ifndef NNG_ELIDE_DEPRECATED -// These are legacy APIs that have been deprecated. -// Their use is strongly discouraged. - -// nng_msg_getopt is defunct, and should not be used by programs. It -// always returns NNG_ENOTSUP. -NNG_DECL int nng_msg_getopt(nng_msg *, int, void *, size_t *); - -// Socket options. Use nng_socket_get and nng_socket_set isnetadl -NNG_DECL int nng_getopt(nng_socket, const char *, void *, size_t *); -NNG_DECL int nng_getopt_bool(nng_socket, const char *, bool *); -NNG_DECL int nng_getopt_int(nng_socket, const char *, int *); -NNG_DECL int nng_getopt_ms(nng_socket, const char *, nng_duration *); -NNG_DECL int nng_getopt_size(nng_socket, const char *, size_t *); -NNG_DECL int nng_getopt_uint64(nng_socket, const char *, uint64_t *); -NNG_DECL int nng_getopt_ptr(nng_socket, const char *, void **); -NNG_DECL int nng_getopt_string(nng_socket, const char *, char **); -NNG_DECL int nng_setopt(nng_socket, const char *, const void *, size_t); -NNG_DECL int nng_setopt_bool(nng_socket, const char *, bool); -NNG_DECL int nng_setopt_int(nng_socket, const char *, int); -NNG_DECL int nng_setopt_ms(nng_socket, const char *, nng_duration); -NNG_DECL int nng_setopt_size(nng_socket, const char *, size_t); -NNG_DECL int nng_setopt_uint64(nng_socket, const char *, uint64_t); -NNG_DECL int nng_setopt_string(nng_socket, const char *, const char *); -NNG_DECL int nng_setopt_ptr(nng_socket, const char *, void *); - -// Context options. Use nng_ctx_get and nng_ctx_set instead. -NNG_DECL int nng_ctx_getopt(nng_ctx, const char *, void *, size_t *); -NNG_DECL int nng_ctx_getopt_bool(nng_ctx, const char *, bool *); -NNG_DECL int nng_ctx_getopt_int(nng_ctx, const char *, int *); -NNG_DECL int nng_ctx_getopt_ms(nng_ctx, const char *, nng_duration *); -NNG_DECL int nng_ctx_getopt_size(nng_ctx, const char *, size_t *); -NNG_DECL int nng_ctx_setopt(nng_ctx, const char *, const void *, size_t); -NNG_DECL int nng_ctx_setopt_bool(nng_ctx, const char *, bool); -NNG_DECL int nng_ctx_setopt_int(nng_ctx, const char *, int); -NNG_DECL int nng_ctx_setopt_ms(nng_ctx, const char *, nng_duration); -NNG_DECL int nng_ctx_setopt_size(nng_ctx, const char *, size_t); - -// Dialer options. Use nng_dialer_get and nng_dialer_set instead. -NNG_DECL int nng_dialer_getopt(nng_dialer, const char *, void *, size_t *); -NNG_DECL int nng_dialer_getopt_bool(nng_dialer, const char *, bool *); -NNG_DECL int nng_dialer_getopt_int(nng_dialer, const char *, int *); -NNG_DECL int nng_dialer_getopt_ms(nng_dialer, const char *, nng_duration *); -NNG_DECL int nng_dialer_getopt_size(nng_dialer, const char *, size_t *); -NNG_DECL int nng_dialer_getopt_sockaddr( - nng_dialer, const char *, nng_sockaddr *); -NNG_DECL int nng_dialer_getopt_uint64(nng_dialer, const char *, uint64_t *); -NNG_DECL int nng_dialer_getopt_ptr(nng_dialer, const char *, void **); -NNG_DECL int nng_dialer_getopt_string(nng_dialer, const char *, char **); -NNG_DECL int nng_dialer_setopt(nng_dialer, const char *, const void *, size_t); -NNG_DECL int nng_dialer_setopt_bool(nng_dialer, const char *, bool); -NNG_DECL int nng_dialer_setopt_int(nng_dialer, const char *, int); -NNG_DECL int nng_dialer_setopt_ms(nng_dialer, const char *, nng_duration); -NNG_DECL int nng_dialer_setopt_size(nng_dialer, const char *, size_t); -NNG_DECL int nng_dialer_setopt_uint64(nng_dialer, const char *, uint64_t); -NNG_DECL int nng_dialer_setopt_ptr(nng_dialer, const char *, void *); -NNG_DECL int nng_dialer_setopt_string(nng_dialer, const char *, const char *); - -// Listener options. Use nng_listener_get and nng_listener_set instead. -NNG_DECL int nng_listener_getopt(nng_listener, const char *, void *, size_t *); -NNG_DECL int nng_listener_getopt_bool(nng_listener, const char *, bool *); -NNG_DECL int nng_listener_getopt_int(nng_listener, const char *, int *); -NNG_DECL int nng_listener_getopt_ms( - nng_listener, const char *, nng_duration *); -NNG_DECL int nng_listener_getopt_size(nng_listener, const char *, size_t *); -NNG_DECL int nng_listener_getopt_sockaddr( - nng_listener, const char *, nng_sockaddr *); -NNG_DECL int nng_listener_getopt_uint64( - nng_listener, const char *, uint64_t *); -NNG_DECL int nng_listener_getopt_ptr(nng_listener, const char *, void **); -NNG_DECL int nng_listener_getopt_string(nng_listener, const char *, char **); -NNG_DECL int nng_listener_setopt( - nng_listener, const char *, const void *, size_t); -NNG_DECL int nng_listener_setopt_bool(nng_listener, const char *, bool); -NNG_DECL int nng_listener_setopt_int(nng_listener, const char *, int); -NNG_DECL int nng_listener_setopt_ms(nng_listener, const char *, nng_duration); -NNG_DECL int nng_listener_setopt_size(nng_listener, const char *, size_t); -NNG_DECL int nng_listener_setopt_uint64(nng_listener, const char *, uint64_t); -NNG_DECL int nng_listener_setopt_ptr(nng_listener, const char *, void *); -NNG_DECL int nng_listener_setopt_string( - nng_listener, const char *, const char *); - -// Pipe options. Use nng_pipe_get instead. -NNG_DECL int nng_pipe_getopt(nng_pipe, const char *, void *, size_t *); -NNG_DECL int nng_pipe_getopt_bool(nng_pipe, const char *, bool *); -NNG_DECL int nng_pipe_getopt_int(nng_pipe, const char *, int *); -NNG_DECL int nng_pipe_getopt_ms(nng_pipe, const char *, nng_duration *); -NNG_DECL int nng_pipe_getopt_size(nng_pipe, const char *, size_t *); -NNG_DECL int nng_pipe_getopt_sockaddr(nng_pipe, const char *, nng_sockaddr *); -NNG_DECL int nng_pipe_getopt_uint64(nng_pipe, const char *, uint64_t *); -NNG_DECL int nng_pipe_getopt_ptr(nng_pipe, const char *, void **); -NNG_DECL int nng_pipe_getopt_string(nng_pipe, const char *, char **); - -// nng_closeall closes all open sockets. Do not call this from -// a library; it will affect all sockets. -NNG_DECL void nng_closeall(void); - -#endif - -#ifdef __cplusplus -} -#endif - -#endif // NNG_NNG_H diff --git a/nng-prebuilt/tda4/include/nng/protocol/bus0/bus.h b/nng-prebuilt/tda4/include/nng/protocol/bus0/bus.h deleted file mode 100644 index c8c23d8..0000000 --- a/nng-prebuilt/tda4/include/nng/protocol/bus0/bus.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_PROTOCOL_BUS0_BUS_H -#define NNG_PROTOCOL_BUS0_BUS_H - -#ifdef __cplusplus -extern "C" { -#endif - -NNG_DECL int nng_bus0_open(nng_socket *); - -NNG_DECL int nng_bus0_open_raw(nng_socket *); - -#ifndef nng_bus_open -#define nng_bus_open nng_bus0_open -#endif - -#ifndef nng_bus_open_raw -#define nng_bus_open_raw nng_bus0_open_raw -#endif - -#ifdef __cplusplus -} -#endif - -#endif // NNG_PROTOCOL_BUS0_BUS_H diff --git a/nng-prebuilt/tda4/include/nng/protocol/pair0/pair.h b/nng-prebuilt/tda4/include/nng/protocol/pair0/pair.h deleted file mode 100644 index 1356f1c..0000000 --- a/nng-prebuilt/tda4/include/nng/protocol/pair0/pair.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_PROTOCOL_PAIR0_PAIR_H -#define NNG_PROTOCOL_PAIR0_PAIR_H - -#ifdef __cplusplus -extern "C" { -#endif - -NNG_DECL int nng_pair0_open(nng_socket *); - -NNG_DECL int nng_pair0_open_raw(nng_socket *); - -#ifndef nng_pair_open -#define nng_pair_open nng_pair0_open -#endif - -#ifndef nng_pair_open_raw -#define nng_pair_open_raw nng_pair0_open_raw -#endif - -#ifdef __cplusplus -} -#endif - -#endif // NNG_PROTOCOL_PAIR0_PAIR_H diff --git a/nng-prebuilt/tda4/include/nng/protocol/pair1/pair.h b/nng-prebuilt/tda4/include/nng/protocol/pair1/pair.h deleted file mode 100644 index c48b202..0000000 --- a/nng-prebuilt/tda4/include/nng/protocol/pair1/pair.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// Copyright 2020 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_PROTOCOL_PAIR1_PAIR_H -#define NNG_PROTOCOL_PAIR1_PAIR_H - -#ifdef __cplusplus -extern "C" { -#endif - -NNG_DECL int nng_pair1_open(nng_socket *); -NNG_DECL int nng_pair1_open_raw(nng_socket *); -NNG_DECL int nng_pair1_open_poly(nng_socket *); - -#ifndef nng_pair_open -#define nng_pair_open nng_pair1_open -#endif - -#ifndef nng_pair_open_raw -#define nng_pair_open_raw nng_pair1_open_raw -#endif - -#define NNG_OPT_PAIR1_POLY "pair1:polyamorous" -#define NNG_PAIR1_SELF 0x11 -#define NNG_PAIR1_PEER 0x11 -#define NNG_PAIR1_SELF_NAME "pair1" -#define NNG_PAIR1_PEER_NAME "pair1" - -#ifdef __cplusplus -} -#endif - -#endif // NNG_PROTOCOL_PAIR1_PAIR_H diff --git a/nng-prebuilt/tda4/include/nng/protocol/pipeline0/pull.h b/nng-prebuilt/tda4/include/nng/protocol/pipeline0/pull.h deleted file mode 100644 index 1c5d63e..0000000 --- a/nng-prebuilt/tda4/include/nng/protocol/pipeline0/pull.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_PROTOCOL_PIPELINE0_PULL_H -#define NNG_PROTOCOL_PIPELINE0_PULL_H - -#ifdef __cplusplus -extern "C" { -#endif - -NNG_DECL int nng_pull0_open(nng_socket *); -NNG_DECL int nng_pull0_open_raw(nng_socket *); - -#ifndef nng_pull_open -#define nng_pull_open nng_pull0_open -#endif - -#ifndef nng_pull_open_raw -#define nng_pull_open_raw nng_pull0_open_raw -#endif - -#ifdef __cplusplus -} -#endif - -#endif // NNG_PROTOCOL_PIPELINE0_PULL_H diff --git a/nng-prebuilt/tda4/include/nng/protocol/pipeline0/push.h b/nng-prebuilt/tda4/include/nng/protocol/pipeline0/push.h deleted file mode 100644 index a1384e0..0000000 --- a/nng-prebuilt/tda4/include/nng/protocol/pipeline0/push.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_PROTOCOL_PIPELINE0_PUSH_H -#define NNG_PROTOCOL_PIPELINE0_PUSH_H - -#ifdef __cplusplus -extern "C" { -#endif - -NNG_DECL int nng_push0_open(nng_socket *); -NNG_DECL int nng_push0_open_raw(nng_socket *); - -#ifndef nng_push_open -#define nng_push_open nng_push0_open -#endif - -#ifndef nng_push_open_raw -#define nng_push_open_raw nng_push0_open_raw -#endif - -#ifdef __cplusplus -} -#endif - -#endif // NNG_PROTOCOL_PIPELINE0_PUSH_H diff --git a/nng-prebuilt/tda4/include/nng/protocol/pubsub0/pub.h b/nng-prebuilt/tda4/include/nng/protocol/pubsub0/pub.h deleted file mode 100644 index 877f2f1..0000000 --- a/nng-prebuilt/tda4/include/nng/protocol/pubsub0/pub.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_PROTOCOL_PUBSUB0_PUB_H -#define NNG_PROTOCOL_PUBSUB0_PUB_H - -#ifdef __cplusplus -extern "C" { -#endif - -NNG_DECL int nng_pub0_open(nng_socket *); -NNG_DECL int nng_pub0_open_raw(nng_socket *); - -#ifndef nng_pub_open -#define nng_pub_open nng_pub0_open -#endif - -#ifndef nng_pub_open_raw -#define nng_pub_open_raw nng_pub0_open_raw -#endif - -#ifdef __cplusplus -} -#endif - -#endif // NNG_PROTOCOL_PUBSUB0_PUB_H diff --git a/nng-prebuilt/tda4/include/nng/protocol/pubsub0/sub.h b/nng-prebuilt/tda4/include/nng/protocol/pubsub0/sub.h deleted file mode 100644 index 81f50a8..0000000 --- a/nng-prebuilt/tda4/include/nng/protocol/pubsub0/sub.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_PROTOCOL_PUBSUB0_SUB_H -#define NNG_PROTOCOL_PUBSUB0_SUB_H - -#ifdef __cplusplus -extern "C" { -#endif - -NNG_DECL int nng_sub0_open(nng_socket *); - -NNG_DECL int nng_sub0_open_raw(nng_socket *); - -#ifndef nng_sub_open -#define nng_sub_open nng_sub0_open -#endif - -#ifndef nng_sub_open_raw -#define nng_sub_open_raw nng_sub0_open_raw -#endif - -#define NNG_OPT_SUB_SUBSCRIBE "sub:subscribe" -#define NNG_OPT_SUB_UNSUBSCRIBE "sub:unsubscribe" - -#define NNG_OPT_SUB_PREFNEW "sub:prefnew" - -#ifdef __cplusplus -} -#endif - -#endif // NNG_PROTOCOL_PUBSUB0_SUB_H diff --git a/nng-prebuilt/tda4/include/nng/protocol/reqrep0/rep.h b/nng-prebuilt/tda4/include/nng/protocol/reqrep0/rep.h deleted file mode 100644 index 04fe18b..0000000 --- a/nng-prebuilt/tda4/include/nng/protocol/reqrep0/rep.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// Copyright 2020 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_PROTOCOL_REQREP0_REP_H -#define NNG_PROTOCOL_REQREP0_REP_H - -#ifdef __cplusplus -extern "C" { -#endif - -NNG_DECL int nng_rep0_open(nng_socket *); -NNG_DECL int nng_rep0_open_raw(nng_socket *); - -#ifndef nng_rep_open -#define nng_rep_open nng_rep0_open -#endif - -#ifndef nng_rep_open_raw -#define nng_rep_open_raw nng_rep0_open_raw -#endif - -#define NNG_REP0_SELF 0x31 -#define NNG_REP0_PEER 0x30 -#define NNG_REP0_SELF_NAME "rep" -#define NNG_REP0_PEER_NAME "req" - -#ifdef __cplusplus -} -#endif - -#endif // NNG_PROTOCOL_REQREP0_REP_H diff --git a/nng-prebuilt/tda4/include/nng/protocol/reqrep0/req.h b/nng-prebuilt/tda4/include/nng/protocol/reqrep0/req.h deleted file mode 100644 index 3ed8021..0000000 --- a/nng-prebuilt/tda4/include/nng/protocol/reqrep0/req.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// Copyright 2020 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_PROTOCOL_REQREP0_REQ_H -#define NNG_PROTOCOL_REQREP0_REQ_H - -#ifdef __cplusplus -extern "C" { -#endif - -NNG_DECL int nng_req0_open(nng_socket *); -NNG_DECL int nng_req0_open_raw(nng_socket *); - -#ifndef nng_req_open -#define nng_req_open nng_req0_open -#endif -#ifndef nng_req_open_raw -#define nng_req_open_raw nng_req0_open_raw -#endif - -#define NNG_REQ0_SELF 0x30 -#define NNG_REQ0_PEER 0x31 -#define NNG_REQ0_SELF_NAME "req" -#define NNG_REQ0_PEER_NAME "rep" - -#define NNG_OPT_REQ_RESENDTIME "req:resend-time" - -#ifdef __cplusplus -} -#endif - -#endif // NNG_PROTOCOL_REQREP0_REQ_H diff --git a/nng-prebuilt/tda4/include/nng/protocol/survey0/respond.h b/nng-prebuilt/tda4/include/nng/protocol/survey0/respond.h deleted file mode 100644 index d7dab61..0000000 --- a/nng-prebuilt/tda4/include/nng/protocol/survey0/respond.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// Copyright 2020 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_PROTOCOL_SURVEY0_RESPOND_H -#define NNG_PROTOCOL_SURVEY0_RESPOND_H - -#ifdef __cplusplus -extern "C" { -#endif - -NNG_DECL int nng_respondent0_open(nng_socket *); -NNG_DECL int nng_respondent0_open_raw(nng_socket *); - -#ifndef nng_respondent_open -#define nng_respondent_open nng_respondent0_open -#endif - -#ifndef nng_respondent_open_raw -#define nng_respondent_open_raw nng_respondent0_open_raw -#endif - -#define NNG_RESPONDENT0_SELF 0x63 -#define NNG_RESPONDENT0_PEER 0x62 -#define NNG_RESPONDENT0_SELF_NAME "respondent" -#define NNG_RESPONDENT0_PEER_NAME "surveyor" - -#ifdef __cplusplus -} -#endif - -#endif // NNG_PROTOCOL_SURVEY0_RESPOND_H diff --git a/nng-prebuilt/tda4/include/nng/protocol/survey0/survey.h b/nng-prebuilt/tda4/include/nng/protocol/survey0/survey.h deleted file mode 100644 index cea4d58..0000000 --- a/nng-prebuilt/tda4/include/nng/protocol/survey0/survey.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// Copyright 2020 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_PROTOCOL_SURVEY0_SURVEY_H -#define NNG_PROTOCOL_SURVEY0_SURVEY_H - -#ifdef __cplusplus -extern "C" { -#endif - -NNG_DECL int nng_surveyor0_open(nng_socket *); -NNG_DECL int nng_surveyor0_open_raw(nng_socket *); - -#ifndef nng_surveyor_open -#define nng_surveyor_open nng_surveyor0_open -#endif - -#ifndef nng_surveyor_open_raw -#define nng_surveyor_open_raw nng_surveyor0_open_raw -#endif - -#define NNG_SURVEYOR0_SELF 0x62 -#define NNG_SURVEYOR0_PEER 0x63 -#define NNG_SURVEYOR0_SELF_NAME "surveyor" -#define NNG_SURVEYOR0_PEER_NAME "respondent" - -#define NNG_OPT_SURVEYOR_SURVEYTIME "surveyor:survey-time" - -#ifdef __cplusplus -} -#endif - -#endif // NNG_PROTOCOL_SURVEY0_SURVEY_H diff --git a/nng-prebuilt/tda4/include/nng/supplemental/http/http.h b/nng-prebuilt/tda4/include/nng/supplemental/http/http.h deleted file mode 100644 index ff8616c..0000000 --- a/nng-prebuilt/tda4/include/nng/supplemental/http/http.h +++ /dev/null @@ -1,539 +0,0 @@ -// -// Copyright 2020 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// Copyright 2020 Dirac Research -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_SUPPLEMENTAL_HTTP_HTTP_H -#define NNG_SUPPLEMENTAL_HTTP_HTTP_H - -// HTTP API. Only present if HTTP support compiled into the library. -// Functions will return NNG_ENOTSUP (or NULL or 0 as appropriate) -// if the library lacks support for HTTP. - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -struct nng_tls_config; - -// HTTP status codes. This list is not exhaustive. -enum nng_http_status { - NNG_HTTP_STATUS_CONTINUE = 100, - NNG_HTTP_STATUS_SWITCHING = 101, - NNG_HTTP_STATUS_PROCESSING = 102, - NNG_HTTP_STATUS_OK = 200, - NNG_HTTP_STATUS_CREATED = 201, - NNG_HTTP_STATUS_ACCEPTED = 202, - NNG_HTTP_STATUS_NOT_AUTHORITATIVE = 203, - NNG_HTTP_STATUS_NO_CONTENT = 204, - NNG_HTTP_STATUS_RESET_CONTENT = 205, - NNG_HTTP_STATUS_PARTIAL_CONTENT = 206, - NNG_HTTP_STATUS_MULTI_STATUS = 207, - NNG_HTTP_STATUS_ALREADY_REPORTED = 208, - NNG_HTTP_STATUS_IM_USED = 226, - NNG_HTTP_STATUS_MULTIPLE_CHOICES = 300, - NNG_HTTP_STATUS_STATUS_MOVED_PERMANENTLY = 301, - NNG_HTTP_STATUS_FOUND = 302, - NNG_HTTP_STATUS_SEE_OTHER = 303, - NNG_HTTP_STATUS_NOT_MODIFIED = 304, - NNG_HTTP_STATUS_USE_PROXY = 305, - NNG_HTTP_STATUS_TEMPORARY_REDIRECT = 307, - NNG_HTTP_STATUS_PERMANENT_REDIRECT = 308, - NNG_HTTP_STATUS_BAD_REQUEST = 400, - NNG_HTTP_STATUS_UNAUTHORIZED = 401, - NNG_HTTP_STATUS_PAYMENT_REQUIRED = 402, - NNG_HTTP_STATUS_FORBIDDEN = 403, - NNG_HTTP_STATUS_NOT_FOUND = 404, - NNG_HTTP_STATUS_METHOD_NOT_ALLOWED = 405, - NNG_HTTP_STATUS_NOT_ACCEPTABLE = 406, - NNG_HTTP_STATUS_PROXY_AUTH_REQUIRED = 407, - NNG_HTTP_STATUS_REQUEST_TIMEOUT = 408, - NNG_HTTP_STATUS_CONFLICT = 409, - NNG_HTTP_STATUS_GONE = 410, - NNG_HTTP_STATUS_LENGTH_REQUIRED = 411, - NNG_HTTP_STATUS_PRECONDITION_FAILED = 412, - NNG_HTTP_STATUS_PAYLOAD_TOO_LARGE = 413, - NNG_HTTP_STATUS_ENTITY_TOO_LONG = 414, - NNG_HTTP_STATUS_UNSUPPORTED_MEDIA_TYPE = 415, - NNG_HTTP_STATUS_RANGE_NOT_SATISFIABLE = 416, - NNG_HTTP_STATUS_EXPECTATION_FAILED = 417, - NNG_HTTP_STATUS_TEAPOT = 418, - NNG_HTTP_STATUS_UNPROCESSABLE_ENTITY = 422, - NNG_HTTP_STATUS_LOCKED = 423, - NNG_HTTP_STATUS_FAILED_DEPENDENCY = 424, - NNG_HTTP_STATUS_UPGRADE_REQUIRED = 426, - NNG_HTTP_STATUS_PRECONDITION_REQUIRED = 428, - NNG_HTTP_STATUS_TOO_MANY_REQUESTS = 429, - NNG_HTTP_STATUS_HEADERS_TOO_LARGE = 431, - NNG_HTTP_STATUS_UNAVAIL_LEGAL_REASONS = 451, - NNG_HTTP_STATUS_INTERNAL_SERVER_ERROR = 500, - NNG_HTTP_STATUS_NOT_IMPLEMENTED = 501, - NNG_HTTP_STATUS_BAD_GATEWAY = 502, - NNG_HTTP_STATUS_SERVICE_UNAVAILABLE = 503, - NNG_HTTP_STATUS_GATEWAY_TIMEOUT = 504, - NNG_HTTP_STATUS_HTTP_VERSION_NOT_SUPP = 505, - NNG_HTTP_STATUS_VARIANT_ALSO_NEGOTIATES = 506, - NNG_HTTP_STATUS_INSUFFICIENT_STORAGE = 507, - NNG_HTTP_STATUS_LOOP_DETECTED = 508, - NNG_HTTP_STATUS_NOT_EXTENDED = 510, - NNG_HTTP_STATUS_NETWORK_AUTH_REQUIRED = 511, -}; - -// nng_http_req represents an HTTP request. -typedef struct nng_http_req nng_http_req; - -// nng_http_req_alloc creates a vanilla HTTP request object. The object is -// initialized with the given URL object for an HTTP/1.1 GET request by -// default. It also adds the Host: header required for HTTP/1.1. If the -// url is NULL, then the uri and Host: header are uninitialized, and will -// need to be set explicitly. -NNG_DECL int nng_http_req_alloc(nng_http_req **, const nng_url *); - -// nng_http_req_free frees an HTTP request object. -NNG_DECL void nng_http_req_free(nng_http_req *); - -// nng_http_req_get_method returns the method. -NNG_DECL const char *nng_http_req_get_method(nng_http_req *); - -// nng_http_req_get_version returns the version, usually HTTP/1.1. -NNG_DECL const char *nng_http_req_get_version(nng_http_req *); - -// nng_http_req_get_uri returns the "abs-uri", which is URL without -// the scheme, host, or port. -NNG_DECL const char *nng_http_req_get_uri(nng_http_req *); - -// nng_http_req_set_header sets an HTTP header, replacing any previous value -// that might have been present. -NNG_DECL int nng_http_req_set_header( - nng_http_req *, const char *, const char *); - -// nng_http_req_add_header adds an HTTP header, without disrupting any other -// with the same name that might have been present. -NNG_DECL int nng_http_req_add_header( - nng_http_req *, const char *, const char *); - -// nng_http_req_del_header deletes all occurrences of a named header. -NNG_DECL int nng_http_req_del_header(nng_http_req *, const char *); - -// nng_http_req_get_header looks up a header with the named, returns NULL -// if not found. -NNG_DECL const char *nng_http_req_get_header(nng_http_req *, const char *); - -// nng_http_req_set_method is used to change the method of a request. -// The method should be an upper case HTTP method, like POST, or DELETE. -// Null sets the default ("GET"). -NNG_DECL int nng_http_req_set_method(nng_http_req *, const char *); - -// nng_http_req_set_version is used to change the version of a request. -// Normally the version is "HTTP/1.1". Note that the framework does -// not support HTTP/2 at all. Null sets the default ("HTTP/1.1"). -NNG_DECL int nng_http_req_set_version(nng_http_req *, const char *); - -// nng_http_req_set_uri is used to change the URI of a request. This -// should be an "abs-uri", that is a path, plus query and fragment if -// needed. The scheme, host, and port don't belong here. The URI should -// start with a leading '/' per HTTP. -NNG_DECL int nng_http_req_set_uri(nng_http_req *, const char *); - -// nng_http_req_set_data adds entity data to the request. The -// data object must persist (so only really useful for static data). -// The content-length header is updated as well, but the caller should -// probably set the content-type header. -NNG_DECL int nng_http_req_set_data(nng_http_req *, const void *, size_t); - -// nng_http_req_copy_data adds entity data to the response. A private -// copy of the data is made (will be freed with the request). -// The content-length header is updated as well, but the caller should -// probably set the content-type header. -NNG_DECL int nng_http_req_copy_data(nng_http_req *, const void *, size_t); - -// nng_http_req_get_data gets the data for the response. -NNG_DECL void nng_http_req_get_data(nng_http_req *, void **, size_t *); - -// nng_http_res represents an HTTP response. -typedef struct nng_http_res nng_http_res; - -// nng_http_res_alloc creates a vanilla HTTP response object. The object is -// initialized for an HTTP/1.1 200 OK response by default. -NNG_DECL int nng_http_res_alloc(nng_http_res **); - -// nng_http_res_alloc_error creates an error HTTP response object. The object -// is initialized for an HTTP/1.1 response, and contains an associated -// generic HTML error page. -NNG_DECL int nng_http_res_alloc_error(nng_http_res **, uint16_t); - -// nng_http_res_free frees an HTTP response object. -NNG_DECL void nng_http_res_free(nng_http_res *); - -// nng_http_res_get_status returns the HTTP status code from the server. -NNG_DECL uint16_t nng_http_res_get_status(nng_http_res *); - -// nng_http_res_set_status sets the HTTP status code. -NNG_DECL int nng_http_res_set_status(nng_http_res *, uint16_t); - -// nng_http_res_get_reason returns the human readable status message -// that the server responds (or responded) with. -NNG_DECL const char *nng_http_res_get_reason(nng_http_res *); - -// nng_http_res_set_reason sets the human readable status message. -// NULL means that a default reason is used based on the status code. -NNG_DECL int nng_http_res_set_reason(nng_http_res *, const char *); - -// nng_http_res_set_header sets an HTTP header, replacing any previous value -// that might have been present. -NNG_DECL int nng_http_res_set_header( - nng_http_res *, const char *, const char *); - -// nng_http_res_add_header adds an HTTP header, without disrupting any other -// with the same name that might have been present. -NNG_DECL int nng_http_res_add_header( - nng_http_res *, const char *, const char *); - -// nng_http_res_del_header deletes all occurrences of a named header. -NNG_DECL int nng_http_res_del_header(nng_http_res *, const char *); - -// nng_http_res_get_header looks up a header with the named, returns NULL -// if not found. -NNG_DECL const char *nng_http_res_get_header(nng_http_res *, const char *); - -// nng_http_res_set_version is used to change the version of a response. -// Normally the version is "HTTP/1.1". Note that the framework does -// not support HTTP/2 at all. NULL sets the default ("HTTP/1.1"). -NNG_DECL int nng_http_res_set_version(nng_http_res *, const char *); - -// nng_http_res_get_version returns the version, usually HTTP/1.1. -NNG_DECL const char *nng_http_res_get_version(nng_http_res *); - -// nng_http_res_get_data gets the data for the response. -NNG_DECL void nng_http_res_get_data(nng_http_res *, void **, size_t *); - -// nng_http_res_set_data adds entity data to the response. The -// data object must persist (so only really useful for static data). -// The content-length header is updated as well, but the caller should -// probably set the content-type header. -NNG_DECL int nng_http_res_set_data(nng_http_res *, const void *, size_t); - -// nng_http_res_copy_data adds entity data to the response. A private -// copy of the data is made (will be freed with the request). -// The content-length header is updated as well, but the caller should -// probably set the content-type header. -NNG_DECL int nng_http_res_copy_data(nng_http_res *, const void *, size_t); - -// An nng_http_conn represents an underlying "connection". It may be -// a TCP channel, or a TLS channel, but the main thing is that this is -// normally only used for exchanging HTTP requests and responses. -typedef struct nng_http_conn nng_http_conn; - -// nng_http_conn_close closes the underlying channel. Applications should -// not use this channel after this operation is performed. -NNG_DECL void nng_http_conn_close(nng_http_conn *); - -// nng_http_conn_read attempts to read data from the connection. This -// completes as soon as at least one byte is read; it does not wait -// for the entire aio to be filled. -NNG_DECL void nng_http_conn_read(nng_http_conn *, nng_aio *); - -// nng_http_conn_read_all is like nng_http_conn_read, but it does not -// finish until either all the requested data is read, or an error occurs. -NNG_DECL void nng_http_conn_read_all(nng_http_conn *, nng_aio *); - -// nng_http_conn_write attempts to write data, but it can write less -// than the amount requested. (It completes as soon as at least one -// byte is written.) -NNG_DECL void nng_http_conn_write(nng_http_conn *, nng_aio *); - -// nng_http_conn_write_all is like nng_http_conn_write, but it does not -// finish until either all the requested data is written, or an error occurs. -NNG_DECL void nng_http_conn_write_all(nng_http_conn *, nng_aio *); - -// nng_http_conn_write_req writes the entire request. It will also write any -// data that has been attached. -NNG_DECL void nng_http_conn_write_req( - nng_http_conn *, nng_http_req *, nng_aio *); - -// nng_http_conn_write_res writes the entire response. It will also write any -// data that has been attached. -NNG_DECL void nng_http_conn_write_res( - nng_http_conn *, nng_http_res *, nng_aio *); - -// nng_http_conn_read_req reads an entire request, EXCEPT for any entity -// data. The caller is responsible for processing the headers in the request -// and reading any submitted entity data itself. -NNG_DECL void nng_http_conn_read_req( - nng_http_conn *, nng_http_req *, nng_aio *); - -// nng_http_conn_read_res reads an entire response, EXCEPT for any entity -// data. The caller is responsible for processing the headers in the response -// and reading any submitted entity data itself. -NNG_DECL void nng_http_conn_read_res( - nng_http_conn *, nng_http_res *, nng_aio *); - -// nng_http_req_reset resets the request to an initially allocated state. -NNG_DECL void nng_http_req_reset(nng_http_req *); - -// nng_http_res_reset resets the response to an initially allocated state. -NNG_DECL void nng_http_res_reset(nng_http_res *); - -// nng_http_handler is a handler used on the server side to handle HTTP -// requests coming into a specific URL. -typedef struct nng_http_handler nng_http_handler; - -// nng_http_handler_alloc creates a server handler object, for the supplied -// absolute URI (path only) with the callback. By default the handler -// is assumed to handle only GET requests (and implictly HEAD requests -// as well.) -// -// Note that methods which modify a handler cannot be called while the handler -// is registered with the server, and that a handler can only be registered -// once per server. -// -// The callback function will receive the following arguments (via -// nng_aio_get_input(): nng_http_request *, nng_http_handler *, and -// nng_http_conn *. The first is a request object, for convenience. -// The second is the handler, from which the callback can obtain any other -// data it has set. The final is the http connection, which can be used -// to hijack the session. -// -// Upon completion, the handler should store an nng_http_res * as the -// first output using nng_aio_set_output. If it does not do so, or supplies -// NULL, then it must send a response itself. -// -// The callback should complete with a result of 0 in most circumstances. -// If it completes with an error, then the connection is terminated, after -// possibly sending a 500 error response to the client. -NNG_DECL int nng_http_handler_alloc( - nng_http_handler **, const char *, void (*)(nng_aio *)); - -// nng_http_handler_free frees the handler. This actually just drops a -// reference count on the handler, as it may be in use by an existing -// server. The server will also call this when it is destroyed. -NNG_DECL void nng_http_handler_free(nng_http_handler *); - -// nng_http_handler_alloc_file creates a "file" based handler, that -// serves up static content from the given file path. The content-type -// supplied is determined from the file name using a simple built-in map. -NNG_DECL int nng_http_handler_alloc_file( - nng_http_handler **, const char *, const char *); - -// nng_http_handler_alloc_static creates a static-content handler. -// The last argument is the content-type, which may be NULL (in which case -// "application/octet-stream" is assumed.) -NNG_DECL int nng_http_handler_alloc_static( - nng_http_handler **, const char *, const void *, size_t, const char *); - -// nng_http_handler_alloc_redirect creates an HTTP redirect handler. -// The status is given, along with the new URL. If the status is 0, -// then 301 will be used instead. -NNG_DECL int nng_http_handler_alloc_redirect( - nng_http_handler **, const char *, uint16_t, const char *); - -// nng_http_handler_alloc_file creates a "directory" based handler, that -// serves up static content from the given directory tree. Directories -// that contain an index.html or index.htm file use that file for the -// directory content, otherwise a suitable error page is returned (the server -// does not generate index pages automatically.) The content-type for -// files is determined from the file name using a simple built-in map. -NNG_DECL int nng_http_handler_alloc_directory( - nng_http_handler **, const char *, const char *); - -// nng_http_handler_set_method sets the method that the handler will be -// called for. By default this is GET. If NULL is supplied for the -// method, then the handler is executed regardless of method, and must -// inspect the method itself. -NNG_DECL int nng_http_handler_set_method(nng_http_handler *, const char *); - -// nng_http_handler_set_host sets the Host: that the handler will be -// called for (to allow for virtual hosts). If the value is NULL (the -// default, then the Host: header is not considered when matching the -// handler.) Note that the Host: header must match *exactly* (except -// that case is not considered.) -NNG_DECL int nng_http_handler_set_host(nng_http_handler *, const char *); - -// nng_http_handler_collect_body is used to indicate the server should -// check for, and process, data sent by the client, which will be attached -// to the request. If this is false, then the handler will need to check -// for and process any content data. By default the server will accept -// up to 1MB. If the client attempts to send more data than requested, -// then a 400 Bad Request will be sent back to the client. To set an -// unlimited value, use (size_t)-1. To preclude the client from sending -// *any* data, use 0. (The static and file handlers use 0 by default.) -NNG_DECL int nng_http_handler_collect_body(nng_http_handler *, bool, size_t); - -// nng_http_handler_set_tree indicates that the handler is being registered -// for a hierarchical tree, rather than just a single path, so it will be -// called for all child paths supplied. By default the handler is only -// called for an exact path match. -NNG_DECL int nng_http_handler_set_tree(nng_http_handler *); - -// nng_http_handler_set_tree_exclusive indicates that the handler is being -// registered for a heirarchical tree *exclusively*, rather than just a single -// path, so it will be called for all child paths supplied. By default the -// handler is only called for an exact path match. Exclusive means that any -// other handler on a conflicting path will induce an address conflict error -// when added to a server. -NNG_DECL int nng_http_handler_set_tree_exclusive(nng_http_handler *); - -// nng_http_handler_set_data is used to store additional data, along with -// a possible clean up routine. (The clean up is a custom de-allocator and -// will be called with the supplied data as an argument, when the handler -// is being de-allocated.) -NNG_DECL int nng_http_handler_set_data( - nng_http_handler *, void *, void (*)(void *)); - -// nng_http_handler_get_data returns the data that was previously stored. -NNG_DECL void *nng_http_handler_get_data(nng_http_handler *); - -// nng_http_server is a handle to an HTTP server instance. Servers -// only serve a single port / address at this time. - -typedef struct nng_http_server nng_http_server; - -// nng_http_server_hold gets a server structure, using the address determined -// from the URL. If a server already exists, then a hold is placed on it, and -// that instance is returned. If no such server exists, then a new instance -// is created. -NNG_DECL int nng_http_server_hold(nng_http_server **, const nng_url *); - -// nng_http_server_release releases the hold on the server. If this is the -// last instance of the server, then it is shutdown and resources are freed. -NNG_DECL void nng_http_server_release(nng_http_server *); - -// nng_http_server_start starts the server handling HTTP. Once this is -// called, it will not be possible to change certain parameters (such as -// any TLS configuration). -NNG_DECL int nng_http_server_start(nng_http_server *); - -// nng_http_server_stop stops the server. No new client connections are -// accepted after this returns. Once a server is stopped fully, the -// instance will no longer be returned by nng_http_server_hold, as the -// server may not be reused. -NNG_DECL void nng_http_server_stop(nng_http_server *); - -// nng_http_server_add_handler registers a handler on the server. -// This function will return NNG_EADDRINUSE if a conflicting handler -// is already registered (i.e. a handler with the same value for Host, -// Method, and URL.) -NNG_DECL int nng_http_server_add_handler( - nng_http_server *, nng_http_handler *); - -// nni_http_del_handler removes the given handler. The caller is -// responsible for finalizing it afterwards. If the handler was not found -// (not registered), NNG_ENOENT is returned. In this case it is unsafe -// to make assumptions about the validity of the handler. -NNG_DECL int nng_http_server_del_handler( - nng_http_server *, nng_http_handler *); - -// nng_http_server_set_tls adds a TLS configuration to the server, -// and enables the use of it. This returns NNG_EBUSY if the server is -// already started. This wipes out the entire TLS configuration on the -// server client, so the caller must have configured it reasonably. -// This API is not recommended unless the caller needs complete control -// over the TLS configuration. -NNG_DECL int nng_http_server_set_tls( - nng_http_server *, struct nng_tls_config *); - -// nng_http_server_get_tls obtains the TLS configuration if one is present, -// or returns NNG_EINVAL. The TLS configuration is invalidated if the -// nng_http_server_set_tls function is called, so be careful. -NNG_DECL int nng_http_server_get_tls( - nng_http_server *, struct nng_tls_config **); - -// nng_http_server_get_addr obtains the address with which the server was -// initialized or returns NNG_EINVAL. Useful for instance when the port has -// been automatically assigned. -NNG_DECL int nng_http_server_get_addr(nng_http_server *, nng_sockaddr *); - -// nng_http_server_set_error_page sets a custom error page (HTML) content -// to be sent for the given error code. This is used when the error is -// generated internally by the framework, or when the application returns -// the response back to the server via the handler's aio, and the response -// was allocated with nng_http_res_alloc_error. If the response was not -// allocated this way, or the application writes the response itself instead -// of letting the server do so, then this setting will be ignored. -NNG_DECL int nng_http_server_set_error_page( - nng_http_server *, uint16_t, const char *); - -// nng_http_server_set_error_file works like nng_http_server_error_page, -// except that the content is loaded from the named file path. The contents -// are loaded at the time this function is called, so this function should be -// called anytime the contents of the named file have changed. -NNG_DECL int nng_http_server_set_error_file( - nng_http_server *, uint16_t, const char *); - -// nng_http_server_res_error takes replaces the body of the response with -// a custom error page previously set for the server, using the status -// of the response. The response must have the status set first using -// nng_http_res_set_status or implicitly via nng_http_res_alloc_error. -NNG_DECL int nng_http_server_res_error(nng_http_server *, nng_http_res *); - -// nng_http_hijack is intended to be called by a handler that wishes to -// take over the processing of the HTTP session -- usually to change protocols -// (such as in the case of websocket). The caller is responsible for the -// final disposal of the associated nng_http_conn. Also, this completely -// disassociates the http session from the server, so the server may be -// stopped or destroyed without affecting the hijacked session. Note also -// that the hijacker will need to issue any HTTP reply itself. Finally, -// when a session is hijacked, the caller is also responsible for disposing -// of the request structure. (Some hijackers may keep the request for -// further processing.) - -NNG_DECL int nng_http_hijack(nng_http_conn *); - -// nng_http_client represents a "client" object. Clients can be used -// to create HTTP connections. At present, connections are not cached -// or reused, but that could change in the future. -typedef struct nng_http_client nng_http_client; - -// nng_http_client_alloc allocates a client object, associated with -// the given URL. -NNG_DECL int nng_http_client_alloc(nng_http_client **, const nng_url *); - -// nng_http_client_free frees the client. Connections created by the -// the client are not necessarily closed. -NNG_DECL void nng_http_client_free(nng_http_client *); - -// nng_http_client_set_tls sets the TLS configuration. This wipes out -// the entire TLS configuration on the client, so the caller must have -// configured it reasonably. This API is not recommended unless the -// caller needs complete control over the TLS configuration. -NNG_DECL int nng_http_client_set_tls( - nng_http_client *, struct nng_tls_config *); - -// nng_http_client_get_tls obtains the TLS configuration if one is present, -// or returns NNG_EINVAL. The supplied TLS configuration object may -// be invalidated by any future calls to nni_http_client_set_tls. -NNG_DECL int nng_http_client_get_tls( - nng_http_client *, struct nng_tls_config **); - -// nng_http_client_connect establishes a new connection with the server -// named in the URL used when the client was created. Once the connection -// is established, the associated nng_http_conn object pointer is returned -// in the first (index 0) output for the aio. -NNG_DECL void nng_http_client_connect(nng_http_client *, nng_aio *); - -// nng_http_conn_transact is used to perform a round-trip exchange (i.e. a -// single HTTP transaction). It will not automatically close the connection, -// unless some kind of significant error occurs. The caller should close -// the connection if the aio does not complete successfully. -NNG_DECL void nng_http_conn_transact( - nng_http_conn *, nng_http_req *, nng_http_res *, nng_aio *); - -// nng_http_client_transact is used to execute a single transaction to a -// server. The connection is opened, and will be closed when the transaction is -// complete. -NNG_DECL void nng_http_client_transact( - nng_http_client *, nng_http_req *, nng_http_res *, nng_aio *); - -#ifdef __cplusplus -} -#endif - -#endif // NNG_H diff --git a/nng-prebuilt/tda4/include/nng/supplemental/tls/engine.h b/nng-prebuilt/tda4/include/nng/supplemental/tls/engine.h deleted file mode 100644 index 81385fb..0000000 --- a/nng-prebuilt/tda4/include/nng/supplemental/tls/engine.h +++ /dev/null @@ -1,207 +0,0 @@ -// -// Copyright 2020 Staysail Systems, Inc. -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -// This file is used to enable external TLS "engines", so -// that third party TLS libraries can be plugged in - -#ifndef NNG_SUPPLEMENTAL_TLS_ENGINE_H -#define NNG_SUPPLEMENTAL_TLS_ENGINE_H - -#include - -// Locking theory statement for TLS engines. The engine is assumed -// operate only from the context of threads called by the common -// framework. That is to say, the callbacks made by the engine -// should always be on a thread that has context from the framework -// calling into the engine. This means that the lower level send -// and receive functions can assume that they have lock ownership -// inherited on the stack. - -// nng_tls_engine_conn represents the engine-specific private -// state for a TLS connection. It is provided here for type -// safety. Engine implementations should provide the structure -// definition locally. -typedef struct nng_tls_engine_conn nng_tls_engine_conn; - -// nng_tls_engine_config represents the engine-specific private -// state for the TLS configuration. It is provided here for type -// safety. Engine implementations should provide the structure -// definition locally. -typedef struct nng_tls_engine_config nng_tls_engine_config; - -typedef struct nng_tls_engine_conn_ops_s { - // size is the size of the engine's per-connection state. - // The framework will allocate this on behalf of the engine. - // Typically this will be sizeof (struct nng_tls_engine_conn). - size_t size; - - // init is used to initialize a connection object. - // The passed in connection state will be aligned naturally, - // and zeroed. On success this returns 0, else an NNG error code. - int (*init)(nng_tls_engine_conn *, void *, nng_tls_engine_config *); - - // fini destroys a connection object. This will - // be called only when no other external use of the connection - // object exists, and only on fully initialed connection objects. - void (*fini)(nng_tls_engine_conn *); - - // close closes the connection object, but should not - // deallocate any memory. It may also issue a TLS close-notify. - void (*close)(nng_tls_engine_conn *); - - // handshake attempts to complete the SSL handshake phase. - // It returns zero on success, or an error if one occurred. - // The value NNG_EAGAIN should be returned if underlying I/O - // is required to be completed first. The framework will - // ensure that the handshake completes before sending any data - // down. - int (*handshake)(nng_tls_engine_conn *); - - // recv attempts to read data (decrypted) from the connection. - // It returns 0 on success, otherwise an error. The implementation - // should return NNG_EAGAIN if I/O to the underlying stream is - // required to complete the operation. On success, the count - // is updated to reflect the number of bytes actually received. - int (*recv)(nng_tls_engine_conn *, uint8_t *, size_t *); - - // send attempts to write data to the underlying connection. - // It returns zero on success, otherwise an error. The implementation - // should return NNG_EAGAIN if I/O to the underlying stream is - // required to complete the operation. On success, the count - // is updated to reflect the number of bytes actually sent. - int (*send)(nng_tls_engine_conn *, const uint8_t *, size_t *); - - // verified returns true if the connection is fully - // TLS verified, false otherwise. - bool (*verified)(nng_tls_engine_conn *); -} nng_tls_engine_conn_ops; - -typedef struct nng_tls_engine_config_ops_s { - // size is the size of the engine's configuration object. - // The framework will allocate this on behalf of the engine. - // Typically this will be sizeof (struct nng_tls_engine_config). - size_t size; - - // init prepares the configuration object object. - // The mode indicates whether the object should be - // initialized for use as a TLS server or client. - // The config passed in will be aligned on a 64-bit boundary, - // and will be initialized to zero. On success this returns - // 0, else an NNG error code. - int (*init)(nng_tls_engine_config *, nng_tls_mode); - - // fini is used to tear down the configuration object. - // This will only be called on objects that have been properly - // initialized with nte_config_init. - void (*fini)(nng_tls_engine_config *); - - // server is used to set the server name. This can be used in SNI, - // and will also be used on the client to validate the identity. - // If this is not set, then no verification will be performed. - int (*server)(nng_tls_engine_config *, const char *); - - // auth is used to configure the authentication mode. Values: - // NNG_AUTH_MODE_NONE - // No validation of the peer is performed. Public facing - // servers often use this. - // NNG_AUTH_MODE_OPTIONAL - // The peer's identity is validated if a certificate is presented. - // This is typically useful on servers. - // NNG_AUTH_MODE_REQUIRED - // The peer's certificate must be present and is verified. - // This is standard for the client, and on servers it is used - // when client (mutual) authentication is needed. - int (*auth)(nng_tls_engine_config *, nng_tls_auth_mode); - - // ca_chain sets the configuration authorities that will be - // used to validate peers. An optional CRL is supplied as well. - // Both values are C strings (NUL terminated) containing - // PEM data. There may be multiple PEM blocks. The - // CRL may be NULL if not needed. - int (*ca_chain)(nng_tls_engine_config *, const char *, const char *); - - // own_cert configures our identity -- the certificate containing - // our public key, our private key (which might be encrypted), and - // potentially a password used to decrypt the private key. - // All of these are C strings. The cert may actually be a chain - // which will be presented to our peer. This function may be - // called multiple times to register different keys with different - // parameters on a server. (For example, once for RSA parameters, - // and again later with EC parameters.) The certificate and the - // private key may be presented in the same file. The implementation - // is responsible for parsing out the relevant data. If the password - // is NULL, then the key file should be unencrypted. The supplied - // password may be ignored if the key is not encrypted. Not all - // engine implementations need support encryption of the key. - int (*own_cert)( - nng_tls_engine_config *, const char *, const char *, const char *); - - // version configures the minimum and maximum TLS versions. The - // engine should default to supporting TLS1.0 through 1.2, and - // optionally 1.3 if it can. The engine should restrict the - // the requested range to what it can support -- if no version - // within the range is supported (such as if NNG_TLS_1_3 is - // specified for both min and max, and the engine lacks support - // for v1.3, then NNG_ENOTSUP should be returned. - int (*version)( - nng_tls_engine_config *, nng_tls_version, nng_tls_version); -} nng_tls_engine_config_ops; - -typedef enum nng_tls_engine_version_e { - NNG_TLS_ENGINE_V0 = 0, - NNG_TLS_ENGINE_V1 = 1, - NNG_TLS_ENGINE_VERSION = NNG_TLS_ENGINE_V1, -} nng_tls_engine_version; - -typedef struct nng_tls_engine_s { - // _version is the engine version. This for now must - // be NNG_TLS_ENGINE_VERSION. If the version does not match - // then registration of the engine will fail. - nng_tls_engine_version version; - - // config_ops is the operations for TLS configuration objects. - nng_tls_engine_config_ops *config_ops; - - // conn_ops is the operations for TLS connections (stream-oriented). - nng_tls_engine_conn_ops *conn_ops; - - // name contains the name of the engine, for example "wolfSSL". - // It is acceptable to append a version number as well. - const char *name; - - // description contains a human readable description. This can - // supply information about the backing library, for example - // "mbed TLS v2.7" - const char *description; - - // fips_mode is true if the engine is in FIPS mode. - // It is expected that this will be enabled either at compile - // time, or via environment variables at engine initialization. - // FIPS mode cannot be changed once the engine is registered. - bool fips_mode; -} nng_tls_engine; - -NNG_DECL int nng_tls_engine_register(const nng_tls_engine *); - -// nng_tls_engine_send is called by the engine to send data over the -// underlying connection. It returns zero on success, NNG_EAGAIN if -// the operation can't be completed yet (the transport is busy and cannot -// accept more data yet), or some other error. On success the count is -// updated with the number of bytes actually sent. The first argument -// is the context structure passed in when starting the engine. -NNG_DECL int nng_tls_engine_send(void *, const uint8_t *, size_t *); - -// nng_tls_engine_recv is called byu the engine to receive data over -// the underlying connection. It returns zero on success, NNG_EAGAIN -// if the operation can't be completed yet (there is no data available -// for reading), or some other error. On success the count is updated -// with the number of bytes actually received. -NNG_DECL int nng_tls_engine_recv(void *, uint8_t *, size_t *); - -#endif // NNG_SUPPLEMENTAL_TLS_ENGINE_H diff --git a/nng-prebuilt/tda4/include/nng/supplemental/tls/tls.h b/nng-prebuilt/tda4/include/nng/supplemental/tls/tls.h deleted file mode 100644 index e547f8e..0000000 --- a/nng-prebuilt/tda4/include/nng/supplemental/tls/tls.h +++ /dev/null @@ -1,142 +0,0 @@ -// -// Copyright 2020 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_SUPPLEMENTAL_TLS_TLS_H -#define NNG_SUPPLEMENTAL_TLS_TLS_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -// Note that TLS functions may be stubbed out if TLS is not enabled in -// the build. - -// For some transports, we need TLS configuration, including certificates -// and so forth. A TLS configuration cannot be changed once it is in use. -typedef struct nng_tls_config nng_tls_config; - -typedef enum nng_tls_mode { - NNG_TLS_MODE_CLIENT = 0, - NNG_TLS_MODE_SERVER = 1, -} nng_tls_mode; - -typedef enum nng_tls_auth_mode { - NNG_TLS_AUTH_MODE_NONE = 0, // No verification is performed - NNG_TLS_AUTH_MODE_OPTIONAL = 1, // Verify cert if presented - NNG_TLS_AUTH_MODE_REQUIRED = 2, // Verify cert, close if invalid -} nng_tls_auth_mode; - -// TLS version numbers. We encode the major number and minor number -// as separate byte fields. No support for SSL 3.0 or earlier -- older -// versions are known to be insecure and should not be used. -// When possible applications should restrict themselves to TLS 1.2 or better. -typedef enum nng_tls_version { - NNG_TLS_1_0 = 0x301, - NNG_TLS_1_1 = 0x302, - NNG_TLS_1_2 = 0x303, - NNG_TLS_1_3 = 0x304 -} nng_tls_version; - -// nng_tls_config_alloc creates a TLS configuration using -// reasonable defaults. This configuration can be shared -// with multiple pipes or services/servers. -NNG_DECL int nng_tls_config_alloc(nng_tls_config **, nng_tls_mode); - -// nng_tls_config_hold increments the reference count on the TLS -// configuration object. The hold can be dropped by calling -// nng_tls_config_free later. -NNG_DECL void nng_tls_config_hold(nng_tls_config *); - -// nng_tls_config_free drops the reference count on the TLS -// configuration object, and if zero, deallocates it. -NNG_DECL void nng_tls_config_free(nng_tls_config *); - -// nng_tls_config_server_name sets the server name. This is -// called by clients to set the name that the server supplied -// certificate should be matched against. This can also cause -// the SNI to be sent to the server to tell it which cert to -// use if it supports more than one. -NNG_DECL int nng_tls_config_server_name(nng_tls_config *, const char *); - -// nng_tls_config_ca_cert configures one or more CAs used for validation -// of peer certificates. Multiple CAs (and their chains) may be configured -// by either calling this multiple times, or by specifying a list of -// certificates as concatenated data. The final argument is an optional CRL -// (revocation list) for the CA, also in PEM. Both PEM strings are ASCIIZ -// format (except that the CRL may be NULL). -NNG_DECL int nng_tls_config_ca_chain( - nng_tls_config *, const char *, const char *); - -// nng_tls_config_own_cert is used to load our own certificate and public -// key. For servers, this may be called more than once to configure multiple -// different keys, for example with different algorithms depending on what -// the peer supports. On the client, only a single option is available. -// The first two arguments are the cert (or validation chain) and the -// key as PEM format ASCIIZ strings. The final argument is an optional -// password and may be NULL. -NNG_DECL int nng_tls_config_own_cert( - nng_tls_config *, const char *, const char *, const char *); - -// nng_tls_config_key is used to pass our own private key. -NNG_DECL int nng_tls_config_key(nng_tls_config *, const uint8_t *, size_t); - -// nng_tls_config_pass is used to pass a password used to decrypt -// private keys that are encrypted. -NNG_DECL int nng_tls_config_pass(nng_tls_config *, const char *); - -// nng_tls_config_auth_mode is used to configure the authentication mode use. -// The default is that servers have this off (i.e. no client authentication) -// and clients have it on (they verify the server), which matches typical -// practice. -NNG_DECL int nng_tls_config_auth_mode(nng_tls_config *, nng_tls_auth_mode); - -// nng_tls_config_ca_file is used to pass a CA chain and optional CRL -// via the filesystem. If CRL data is present, it must be contained -// in the file, along with the CA certificate data. The format is PEM. -// The path name must be a legal file name. -NNG_DECL int nng_tls_config_ca_file(nng_tls_config *, const char *); - -// nng_tls_config_cert_key_file is used to pass our own certificate and -// private key data via the filesystem. Both the key and certificate -// must be present as PEM blocks in the same file. A password is used to -// decrypt the private key if it is encrypted and the password supplied is not -// NULL. This may be called multiple times on servers, but only once on a -// client. (Servers can support multiple different certificates and keys for -// different cryptographic algorithms. Clients only get one.) -NNG_DECL int nng_tls_config_cert_key_file( - nng_tls_config *, const char *, const char *); - -// Configure supported TLS version. By default we usually restrict -// ourselves to TLS 1.2 and newer. We do not support older versions. -// If the implementation cannot support any version (for example if -// the minimum requested is 1.3 but the TLS implementation lacks support -// for TLS 1.3) then NNG_ENOTSUP will be returned. -NNG_DECL int nng_tls_config_version( - nng_tls_config *, nng_tls_version, nng_tls_version); - -// nng_tls_engine_name returns the "name" of the TLS engine. If no -// TLS engine support is enabled, then "none" is returned. -NNG_DECL const char *nng_tls_engine_name(void); - -// nng_tls_engine_description returns the "description" of the TLS engine. -// If no TLS engine support is enabled, then an empty string is returned. -NNG_DECL const char *nng_tls_engine_description(void); - -// nng_tls_engine_fips_mode returns true if the engine is in FIPS 140-2 mode. -NNG_DECL bool nng_tls_engine_fips_mode(void); - -#ifdef __cplusplus -} -#endif - -#endif // NNG_SUPPLEMENTAL_TLS_TLS_H diff --git a/nng-prebuilt/tda4/include/nng/supplemental/util/options.h b/nng-prebuilt/tda4/include/nng/supplemental/util/options.h deleted file mode 100644 index 83969a9..0000000 --- a/nng-prebuilt/tda4/include/nng/supplemental/util/options.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_SUPPLEMENTAL_UTIL_OPTIONS_H -#define NNG_SUPPLEMENTAL_UTIL_OPTIONS_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// This is a relatively simple "options parsing" library, used to -// parse command line options. We would use getopt(3), but there are -// two problems with getopt(3). First, it isn't available on all -// platforms (especially Win32), and second, it doesn't support long -// options. We *exclusively* support long options. POSIX style -// short option clustering is *NOT* supported. - -struct nng_optspec { - const char *o_name; // Long style name (may be NULL for short only) - int o_short; // Short option (no clustering!) - int o_val; // Value stored on a good parse (>0) - bool o_arg; // Option takes an argument if true -}; - -typedef struct nng_optspec nng_optspec; - -// Call with *optidx set to 1 to start parsing for a standard program. -// The val will store the value of the matched "o_val", optarg will be -// set to match the option string, and optidx will be increment appropriately. -// Returns -1 when the end of options is reached, 0 on success, or -// NNG_EINVAL if the option parse is invalid for any reason. -NNG_DECL int nng_opts_parse(int argc, char *const *argv, - const nng_optspec *opts, int *val, char **optarg, int *optidx); - -#ifdef __cplusplus -} -#endif - -#endif // NNG_SUPPLEMENTAL_UTIL_OPTIONS_H diff --git a/nng-prebuilt/tda4/include/nng/supplemental/util/platform.h b/nng-prebuilt/tda4/include/nng/supplemental/util/platform.h deleted file mode 100644 index feca858..0000000 --- a/nng-prebuilt/tda4/include/nng/supplemental/util/platform.h +++ /dev/null @@ -1,111 +0,0 @@ -// -// Copyright 2018 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_SUPPLEMENTAL_UTIL_PLATFORM_H -#define NNG_SUPPLEMENTAL_UTIL_PLATFORM_H - -// The declarations in this file are provided to assist with application -// portability. Conceptually these APIs are based on work we have already -// done for NNG internals, and we find that they are useful in building -// portable applications. - -// If it is more natural to use native system APIs like pthreads or C11 -// APIs or Windows APIs, then by all means please feel free to simply -// ignore this. - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// nng_time represents an absolute time since some arbitrary point in the -// past, measured in milliseconds. The values are always positive. -typedef uint64_t nng_time; - -// Return an absolute time from some arbitrary point. The value is -// provided in milliseconds, and is of limited resolution based on the -// system clock. (Do not use it for fine grained performance measurements.) -NNG_DECL nng_time nng_clock(void); - -// Sleep for specified msecs. -NNG_DECL void nng_msleep(nng_duration); - -// nng_thread is a handle to a "thread", which may be a real system -// thread, or a coroutine on some platforms. -typedef struct nng_thread nng_thread; - -// Create and start a thread. Note that on some platforms, this might -// actually be a coroutine, with limitations about what system APIs -// you can call. Therefore, these threads should only be used with the -// I/O APIs provided by nng. The thread runs until completion. -NNG_DECL int nng_thread_create(nng_thread **, void (*)(void *), void *); - -// Set the thread name. Support for this is platform specific and varies. -// It is intended to provide information for use when debugging applications, -// and not for programmatic use beyond that. -NNG_DECL void nng_thread_set_name(nng_thread *, const char *); - -// Destroy a thread (waiting for it to complete.) When this function -// returns all resources for the thread are cleaned up. -NNG_DECL void nng_thread_destroy(nng_thread *); - -// nng_mtx represents a mutex, which is a simple, non-reentrant, boolean lock. -typedef struct nng_mtx nng_mtx; - -// nng_mtx_alloc allocates a mutex structure. -NNG_DECL int nng_mtx_alloc(nng_mtx **); - -// nng_mtx_free frees the mutex. It must not be locked. -NNG_DECL void nng_mtx_free(nng_mtx *); - -// nng_mtx_lock locks the mutex; if it is already locked it will block -// until it can be locked. If the caller already holds the lock, the -// results are undefined (a panic may occur). -NNG_DECL void nng_mtx_lock(nng_mtx *); - -// nng_mtx_unlock unlocks a previously locked mutex. It is an error to -// call this on a mutex which is not owned by caller. -NNG_DECL void nng_mtx_unlock(nng_mtx *); - -// nng_cv is a condition variable. It is always allocated with an -// associated mutex, which must be held when waiting for it, or -// when signaling it. -typedef struct nng_cv nng_cv; - -NNG_DECL int nng_cv_alloc(nng_cv **, nng_mtx *); - -// nng_cv_free frees the condition variable. -NNG_DECL void nng_cv_free(nng_cv *); - -// nng_cv_wait waits until the condition variable is "signaled". -NNG_DECL void nng_cv_wait(nng_cv *); - -// nng_cv_until waits until either the condition is signaled, or -// the timeout expires. It returns NNG_ETIMEDOUT in that case. -NNG_DECL int nng_cv_until(nng_cv *, nng_time); - -// nng_cv_wake wakes all threads waiting on the condition. -NNG_DECL void nng_cv_wake(nng_cv *); - -// nng_cv_wake1 wakes only one thread waiting on the condition. This may -// reduce the thundering herd problem, but care must be taken to ensure -// that no waiter starves forever. -NNG_DECL void nng_cv_wake1(nng_cv *); - -// nng_random returns a "strong" (cryptographic sense) random number. -NNG_DECL uint32_t nng_random(void); - -#ifdef __cplusplus -} -#endif - -#endif // NNG_SUPPLEMENTAL_UTIL_PLATFORM_H diff --git a/nng-prebuilt/tda4/include/nng/transport/inproc/inproc.h b/nng-prebuilt/tda4/include/nng/transport/inproc/inproc.h deleted file mode 100644 index 80a8388..0000000 --- a/nng-prebuilt/tda4/include/nng/transport/inproc/inproc.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Copyright 2019 Staysail Systems, Inc. -// Copyright 2017 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_TRANSPORT_INPROC_INPROC_H -#define NNG_TRANSPORT_INPROC_INPROC_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// inproc transport. This is used for intra-process communication. - -NNG_DECL int nng_inproc_register(void); - -#ifdef __cplusplus -} -#endif - -#endif // NNG_TRANSPORT_INPROC_INPROC_H diff --git a/nng-prebuilt/tda4/include/nng/transport/ipc/ipc.h b/nng-prebuilt/tda4/include/nng/transport/ipc/ipc.h deleted file mode 100644 index 18d2046..0000000 --- a/nng-prebuilt/tda4/include/nng/transport/ipc/ipc.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// Copyright 2019 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_TRANSPORT_IPC_IPC_H -#define NNG_TRANSPORT_IPC_IPC_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// ipc transport. This is used for inter-process communication on -// the same host computer. - -NNG_DECL int nng_ipc_register(void); - -#ifdef __cplusplus -} -#endif - -#endif // NNG_TRANSPORT_IPC_IPC_H diff --git a/nng-prebuilt/tda4/include/nng/transport/tcp/tcp.h b/nng-prebuilt/tda4/include/nng/transport/tcp/tcp.h deleted file mode 100644 index 2ca40b7..0000000 --- a/nng-prebuilt/tda4/include/nng/transport/tcp/tcp.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Copyright 2019 Staysail Systems, Inc. -// Copyright 2017 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_TRANSPORT_TCP_TCP_H -#define NNG_TRANSPORT_TCP_TCP_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// TCP transport. This is used for communication over TCP/IP. - -NNG_DECL int nng_tcp_register(void); - -#ifdef __cplusplus -} -#endif - -#endif // NNG_TRANSPORT_TCP_TCP_H diff --git a/nng-prebuilt/tda4/include/nng/transport/tls/tls.h b/nng-prebuilt/tda4/include/nng/transport/tls/tls.h deleted file mode 100644 index 700d5ff..0000000 --- a/nng-prebuilt/tda4/include/nng/transport/tls/tls.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Copyright 2019 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_TRANSPORT_TLS_TLS_H -#define NNG_TRANSPORT_TLS_TLS_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// TLS transport. This is used for communication via TLS v1.2 over TCP/IP. - -NNG_DECL int nng_tls_register(void); - -#ifdef __cplusplus -} -#endif - -#endif // NNG_TRANSPORT_TLS_TLS_H diff --git a/nng-prebuilt/tda4/include/nng/transport/ws/websocket.h b/nng-prebuilt/tda4/include/nng/transport/ws/websocket.h deleted file mode 100644 index 6957710..0000000 --- a/nng-prebuilt/tda4/include/nng/transport/ws/websocket.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// Copyright 2019 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_TRANSPORT_WS_WEBSOCKET_H -#define NNG_TRANSPORT_WS_WEBSOCKET_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// WebSocket transport. This is used for communication via WebSocket. - -NNG_DECL int nng_ws_register(void); - -// These aliases are for WSS naming consistency. -#define NNG_OPT_WSS_REQUEST_HEADERS NNG_OPT_WS_REQUEST_HEADERS -#define NNG_OPT_WSS_RESPONSE_HEADERS NNG_OPT_WS_RESPONSE_HEADERS - -NNG_DECL int nng_wss_register(void); - -#ifdef __cplusplus -} -#endif - -#endif // NNG_TRANSPORT_WS_WEBSOCKET_H diff --git a/nng-prebuilt/tda4/include/nng/transport/zerotier/zerotier.h b/nng-prebuilt/tda4/include/nng/transport/zerotier/zerotier.h deleted file mode 100644 index ea73fea..0000000 --- a/nng-prebuilt/tda4/include/nng/transport/zerotier/zerotier.h +++ /dev/null @@ -1,159 +0,0 @@ -// -// Copyright 2019 Staysail Systems, Inc. -// Copyright 2018 Capitar IT Group BV -// -// This software is supplied under the terms of the MIT License, a -// copy of which should be located in the distribution where this -// file was obtained (LICENSE.txt). A copy of the license may also be -// found online at https://opensource.org/licenses/MIT. -// - -#ifndef NNG_TRANSPORT_ZEROTIER_ZEROTIER_H -#define NNG_TRANSPORT_ZEROTIER_ZEROTIER_H - -#include - -// ZeroTier Transport. This sits on the ZeroTier L2 network, which itself -// is implemented on top of UDP. This requires the 3rd party -// libzerotiercore library (which is GPLv3!) and platform specific UDP -// functionality to be built in. Note that care must be taken to link -// dynamically if one wishes to avoid making your entire application GPL3. -// (Alternatively ZeroTier offers commercial licenses which may prevent -// this particular problem.) This implementation does not make use of -// certain advanced capabilities in ZeroTier such as more sophisticated -// route management and TCP fallback. You need to have connectivity -// to the Internet to use this. (Or at least to your Planetary root.) -// -// The ZeroTier URL format we support is zt://.: where -// the component represents the 64-bit hexadecimal ZeroTier -// network ID,the represents the 40-bit hexadecimal ZeroTier -// node (device) ID, and the is a 24-bit (decimal) port number. -// -// A listener may replace the with a wildcard, to just bind to itself, -// in which case the format will be zt://*.: -// -// A listener may also use either 0 or * for the to indicate that -// a random local ephemeral port should be used. -// -// Because ZeroTier takes a while to establish connectivity, it is even -// more important that applications using the ZeroTier transport not -// assume that a connection will be immediately available. It can take -// quite a few seconds for peer-to-peer connectivity to be established. -// -// The ZeroTier transport was funded by Capitar IT Group, BV. -// -// The protocol itself is documented online at: -// http://nanomsg.org/rfcs/sp-zerotier-v0.html -// -// This transport is highly experimental. - -// ZeroTier transport-specific options. - -// NNG_OPT_ZT_HOME is a string containing a directory, where persistent -// state (key files, etc.) will be stored. It should be protected from -// unauthorized viewing and modification. This option must be set on an -// endpoint or socket before the endpoint(s) are started. If the unset, -// or an empty string, then no persistence is used and an ephemeral node -// will be created instead. Note that different endpoints may use different -// values for this option, and that will lead to each endpoint having a -// different ZeroTier identity -- however only one ephemeral node will -// be created for the application. -#define NNG_OPT_ZT_HOME "zt:home" - -// NNG_OPT_ZT_NWID is the 64-bit network ID, represented using a uint64_t in -// native byte order. This is a read-only option; it is derived automatically -// from the URL. -#define NNG_OPT_ZT_NWID "zt:nwid" - -// NNG_OPT_ZT_NODE is the 40-bit node ID, stored in native order in the low -// 40-bits of a uint64_t, of the node. This is a read-only option. -#define NNG_OPT_ZT_NODE "zt:node" - -// NNG_OPT_ZT_NETWORK_STATUS represents the status of the ZeroTier virtual -// network. The option is a read-only value, stored as an integer, which -// takes of the nng_zt_network_status_xxx values listed below. -#define NNG_OPT_ZT_NETWORK_STATUS "zt:network-status" - -// NNG_OPT_ZT_NETWORK_NAME is a human-readable name for the ZeroTier virtual -// network. This will only be set once the ZeroTier network has come up -// as the name comes from the network controller. This is read-only, and -// is presented as an ASCIIZ string. -#define NNG_OPT_ZT_NETWORK_NAME "zt:network-name" - -// NNG_OPT_ZT_PING_TIME and NNG_OPT_ZT_PING_TRIES are used to send ping -// requests when a connection appears to be idled. If a logical session -// has not received traffic from it's peer for ping-time, then a ping packet -// is sent. This will be done up to ping-count times. If no traffic from -// the remote peer is seen after all ping requests are sent, then the peer -// is assumed to be dead or offline, and the session is closed. The -// NNG_OPT_ZT_PING_TIME is a duration (msec, stored as an nng_duration, and -// NNG_OPT_ZT_PING_COUNT is an integer.) This ping process can be disabled -// by setting either ping-time or ping-count to zero. -#define NNG_OPT_ZT_PING_TIME "zt:ping-time" -#define NNG_OPT_ZT_PING_TRIES "zt:ping-tries" - -// NNG_OPT_ZT_CONN_TIME and NNG_OPT_ZT_CONN_TRIES are used to control -// the interval between connection attempts, and the maximum number of -// connection attempts to make before assuming that the peer is absent -// (and returning NNG_ETIMEDOUT). The NNG_OPT_ZT_CONN_TIME is a duration, -// the NNG_OPT_ZT_CONN_TRIES is an integer. -#define NNG_OPT_ZT_CONN_TIME "zt:conn-time" -#define NNG_OPT_ZT_CONN_TRIES "zt:conn-tries" - -// NNG_OPT_ZT_MTU is a read-only size_t and contains the ZeroTier virtual -// network MTU (i.e. the L2 payload MTU). Messages that are larger than this -// (including our 20-byte header data) will be fragmented into multiple -// virtual L2 frames. -#define NNG_OPT_ZT_MTU "zt:mtu" - -// NNG_OPT_ZT_ORBIT is a write-only API to add a "moon" -- this affects the -// endpoint, and all other endpoints using the same node. The value is -// a pair of 64-bit integers -- the first is the moon ID, and the second, if -// non-zero, is the node ID of a server. Conventionally this is the same -// as the moon ID. -#define NNG_OPT_ZT_ORBIT "zt:orbit" - -// NNG_OPT_ZT_DEORBIT removes the moon ID from the node, so that it will -// no longer use that moon. The argument is a moon ID to remove. If the -// node is not already orbiting, then this operation does nothing. -#define NNG_OPT_ZT_DEORBIT "zt:deorbit" - -// NNG_OPT_ZT_ADD_LOCAL_ADDR adds the local address (IP address) as -// local interface address. This facilitates the local startup and -// discovery. Note that this can be called multiple times to add -// additional address. This is optional, and usually not needed. -// The value is an nng_sockaddr corresponding to an IP (or IPv6) address. -#define NNG_OPT_ZT_ADD_LOCAL_ADDR "zt:add-local-addr" - -// NNG_OPT_ZT_CLEAR_LOCAL_ADDRS clears ZeroTier's notion of all -// local addresses. This may be useful when used on a mobile node, -// to reset the notion of what the local addresses are. This -// option takes no argument really. -#define NNG_OPT_ZT_CLEAR_LOCAL_ADDRS "zt:clear-local-addrs" - -#ifdef __cplusplus -extern "C" { -#endif - -// Network status values. -// These values are supplied to help folks checking status. They are the -// return values from zt_opt_status. We avoid hard coding them as defines, -// to keep applications from baking in values that may change if the -// underlying ZeroTier transport changes. -enum nng_zt_status { - NNG_ZT_STATUS_UP, - NNG_ZT_STATUS_CONFIG, - NNG_ZT_STATUS_DENIED, - NNG_ZT_STATUS_NOTFOUND, - NNG_ZT_STATUS_ERROR, - NNG_ZT_STATUS_OBSOLETE, - NNG_ZT_STATUS_UNKNOWN, -}; - -NNG_DECL int nng_zt_register(void); - -#ifdef __cplusplus -} -#endif - -#endif // NNG_TRANSPORT_ZEROTIER_ZEROTIER_H diff --git a/nng-prebuilt/tda4/lib/J7/A72/LINUX/libnng.a b/nng-prebuilt/tda4/lib/J7/A72/LINUX/libnng.a deleted file mode 100644 index c7cb408cdbfd8382070824fe58c526dd0fac8ef9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 984848 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

~b3VuZjJ~stl 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 KfchQU@BaaF*Co>c diff --git a/nng-prebuilt/tda4/lib/J7/A72/QNX/libnng.a b/nng-prebuilt/tda4/lib/J7/A72/QNX/libnng.a deleted file mode 100644 index cebf020e129f4693ba1cf933fee71af08cd48e1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1139692 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%0A~y1?9@XS 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%0AJlVfh;kF8>L|D!S>X<)sPe{;dUo&d2+q{F_o2}( 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ɃoEG-~DnG1!q(ayK zrhHV#j#k;nQZD+CZk5XI@i>udN5^e0ayO1k*b?PV_9Q3PXv+|S5O&-Bz+A37kt$aK2zs!F@_1GN5rvEpTS6=F+a~cUZ2aw-d<#wEc zZyfMJd1(xb8@pxwcgm09fFXKuMuT|b4FXLlzW3#NER^FcjO_C<}n?B`2HqyZ782}jhA<0 ztZbey?XN`Y{fNg&rLM0Oj`BRA@`K73I{EWbKR|iqA5cD|`*pg0NcFT{>%pM%b*5jr z8+W1|HlX~mE&|)c~(StRfN|>__7FpD8kz! zyf4BBBmCzhd^p1QNBAE{_+Lf%i3tCv2rrXUgsk$vIKt;g`1>M!RfM-icyEM%KEiiL z_}3!*#Rwmb@c$Cwe;MKMVU<;$-;3}cMEE6gD9X|^Kf)J9_{s?XaD=x;cz=WsMfk5r z_#Z?#d{SlQ_wOUTR35-($yY}Bq6oh)!XJ(B^%4Hb2!E}z4{7i(O zFQ+V7XdVntPm+RfgW%y$Ypn z>x;!4c7jy{XWgPG^x0N4(2yGuk2Vp-5Yyb3IXs4-OB~xy(%+-zh2%K<*qXH#<=V})_qg$ z;@fXeQ&S0be>?@7^Ii^UDb6=C(B0M5)*^oBwbTT82ls`2b8ufE@I{Q`lAHB?PjOT@ zLXHODR=*|VYFWGx_Z1WMQXEJXgv2_D)Y08lKm|X?aB6HZm8z>_qgEu1@QOSI!pX5g zjo;lpNN+ zAM0#hCzg4K(2@_L{cU1-b5|=IOc%29SVwOk?NX+k{^p(@bWyWFqBeGK?C;s=qqzKu z34QHJW21Dwmd6`g+8=LRx3Rgm5J#-p*jbQok*83FJt*wxenJvRYr%~PwC_5;8Gv!K zuf0*8mv#3RrTJKMM`voLGo7;Hn)BL?>w7e!X_J&2n_HhiuS?^C72AkjBbDVOP-&fQ zU2eOewSORujtrS_p?DhmHg$Oy^-xf#N9?WbZuMT@oz(^J^#%341@*pCTKeVLTbg9^ zT6w;hTG!sz+$w{a8Hp4;O6Avzhj5<*7}(d+-qyOY)2r)g?&|P%rY$U^1z@<8Rv-$~ zO4AM*Hg=fX)+Oc?TD^28ckr7U*}7kvT`9lp_bwGH$qa+Gdq?@iXXtw(#t-g@6% zed!8s>G9<%4Y0fOiN+2MmOMY%+)-qGnvjmA);>`4X>%8|I@@G~lag^o>8b+#ud(~F z$6y0u^~pHV*wfqH-`&{ZyMS~Hc%OF(cId&tiDeX@GrbW5vD4KrA{YakmrU99n(@?WM1*AQ#4NVxU%p`ndXL(C^&! M)z>o=S0c?J>!Yy&W*mM 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 S4UI|tw|_>97Z`f2{r>>k8m$8W diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt index 5cc13e1..30bf09b 100644 --- a/packaging/CMakeLists.txt +++ b/packaging/CMakeLists.txt @@ -21,70 +21,52 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # + +set(INSTALL_COMPONENTS dev tools python) + if(APPLE) - option(PACKAGE_DMG "Generate DMG package" ON) + set(GEN_PACKAGES DragNDrop) elseif(MSVC) - option(PACKAGE_NSIS "Generate NSIS installer" ON) + set(GEN_PACKAGES NSIS) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Concerto") + set(GEN_PACKAGES TGZ) + set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) + set(INSTALL_COMPONENTS dev) +elseif(CMAKE_CROSSCOMPILING) + set(GEN_PACKAGES TGZ) else() - option(PACKAGE_RPM "Generate RPM package" ON) - option(PACKAGE_DEB "Generate DEB package" ON) -endif() - -if(PACKAGE_DMG) - list(APPEND GEN_PACKAGES DragNDrop) -endif() - -if(PACKAGE_NSIS) - list(APPEND GEN_PACKAGES NSIS) -endif() - -if(PACKAGE_DEB) - list(APPEND GEN_PACKAGES DEB) - set(CPACK_DEB_COMPONENT_INSTALL ON) -endif() + set(GEN_PACKAGES DEB) + find_program(RPMBUILD rpmbuild) -if(PACKAGE_RPM) - list(APPEND GEN_PACKAGES RPM) - set(CPACK_RPM_COMPONENT_INSTALL ON) + if (RPMBUILD) + list(APPEND GEN_PACKAGES RPM) + endif() endif() set(CPACK_GENERATOR ${GEN_PACKAGES}) -set(CPACK_PACKAGE_NAME tweaktool) - -set(CPACK_COMPONENTS_ALL dev tools python) +set(CPACK_COMPONENTS_ALL ${INSTALL_COMPONENTS}) set(CPACK_COMPONENTS_GROUPING IGNORE) +set(CPACK_PACKAGE_NAME tweaktool) set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_SUMMARY}) set(CPACK_PACKAGE_VENDOR ${PROJECT_VENDOR}) -set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${PROJECT_URI}) -set(CPACK_DEBIAN_PACKAGE_MAINTAINER - "Sergey Zykov ") set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/../README.md") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/../LICENSE") set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION_STRING}) set(CPACK_STRIP_FILES TRUE) -set(CPACK_DEB_COMPONENT_INSTALL ON) -set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) -set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON) -set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY ">=") set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") -set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_FULL_NAME}") -set(CPACK_NSIS_PACKAGE_NAME "${PROJECT_FULL_NAME} ver ${PROJECT_VERSION}") -set(CPACK_NSIS_DISPLAY_NAME "${PROJECT_SUMMARY} ver ${PROJECT_VERSION}") -set(CPACK_NSIS_HELP_LINK ${PROJECT_URI}) -set(CPACK_NSIS_CONTACT ${PROJECT_URI}) -set(CPACK_NSIS_WELCOME_TITLE ${PROJECT_SUMMARY}) -set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL TRUE) +set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_CURRENT_LIST_DIR}/generators.cmake) if(BUILD_GUI AND NOT MSVC AND NOT APPLE) - set(ICON_NAME tweak-icon) + + set(ICON_NAME tweak-icon) # Install application icons # https://developer.gnome.org/integration-guide/stable/icons.html.en @@ -112,16 +94,4 @@ if(BUILD_GUI COMPONENT tools) endif() -if(BUILD_GUI AND MSVC) - set(CPACK_NSIS_CREATE_ICONS_EXTRA - "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${PROJECT_FULL_NAME}.lnk' '$INSTDIR\\\\bin\\\\tweak-gui.exe'" - "CreateShortCut '$DESKTOP\\\\${PROJECT_FULL_NAME}.lnk' '$INSTDIR\\\\bin\\\\tweak-gui.exe'" - ) - - set(CPACK_NSIS_DELETE_ICONS_EXTRA - "Delete '$SMPROGRAMS\\\\$START_MENU\\\\${PROJECT_FULL_NAME}.lnk'" - "Delete '$DESKTOP\\\\${PROJECT_FULL_NAME}.lnk'") - -endif() - include(CPack) diff --git a/packaging/generators.cmake b/packaging/generators.cmake new file mode 100644 index 0000000..d34d6f2 --- /dev/null +++ b/packaging/generators.cmake @@ -0,0 +1,63 @@ +# +# CMake build configuration for Cogent Tweak Tool. +# +# Copyright (c) 2022 Cogent Embedded, Inc. ALL RIGHTS RESERVED. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +if(CPACK_GENERATOR MATCHES "TGZ") + set(CPACK_SET_DESTDIR ON) + set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF) + set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) +elseif(CPACK_GENERATOR MATCHES "DEB") + set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_FULL_NAME}") + set(CPACK_DEB_COMPONENT_INSTALL ON) + set(CPACK_DEBIAN_PACKAGE_HOMEPAGE ${PROJECT_URI}) + set(CPACK_DEBIAN_PACKAGE_MAINTAINER "info@cogentembedded.com") + set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OFF) + set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON) + set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY ">=") + set(CPACK_DEBIAN_python_PACKAGE_DEPENDS "tweaktool python3 python3-numpy") + set(CPACK_DEBIAN_tools_PACKAGE_SHLIBDEPS ON) + set(CPACK_DEBIAN_dev_PACKAGE_SHLIBDEPS ON) +elseif(CPACK_GENERATOR MATCHES "RPM") + set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_FULL_NAME}") + set(CPACK_RPM_COMPONENT_INSTALL ON) +elseif(CPACK_GENERATOR MATCHES "NSIS") + set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_FULL_NAME}") + set(CPACK_NSIS_PACKAGE_NAME "${PROJECT_FULL_NAME} ver ${PROJECT_VERSION}") + set(CPACK_NSIS_DISPLAY_NAME "${PROJECT_SUMMARY} ver ${PROJECT_VERSION}") + set(CPACK_NSIS_HELP_LINK ${PROJECT_URI}) + set(CPACK_NSIS_CONTACT ${PROJECT_URI}) + set(CPACK_NSIS_WELCOME_TITLE ${PROJECT_SUMMARY}) + set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL TRUE) + if(BUILD_GUI) + set(CPACK_NSIS_CREATE_ICONS_EXTRA + "CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\${PROJECT_FULL_NAME}.lnk' '$INSTDIR\\\\bin\\\\tweak-gui.exe'" + "CreateShortCut '$DESKTOP\\\\${PROJECT_FULL_NAME}.lnk' '$INSTDIR\\\\bin\\\\tweak-gui.exe'" + ) + + set(CPACK_NSIS_DELETE_ICONS_EXTRA + "Delete '$SMPROGRAMS\\\\$START_MENU\\\\${PROJECT_FULL_NAME}.lnk'" + "Delete '$DESKTOP\\\\${PROJECT_FULL_NAME}.lnk'") + endif() +else() + set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_FULL_NAME}") +endif() diff --git a/tweak-app-cl/concerto.mak b/tweak-app-cl/concerto.mak deleted file mode 100644 index 34187fb..0000000 --- a/tweak-app-cl/concerto.mak +++ /dev/null @@ -1,50 +0,0 @@ - -TWEAK_PATH := $(VISION_APPS_PATH)/utils/cogent_tweaktool - -######################################################################## -ifeq ($(TARGET_OS), $(filter $(TARGET_OS), LINUX QNX)) -ifeq ($(TARGET_CPU),A72) - -include $(PRELUDE) - -TARGET := tweak-app-cl -TARGETTYPE := exe -CSOURCES := - -IDIRS += $(TWEAK_PATH)/extern/uthash/include -IDIRS += $(TWEAK_PATH)/tweak-app/include -IDIRS += $(TWEAK_PATH)/tweak-common/include -IDIRS += $(TWEAK_PATH)/tweak-json/include -IDIRS += $(TWEAK_PATH)/tweak-metadata/include - -CSOURCES += src/main.c -CSOURCES += src/metadatautil.c -CSOURCES += src/stringutil.c -CSOURCES += src/tweakuriutil.c - -ifeq ($(TARGET_OS),LINUX) - IDIRS += $(LINUX_FS_PATH)/usr/include - LDIRS += $(LINUX_FS_PATH)/lib - STATIC_LIBS += nng - SYS_SHARED_LIBS += pthread -endif - -ifeq ($(TARGET_OS),QNX) - IDIRS += $(QNX_TARGET)/usr/include - STATIC_LIBS += nng - SYS_SHARED_LIBS += socket - ifneq ("$(wildcard $(QNX_TARGET)/aarch64le/lib/libregex.*)","") - # SDP 710 has a separate regex library - SYS_SHARED_LIBS += regex - endif -endif - -include $(VISION_APPS_PATH)/apps/concerto_a72_inc.mak - -STATIC_LIBS += cogent_tweaktool -SYS_SHARED_LIBS += readline ncurses - -include $(FINALE) - -endif -endif diff --git a/tweak-app/CMakeLists.txt b/tweak-app/CMakeLists.txt index c38fbca..1e5f847 100644 --- a/tweak-app/CMakeLists.txt +++ b/tweak-app/CMakeLists.txt @@ -77,8 +77,7 @@ if (MSVC) COMPILE_FLAGS ${VC_UTHASH_WARNINGS}) endif() -target_link_libraries(${LIBRARY_NAME} PUBLIC ${${LIBRARY_NAME}_DEPENDENCIES} - Threads::Threads) +target_link_libraries(${LIBRARY_NAME} PUBLIC ${${LIBRARY_NAME}_DEPENDENCIES}) target_compile_features(${LIBRARY_NAME} PUBLIC c_std_99) diff --git a/tweak-app/test/test-tweakmodel/CMakeLists.txt b/tweak-app/test/test-tweakmodel/CMakeLists.txt index da8821b..e6ad93d 100644 --- a/tweak-app/test/test-tweakmodel/CMakeLists.txt +++ b/tweak-app/test/test-tweakmodel/CMakeLists.txt @@ -54,7 +54,7 @@ target_include_directories( target_compile_features(${BINARY_NAME} PUBLIC c_std_99) -target_link_libraries(${BINARY_NAME} Threads::Threads +target_link_libraries(${BINARY_NAME} ${PROJECT_NAMESPACE}::common ${PROJECT_NAMESPACE}::metadata) diff --git a/tweak-app/test/test-uri-to-index/CMakeLists.txt b/tweak-app/test/test-uri-to-index/CMakeLists.txt index ec534f4..ca0dfe6 100644 --- a/tweak-app/test/test-uri-to-index/CMakeLists.txt +++ b/tweak-app/test/test-uri-to-index/CMakeLists.txt @@ -54,7 +54,7 @@ target_include_directories( target_compile_features(${BINARY_NAME} PUBLIC c_std_99) -target_link_libraries(${BINARY_NAME} Threads::Threads +target_link_libraries(${BINARY_NAME} ${PROJECT_NAMESPACE}::common) # ------------------------------------------------------------------------------ diff --git a/tweak-common/CMakeLists.txt b/tweak-common/CMakeLists.txt index 679f830..83258c5 100644 --- a/tweak-common/CMakeLists.txt +++ b/tweak-common/CMakeLists.txt @@ -32,13 +32,6 @@ set(LIBRARY_SOVERSION 1) # Dependencies # ------------------------------------------------------------------------------ -set(CMAKE_REQUIRED_LIBRARIES Threads::Threads) - -if (NOT MSVC) - include(CheckSymbolExists) - check_symbol_exists(pthread_threadid_np "pthread.h" PTHREAD_THREADID_NP_EXISTS) -endif() - set(${LIBRARY_NAME}_DEPENDENCIES ${PROJECT_NAMESPACE}::json) # ------------------------------------------------------------------------------ @@ -54,18 +47,36 @@ set(${LIBRARY_NAME}_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/tweak2/log.h ${CMAKE_CURRENT_SOURCE_DIR}/include/tweak2/defaults.h) -set(${LIBRARY_NAME}_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_out_stderr.c - ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_unix.c +set(${LIBRARY_NAME}_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/tweakbuffer.c + ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog.c ${CMAKE_CURRENT_SOURCE_DIR}/src/tweakstring.c - ${CMAKE_CURRENT_SOURCE_DIR}/src/tweakbuffer.c ${CMAKE_CURRENT_SOURCE_DIR}/src/tweakvariant.c) -if(MSVC) + +if(CMAKE_SYSTEM_NAME STREQUAL "Concerto") list(APPEND ${LIBRARY_NAME}_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_format_time_winapi.c) + ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_format_time_tda4.c + ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_out_tda4.c) else() + set(THREADS_PREFER_PTHREAD_FLAG ON) + find_package(Threads REQUIRED) + list(APPEND ${LIBRARY_NAME}_DEPENDENCIES Threads) + + if (NOT MSVC) + include(CheckSymbolExists) + check_symbol_exists(pthread_threadid_np "pthread.h" PTHREAD_THREADID_NP_EXISTS) + endif() + list(APPEND ${LIBRARY_NAME}_SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_format_time_posix.c) + ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_out_stderr.c) + + if(MSVC) + list(APPEND ${LIBRARY_NAME}_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_format_time_winapi.c) + else() + list(APPEND ${LIBRARY_NAME}_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_format_time_posix.c) + endif() endif() if(PTHREAD_THREADID_NP_EXISTS) @@ -77,6 +88,9 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") list(APPEND ${LIBRARY_NAME}_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_thread_id_common.c ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_thread_id_linux_syscall.c) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Concerto") + list(APPEND ${LIBRARY_NAME}_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_thread_id_sysbios.c) elseif(MSVC) list(APPEND ${LIBRARY_NAME}_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/tweaklog_thread_id_winapi.c) @@ -115,6 +129,9 @@ else() elseif(ATOMIC_ADD_VALUE_EXISTS) list(APPEND ${LIBRARY_NAME}_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/tweak_id_gen_atomic_add_value.c) + elseif(CMAKE_SYSTEM_NAME STREQUAL "Concerto") + list(APPEND ${LIBRARY_NAME}_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/src/tweak_id_gen_sysbios.c) else() list(APPEND ${LIBRARY_NAME}_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/tweak_id_gen_fallback.c) @@ -138,9 +155,8 @@ if(NOT MSVC) target_link_libraries(${LIBRARY_NAME} PRIVATE m) endif() -target_link_libraries(${LIBRARY_NAME} PUBLIC - ${${LIBRARY_NAME}_DEPENDENCIES} - Threads::Threads) +target_link_libraries(${LIBRARY_NAME} PUBLIC $<$:Threads::Threads> + PRIVATE ${PROJECT_NAMESPACE}::json) target_compile_features(${LIBRARY_NAME} PUBLIC c_std_99) diff --git a/tweak-common/include/tweak2/thread.h b/tweak-common/include/tweak2/thread.h index 1a12eb6..fb8ce25 100644 --- a/tweak-common/include/tweak2/thread.h +++ b/tweak-common/include/tweak2/thread.h @@ -54,6 +54,7 @@ typedef uint64_t tweak_common_milliseconds; typedef uint64_t tweak_common_nanoseconds; #define TWEAK_COMMON_TIMESPAN_INFINITE UINT64_MAX +#define TWEAK_DEFAULT_STACK_SIZE (32 * 1024) typedef void *(*tweak_common_thread_routine)(void *); @@ -67,7 +68,7 @@ struct thread_param_thunk { tweak_common_thread_routine thread_proc; void *client_cookie; void *result; - uint8_t stack[32 * 1024]; + uint8_t stack[TWEAK_DEFAULT_STACK_SIZE]; }; typedef struct _tweak_common_thread { @@ -136,6 +137,11 @@ static unsigned __stdcall winapi_thread_entry_point(void *arg) { #include #include +#if defined(__ZEPHYR__) +#include +#include +#endif + typedef pthread_t tweak_common_thread; typedef pthread_mutex_t tweak_common_mutex; @@ -202,7 +208,22 @@ static inline tweak_common_thread_error tweak_common_thread_create(tweak_common_ return TWEAK_COMMON_THREAD_SUCCESS; #else - return tweak_common_convert_map_posix_error_code(pthread_create(thread, NULL, thread_routine, cookie)); + pthread_attr_t *attr = NULL; + +#if defined(__ZEPHYR__) + pthread_attr_t zephyr_attr; + attr = &zephyr_attr; + + pthread_attr_init(attr); + void *stack = malloc(TWEAK_DEFAULT_STACK_SIZE); + if (stack == NULL) + { + TWEAK_FATAL("malloc() returned NULL"); + } + pthread_attr_setstack(attr, stack, TWEAK_DEFAULT_STACK_SIZE); +#endif + + return tweak_common_convert_map_posix_error_code(pthread_create(thread, attr, thread_routine, cookie)); #endif } @@ -363,7 +384,7 @@ static inline tweak_common_thread_error tweak_common_cond_timed_wait(tweak_commo static inline tweak_common_thread_error tweak_common_cond_wait(tweak_common_cond* cond, tweak_common_mutex* mutex) { #if defined(TI_ARM_R5F) - return tweak_common_cond_timed_wait(cond, mutex, TIVX_EVENT_TIMEOUT_WAIT_FOREVER); + return tweak_common_cond_timed_wait(cond, mutex, TWEAK_COMMON_TIMESPAN_INFINITE); #elif defined(_MSC_BUILD) return SleepConditionVariableCS(cond, mutex, INFINITE) ? TWEAK_COMMON_THREAD_SUCCESS diff --git a/tweak-common/src/tweak_id_gen_zephyr.c b/tweak-common/src/tweak_id_gen_zephyr.c new file mode 100644 index 0000000..ccf6809 --- /dev/null +++ b/tweak-common/src/tweak_id_gen_zephyr.c @@ -0,0 +1,36 @@ +/** + * @file tweak_id_gen_zephyr.c + * @ingroup tweak-api + * + * @brief Utility method to generate tweak ids in multi thread env. + * + * @copyright 2022 Cogent Embedded, Inc. ALL RIGHTS RESERVED. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include + +#include + +static atomic_t seed = 1UL; + +tweak_id tweak_common_genid() { + return (tweak_id)atomic_add(&seed, 1); +} diff --git a/tweak-common/src/tweaklog_unix.c b/tweak-common/src/tweaklog.c similarity index 99% rename from tweak-common/src/tweaklog_unix.c rename to tweak-common/src/tweaklog.c index ebe5a6f..9546d56 100644 --- a/tweak-common/src/tweaklog_unix.c +++ b/tweak-common/src/tweaklog.c @@ -1,5 +1,5 @@ /** - * @file tweaklog_unix.c + * @file tweaklog.c * @ingroup tweak-api * * @brief Common logging routine, reference POSIX implementation. diff --git a/tweak-common/src/tweaklog_format_time_tda4.c b/tweak-common/src/tweaklog_format_time_tda4.c index 684e8bf..fbbf993 100644 --- a/tweak-common/src/tweaklog_format_time_tda4.c +++ b/tweak-common/src/tweaklog_format_time_tda4.c @@ -27,12 +27,7 @@ #include -#include -#include - -#include - const char* tweak_common_log_format_time() { - /*.. on TDA4 log is automatically prefixed by system monotonic clock by appLogPrintf*/ + /*.. on TDA4 log is automatically prefixed by system monotonic clock by appLogPrintf */ return ""; } diff --git a/tweak-common/src/tweaklog_format_time_zephyr.c b/tweak-common/src/tweaklog_format_time_zephyr.c new file mode 100644 index 0000000..ce2a27f --- /dev/null +++ b/tweak-common/src/tweaklog_format_time_zephyr.c @@ -0,0 +1,36 @@ +/** + * @file tweaklog_format_time_zephyr.c + * @ingroup tweak-api + * + * @brief Prepends log messages with kernel uptime. + * + * @copyright 2022 Cogent Embedded, Inc. ALL RIGHTS RESERVED. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include + +#include + +const char *tweak_common_log_format_time() { + static char buffer[32]; + sprintf(buffer, "%06" PRIu64, k_uptime_get()); + return buffer; +} diff --git a/tweak-common/src/tweaklog_thread_id_zephyr.c b/tweak-common/src/tweaklog_thread_id_zephyr.c new file mode 100644 index 0000000..7ae8d54 --- /dev/null +++ b/tweak-common/src/tweaklog_thread_id_zephyr.c @@ -0,0 +1,46 @@ +/** + * @file tweaklog_thread_id_zephyr.c + * @ingroup tweak-api + * + * @brief Routine to get printable thread id for logging. + * + * @copyright 2022 Cogent Embedded, Inc. ALL RIGHTS RESERVED. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include + +#include +#include + +const char *tweak_common_log_get_thread_id() +{ + k_tid_t tid = k_current_get(); + const char *name = k_thread_name_get(tid); + + if (name != NULL && strlen(name) != 0) + { + return name; + } + + static char buffer[16]; + sprintf(buffer, "%p", tid); + return buffer; +} diff --git a/tweak-gw/CMakeLists.txt b/tweak-gw/CMakeLists.txt new file mode 100644 index 0000000..20029cf --- /dev/null +++ b/tweak-gw/CMakeLists.txt @@ -0,0 +1,33 @@ +# +# CMake build configuration for Cogent Tweak Tool. +# +# Copyright (c) 2022 Cogent Embedded, Inc. ALL RIGHTS RESERVED. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# + +find_package(nng REQUIRED) + +find_package(TIOVX REQUIRED) + +add_executable(tweak-gw main.c) + +target_link_libraries(tweak-gw PRIVATE ${PROJECT_NAMESPACE}::app TIOVX::TIOVX) + +tweak_binary_install(tweak-gw) diff --git a/tweak-gw/concerto.mak b/tweak-gw/concerto.mak deleted file mode 100644 index 4291789..0000000 --- a/tweak-gw/concerto.mak +++ /dev/null @@ -1,34 +0,0 @@ -ifeq ($(TARGET_CPU),A72) -ifeq ($(TARGET_OS), $(filter $(TARGET_OS), LINUX QNX)) - -include $(PRELUDE) - -TARGETTYPE := exe -TARGET := tweak-gw -CSOURCES := main.c - -STATIC_LIBS += cogent_tweaktool -STATIC_LIBS += nng - -ifeq ($(TARGET_OS),$(filter $(TARGET_OS), QNX)) -SYS_SHARED_LIBS += socket -endif - -ifeq ($(TARGET_OS),$(filter $(TARGET_OS), LINUX)) -SYS_SHARED_LIBS += pthread -endif - -TWEAK_PATH := $(VISION_APPS_PATH)/utils/cogent_tweaktool - -IDIRS += $(TWEAK_PATH)/tweak-common/include -IDIRS += $(TWEAK_PATH)/tweak-wire/include - -IDIRS += $(VISION_APPS_PATH)/ - -include $(VISION_APPS_PATH)/apps/concerto_a72_inc.mak - -include $(FINALE) - -endif -endif - diff --git a/tweak-pickle/src/autogen/pb_decode.c b/tweak-pickle/src/autogen/pb_decode.c index b194825..2f8d52e 100644 --- a/tweak-pickle/src/autogen/pb_decode.c +++ b/tweak-pickle/src/autogen/pb_decode.c @@ -72,13 +72,13 @@ static bool checkreturn buf_read(pb_istream_t *stream, pb_byte_t *buf, size_t co size_t i; const pb_byte_t *source = (const pb_byte_t*)stream->state; stream->state = (pb_byte_t*)stream->state + count; - + if (buf != NULL) { for (i = 0; i < count; i++) buf[i] = source[i]; } - + return true; } @@ -96,17 +96,17 @@ bool checkreturn pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count) { if (!pb_read(stream, tmp, 16)) return false; - + count -= 16; } - + return pb_read(stream, tmp, count); } #endif if (stream->bytes_left < count) PB_RETURN_ERROR(stream, "end-of-stream"); - + #ifndef PB_BUFFER_ONLY if (!stream->callback(stream, buf, count)) PB_RETURN_ERROR(stream, "io error"); @@ -114,7 +114,7 @@ bool checkreturn pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count) if (!buf_read(stream, buf, count)) return false; #endif - + stream->bytes_left -= count; return true; } @@ -135,8 +135,8 @@ static bool checkreturn pb_readbyte(pb_istream_t *stream, pb_byte_t *buf) #endif stream->bytes_left--; - - return true; + + return true; } pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t msglen) @@ -171,7 +171,7 @@ static bool checkreturn pb_decode_varint32_eof(pb_istream_t *stream, uint32_t *d { pb_byte_t byte; uint32_t result; - + if (!pb_readbyte(stream, &byte)) { if (stream->bytes_left == 0) @@ -184,7 +184,7 @@ static bool checkreturn pb_decode_varint32_eof(pb_istream_t *stream, uint32_t *d return false; } - + if ((byte & 0x80) == 0) { /* Quick case, 1 byte value */ @@ -195,12 +195,12 @@ static bool checkreturn pb_decode_varint32_eof(pb_istream_t *stream, uint32_t *d /* Multibyte case */ uint_fast8_t bitpos = 7; result = byte & 0x7F; - + do { if (!pb_readbyte(stream, &byte)) return false; - + if (bitpos >= 32) { /* Note: The varint could have trailing 0x80 bytes, or 0xFF for negative. */ @@ -219,14 +219,14 @@ static bool checkreturn pb_decode_varint32_eof(pb_istream_t *stream, uint32_t *d } bitpos = (uint_fast8_t)(bitpos + 7); } while (byte & 0x80); - + if (bitpos == 35 && (byte & 0x70) != 0) { /* The last byte was at bitpos=28, so only bottom 4 bits fit. */ - PB_RETURN_ERROR(stream, "varint overflow"); + PB_RETURN_ERROR(stream, "variant overflow"); } } - + *dest = result; return true; } @@ -242,19 +242,19 @@ bool checkreturn pb_decode_varint(pb_istream_t *stream, uint64_t *dest) pb_byte_t byte; uint_fast8_t bitpos = 0; uint64_t result = 0; - + do { if (bitpos >= 64) PB_RETURN_ERROR(stream, "varint overflow"); - + if (!pb_readbyte(stream, &byte)) return false; result |= (uint64_t)(byte & 0x7F) << bitpos; bitpos = (uint_fast8_t)(bitpos + 7); } while (byte & 0x80); - + *dest = result; return true; } @@ -276,7 +276,7 @@ bool checkreturn pb_skip_string(pb_istream_t *stream) uint32_t length; if (!pb_decode_varint32(stream, &length)) return false; - + if ((size_t)length != length) { PB_RETURN_ERROR(stream, "size too large"); @@ -291,12 +291,12 @@ bool checkreturn pb_decode_tag(pb_istream_t *stream, pb_wire_type_t *wire_type, *eof = false; *wire_type = (pb_wire_type_t) 0; *tag = 0; - + if (!pb_decode_varint32_eof(stream, &temp, eof)) { return false; } - + *tag = temp >> 3; *wire_type = (pb_wire_type_t)(temp & 7); return true; @@ -334,15 +334,15 @@ static bool checkreturn read_raw_value(pb_istream_t *stream, pb_wire_type_t wire return false; } while (*buf++ & 0x80); return true; - + case PB_WT_64BIT: *size = 8; return pb_read(stream, buf, 8); - + case PB_WT_32BIT: *size = 4; return pb_read(stream, buf, 4); - + case PB_WT_STRING: /* Calling read_raw_value with a PB_WT_STRING is an error. * Explicitly handle this case and fallthrough to default to avoid @@ -361,11 +361,11 @@ bool checkreturn pb_make_string_substream(pb_istream_t *stream, pb_istream_t *su uint32_t size; if (!pb_decode_varint32(stream, &size)) return false; - + *substream = *stream; if (substream->bytes_left < size) PB_RETURN_ERROR(stream, "parent stream too short"); - + substream->bytes_left = (size_t)size; stream->bytes_left -= (size_t)size; return true; @@ -467,12 +467,12 @@ static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t { case PB_HTYPE_REQUIRED: return decode_basic_field(stream, wire_type, field); - + case PB_HTYPE_OPTIONAL: if (field->pSize != NULL) *(bool*)field->pSize = true; return decode_basic_field(stream, wire_type, field); - + case PB_HTYPE_REPEATED: if (wire_type == PB_WT_STRING && PB_LTYPE(field->type) <= PB_LTYPE_LAST_PACKABLE) @@ -557,12 +557,12 @@ static bool checkreturn decode_static_field(pb_istream_t *stream, pb_wire_type_t * Zero size is not allowed, use pb_free() for releasing. */ static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t data_size, size_t array_size) -{ +{ void *ptr = *(void**)pData; - + if (data_size == 0 || array_size == 0) PB_RETURN_ERROR(stream, "invalid size"); - + #ifdef __AVR__ /* Workaround for AVR libc bug 53284: http://savannah.nongnu.org/bugs/?53284 * Realloc to size of 1 byte can cause corruption of the malloc structures. @@ -589,14 +589,14 @@ static bool checkreturn allocate_field(pb_istream_t *stream, void *pData, size_t } } } - + /* Allocate new or expand previous allocation */ /* Note: on failure the old pointer will remain in the structure, * the message must be freed by caller also on error return. */ ptr = pb_realloc(ptr, array_size * data_size); if (ptr == NULL) PB_RETURN_ERROR(stream, "realloc failed"); - + *(void**)pData = ptr; return true; } @@ -636,7 +636,7 @@ static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_ /* FIXME: Does this work correctly for oneofs? */ pb_release_single_field(field); } - + if (PB_HTYPE(field->type) == PB_HTYPE_ONEOF) { *(pb_size_t*)field->pSize = field->tag; @@ -653,12 +653,12 @@ static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_ { if (!allocate_field(stream, field->pField, field->data_size, 1)) return false; - + field->pData = *(void**)field->pField; initialize_pointer_field(field->pData, field); return decode_basic_field(stream, wire_type, field); } - + case PB_HTYPE_REPEATED: if (wire_type == PB_WT_STRING && PB_LTYPE(field->type) <= PB_LTYPE_LAST_PACKABLE) @@ -668,10 +668,10 @@ static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_ pb_size_t *size = (pb_size_t*)field->pSize; size_t allocated_size = *size; pb_istream_t substream; - + if (!pb_make_string_substream(stream, &substream)) return false; - + while (substream.bytes_left) { if (*size == PB_SIZE_MAX) @@ -693,7 +693,7 @@ static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_ allocated_size += remain; else allocated_size += 1; - + if (!allocate_field(&substream, field->pField, field->data_size, allocated_size)) { status = false; @@ -709,12 +709,12 @@ static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_ status = false; break; } - + (*size)++; } if (!pb_close_string_substream(stream, &substream)) return false; - + return status; } else @@ -724,10 +724,10 @@ static bool checkreturn decode_pointer_field(pb_istream_t *stream, pb_wire_type_ if (*size == PB_SIZE_MAX) PB_RETURN_ERROR(stream, "too many array entries"); - + if (!allocate_field(stream, field->pField, field->data_size, (size_t)(*size + 1))) return false; - + field->pData = *(char**)field->pField + field->data_size * (*size); (*size)++; initialize_pointer_field(field->pData, field); @@ -749,17 +749,17 @@ static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type { pb_istream_t substream; size_t prev_bytes_left; - + if (!pb_make_string_substream(stream, &substream)) return false; - + do { prev_bytes_left = substream.bytes_left; if (!field->descriptor->field_callback(&substream, NULL, field)) PB_RETURN_ERROR(stream, "callback failed"); } while (substream.bytes_left > 0 && substream.bytes_left < prev_bytes_left); - + if (!pb_close_string_substream(stream, &substream)) return false; @@ -774,11 +774,11 @@ static bool checkreturn decode_callback_field(pb_istream_t *stream, pb_wire_type pb_istream_t substream; pb_byte_t buffer[10]; size_t size = sizeof(buffer); - + if (!read_raw_value(stream, wire_type, buffer, &size)) return false; substream = pb_istream_from_buffer(buffer, size); - + return field->descriptor->field_callback(&substream, NULL, field); } } @@ -799,13 +799,13 @@ static bool checkreturn decode_field(pb_istream_t *stream, pb_wire_type_t wire_t { case PB_ATYPE_STATIC: return decode_static_field(stream, wire_type, field); - + case PB_ATYPE_POINTER: return decode_pointer_field(stream, wire_type, field); - + case PB_ATYPE_CALLBACK: return decode_callback_field(stream, wire_type, field); - + default: PB_RETURN_ERROR(stream, "invalid field type"); } @@ -835,7 +835,7 @@ static bool checkreturn decode_extension(pb_istream_t *stream, uint32_t tag, pb_wire_type_t wire_type, pb_extension_t *extension) { size_t pos = stream->bytes_left; - + while (extension != NULL && pos == stream->bytes_left) { bool status; @@ -846,10 +846,10 @@ static bool checkreturn decode_extension(pb_istream_t *stream, if (!status) return false; - + extension = extension->next; } - + return true; } @@ -1158,12 +1158,12 @@ bool checkreturn pb_decode_ex(pb_istream_t *stream, const pb_msgdesc_t *fields, if (!pb_close_string_substream(stream, &substream)) return false; } - + #ifdef PB_ENABLE_MALLOC if (!status) pb_release(fields, dest_struct); #endif - + return status; } @@ -1246,7 +1246,7 @@ static void pb_release_single_field(pb_field_iter_t *field) { /* Release fields in submessage or submsg array */ pb_size_t count = 1; - + if (PB_ATYPE(type) == PB_ATYPE_POINTER) { field->pData = *(void**)field->pField; @@ -1255,7 +1255,7 @@ static void pb_release_single_field(pb_field_iter_t *field) { field->pData = field->pField; } - + if (PB_HTYPE(type) == PB_HTYPE_REPEATED) { count = *(pb_size_t*)field->pSize; @@ -1266,7 +1266,7 @@ static void pb_release_single_field(pb_field_iter_t *field) count = field->array_size; } } - + if (field->pData) { for (; count > 0; count--) @@ -1276,7 +1276,7 @@ static void pb_release_single_field(pb_field_iter_t *field) } } } - + if (PB_ATYPE(type) == PB_ATYPE_POINTER) { if (PB_HTYPE(type) == PB_HTYPE_REPEATED && @@ -1292,13 +1292,13 @@ static void pb_release_single_field(pb_field_iter_t *field) *pItem++ = NULL; } } - + if (PB_HTYPE(type) == PB_HTYPE_REPEATED) { /* We are going to release the array, so set the size to 0 */ *(pb_size_t*)field->pSize = 0; } - + /* Release main pointer */ pb_free(*(void**)field->pField); *(void**)field->pField = NULL; @@ -1308,13 +1308,13 @@ static void pb_release_single_field(pb_field_iter_t *field) void pb_release(const pb_msgdesc_t *fields, void *dest_struct) { pb_field_iter_t iter; - + if (!dest_struct) return; /* Ignore NULL pointers, similar to free() */ if (!pb_field_iter_begin(&iter, fields, dest_struct)) return; /* Empty message type */ - + do { pb_release_single_field(&iter); @@ -1339,12 +1339,12 @@ bool pb_decode_svarint(pb_istream_t *stream, pb_int64_t *dest) pb_uint64_t value; if (!pb_decode_varint(stream, &value)) return false; - + if (value & 1) *dest = (pb_int64_t)(~(value >> 1)); else *dest = (pb_int64_t)(value >> 1); - + return true; } @@ -1480,17 +1480,17 @@ static bool checkreturn pb_dec_bytes(pb_istream_t *stream, const pb_field_iter_t uint32_t size; size_t alloc_size; pb_bytes_array_t *dest; - + if (!pb_decode_varint32(stream, &size)) return false; - + if (size > PB_SIZE_MAX) PB_RETURN_ERROR(stream, "bytes overflow"); - + alloc_size = PB_BYTES_ARRAY_T_ALLOCSIZE(size); if (size > alloc_size) PB_RETURN_ERROR(stream, "size too large"); - + if (PB_ATYPE(field->type) == PB_ATYPE_POINTER) { #ifndef PB_ENABLE_MALLOC @@ -1551,7 +1551,7 @@ static bool checkreturn pb_dec_string(pb_istream_t *stream, const pb_field_iter_ if (alloc_size > field->data_size) PB_RETURN_ERROR(stream, "string overflow"); } - + dest[size] = 0; if (!pb_read(stream, dest, (size_t)size)) @@ -1573,10 +1573,10 @@ static bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_i if (!pb_make_string_substream(stream, &substream)) return false; - + if (field->submsg_desc == NULL) PB_RETURN_ERROR(stream, "invalid field descriptor"); - + /* Submessages can have a separate message-level callback that is called * before decoding the message. Typically it is used to set callback fields * inside oneofs. */ @@ -1610,7 +1610,7 @@ static bool checkreturn pb_dec_submessage(pb_istream_t *stream, const pb_field_i status = pb_decode_inner(&substream, field->submsg_desc, field->pData, flags); } - + if (!pb_close_string_substream(stream, &substream)) return false; diff --git a/tweak-py/CMakeLists.txt b/tweak-py/CMakeLists.txt index 7f56fa6..43ecf52 100644 --- a/tweak-py/CMakeLists.txt +++ b/tweak-py/CMakeLists.txt @@ -21,24 +21,22 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # -cmake_minimum_required(VERSION 3.10) - set(LIBRARY_NAME pytweaklib) set(python_module_name tweak2) -find_package(PythonInterp 3 REQUIRED) -find_package(pybind11 QUIET CONFIG) +find_package(Python 3 REQUIRED COMPONENTS Interpreter Development) -if(pybind11_FOUND) - message(STATUS "pybind11: Using system package version ${pybind11_VERSION}") +if(CMAKE_CROSSCOMPILING) + # SDK package must be used to generate correct library suffix e.g. aarch64 + # Bundled pybind would only generate host suffix e.g. x86-64 + find_package(pybind11 REQUIRED) else() set(PYBIND11_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../extern/pybind11") if(NOT EXISTS "${PYBIND11_DIR}/CMakeLists.txt") message( FATAL_ERROR - "pybind11: System package was not found, built-in in also unavailable." - " Please init and update all submodules." - " Searched ${PYBIND11_DIR}") + "pybind11: package was not found." + " Please init and update all submodules." " Searched ${PYBIND11_DIR}") endif() add_subdirectory("${PYBIND11_DIR}" ${CMAKE_CURRENT_BINARY_DIR}/pybind11) @@ -77,27 +75,18 @@ endif() # Installation # ----------------------------------------------------------------------------- -execute_process( - COMMAND - ${PYTHON_EXECUTABLE} -c " -from distutils import sysconfig -print(sysconfig.get_python_lib(prefix='')) - " - OUTPUT_VARIABLE PYTHON_SITE_DIR - OUTPUT_STRIP_TRAILING_WHITESPACE) - -if (MSVC) - cmake_path(SET PYTHON_SITE_DIR NORMALIZE ${PYTHON_SITE_DIR}) +set(PYTHON_SITE_DIR "${Python_SITEARCH}") +if (CMAKE_CROSSCOMPILING) + string(REPLACE "$ENV{OECORE_NATIVE_SYSROOT}/usr/" "" PYTHON_SITE_DIR ${PYTHON_SITE_DIR}) endif() - message(STATUS "Python site packages dir: ${PYTHON_SITE_DIR}") install( FILES ${CMAKE_CURRENT_BINARY_DIR}/__init__.py - DESTINATION ${CMAKE_INSTALL_PREFIX}/${PYTHON_SITE_DIR}/${python_module_name} + DESTINATION ${PYTHON_SITE_DIR}/${python_module_name} COMPONENT python) install( TARGETS ${LIBRARY_NAME} - DESTINATION ${CMAKE_INSTALL_PREFIX}/${PYTHON_SITE_DIR}/${python_module_name} + DESTINATION ${PYTHON_SITE_DIR}/${python_module_name} COMPONENT python) diff --git a/tweak-wire/CMakeLists.txt b/tweak-wire/CMakeLists.txt index d2e7487..a7fe6bc 100644 --- a/tweak-wire/CMakeLists.txt +++ b/tweak-wire/CMakeLists.txt @@ -36,7 +36,7 @@ if(WITH_WIRE_NNG) find_package(nng REQUIRED) endif() -set(${LIBRARY_NAME}_DEPENDENCIES ${PROJECT_NAMESPACE}::common Threads) +set(${LIBRARY_NAME}_DEPENDENCIES ${PROJECT_NAMESPACE}::common) # ------------------------------------------------------------------------------ # Source files @@ -52,6 +52,7 @@ if(WITH_WIRE_NNG) endif() if(WIRE_RPMSG_BACKEND STREQUAL TI_API) + set(WITH_WIRE_RPMSG ON) list( APPEND ${LIBRARY_NAME}_SOURCES @@ -60,6 +61,9 @@ if(WIRE_RPMSG_BACKEND STREQUAL TI_API) ${CMAKE_CURRENT_SOURCE_DIR}/src/tweakwire_rpmsg_transport_ti_api.c ${CMAKE_CURRENT_SOURCE_DIR}/src/tweakwire_rpmsg.c) elseif(WIRE_RPMSG_BACKEND STREQUAL CHRDEV) + set(WITH_WIRE_RPMSG ON) + find_package(RPMSG REQUIRED) + list(APPEND ${LIBRARY_NAME}_DEPENDENCIES RPMSG) list( APPEND ${LIBRARY_NAME}_SOURCES @@ -68,7 +72,6 @@ elseif(WIRE_RPMSG_BACKEND STREQUAL CHRDEV) ${CMAKE_CURRENT_SOURCE_DIR}/src/tweakwire_rpmsg_transport_linux.c ${CMAKE_CURRENT_SOURCE_DIR}/src/tweakwire_rpmsg.c) elseif(WIRE_RPMSG_BACKEND STREQUAL OFF) - else() message( FATAL_ERROR @@ -92,14 +95,17 @@ endif() add_library(${PROJECT_NAMESPACE}::${LIBRARY_NAME} ALIAS ${LIBRARY_NAME}) target_compile_definitions( - ${LIBRARY_NAME} - PRIVATE $<$:WITH_WIRE_NNG> - PRIVATE WIRE_RPMSG_BACKEND_${WIRE_RPMSG_BACKEND}) + ${LIBRARY_NAME} PRIVATE + $<$:WITH_WIRE_NNG> + $<$:WITH_WIRE_RPMSG> + WIRE_RPMSG_BACKEND_${WIRE_RPMSG_BACKEND}) target_link_libraries( ${LIBRARY_NAME} PUBLIC ${PROJECT_NAMESPACE}::common - PRIVATE Threads::Threads $<$:nng::nng>) + PRIVATE + $<$:nng::nng> + $<$:RPMSG::RPMSG>) target_compile_features(${LIBRARY_NAME} PUBLIC c_std_99) diff --git a/tweak-wire/src/tweakwire_rpmsg.c b/tweak-wire/src/tweakwire_rpmsg.c index 045784c..bf52f1a 100644 --- a/tweak-wire/src/tweakwire_rpmsg.c +++ b/tweak-wire/src/tweakwire_rpmsg.c @@ -32,7 +32,9 @@ #include "tweakwire_rpmsg.h" #include "tweakwire_rpmsg_transport.h" +#if defined(TI_ARM_R5F) #include // from vision_apps +#endif #include #include @@ -258,22 +260,21 @@ tweak_wire_connection tweak_wire_create_rpmsg_connection( } #define MIN(x, y) (((x) < (y)) ? (x) : (y)) -enum { CHUNK_NUMBER_OFFSET = 0, CHUNK_COUNT_OFFSET = 1, PAYLOAD_OFFSET = 2}; +#define as_uint16_t(x) (*((uint16_t*)&(x))) +enum { CHUNK_NUMBER_OFFSET = 0, CHUNK_COUNT_OFFSET = 2, PAYLOAD_OFFSET = 4}; static tweak_wire_error_code send_partitioned(struct tweak_wire_rpmsg_transport *transport, - const uint8_t *buffer, uint16_t len) + const uint8_t *buffer, size_t len) { const uint32_t max_chunk_payload_size = tweak_wire_rpmsg_max_chunk_size - PAYLOAD_OFFSET; - uint32_t n_chunks = len / max_chunk_payload_size; - if ((len % max_chunk_payload_size) != 0) { - ++n_chunks; - } - if (n_chunks >= UINT8_MAX) { + uint32_t n_chunks = (len + max_chunk_payload_size - 1) / max_chunk_payload_size; + if (n_chunks >= UINT16_MAX) { + TWEAK_LOG_ERROR("Cannot send more than %u chunks: %u requested", UINT16_MAX - 1, n_chunks); return TWEAK_WIRE_ERROR; } for (uint32_t n_chunk = 0; n_chunk < n_chunks; n_chunk++) { - transport->send_buff[CHUNK_NUMBER_OFFSET] = (uint8_t)(n_chunk + 1); /* start from 1 */ - transport->send_buff[CHUNK_COUNT_OFFSET] = (uint8_t)n_chunks; + as_uint16_t(transport->send_buff[CHUNK_NUMBER_OFFSET]) = (uint16_t)(n_chunk + 1); /* start from 1 */ + as_uint16_t(transport->send_buff[CHUNK_COUNT_OFFSET]) = (uint16_t)n_chunks; uint32_t from = n_chunk * max_chunk_payload_size; uint32_t to = MIN(len, (n_chunk + 1) * max_chunk_payload_size); @@ -287,15 +288,14 @@ static tweak_wire_error_code send_partitioned(struct tweak_wire_rpmsg_transport TWEAK_LOG_ERROR("tweak_wire_rpmsg_transport_send failed: %d", error_code); return error_code; } - TWEAK_LOG_TRACE("%u of %u chunks sent", - n_chunk + 1, n_chunks); + TWEAK_LOG_TRACE("%u of %u chunks sent", n_chunk + 1, n_chunks); } TWEAK_LOG_DEBUG("sent message: %d bytes", len); return TWEAK_WIRE_SUCCESS; } tweak_wire_error_code receive_partitioned(struct tweak_wire_rpmsg_transport *transport, - uint8_t *buffer, uint16_t *len) + uint8_t *buffer, size_t *len) { uint32_t bytes_received = 0; uint32_t n_prev_chunk = 0; @@ -311,7 +311,7 @@ tweak_wire_error_code receive_partitioned(struct tweak_wire_rpmsg_transport *tra if (n_chunk == 0) { TWEAK_LOG_TRACE("tweak_wire_rpmsg_transport_receive() timeout"); } else { - TWEAK_LOG_WARN("Chunk sequence was abrupted prematurely on chunk %d of %d", n_chunk, n_chunks); + TWEAK_LOG_WARN("Chunk sequence stopped prematurely on chunk %d of %d", n_chunk, n_chunks); } return error_code; } @@ -322,23 +322,25 @@ tweak_wire_error_code receive_partitioned(struct tweak_wire_rpmsg_transport *tra } uint16_t chunk_payload_size = chunk_size - PAYLOAD_OFFSET; - n_chunk = transport->recv_buff[CHUNK_NUMBER_OFFSET]; - n_chunks = transport->recv_buff[CHUNK_COUNT_OFFSET]; + n_chunk = as_uint16_t(transport->recv_buff[CHUNK_NUMBER_OFFSET]); + n_chunks = as_uint16_t(transport->recv_buff[CHUNK_COUNT_OFFSET]); if (n_prev_chunk != (n_chunk - 1)) { - TWEAK_LOG_WARN("Chunk sequence was corrupted: chunk sequence number %u, prev chunk sequence number %u", + TWEAK_LOG_ERROR("Chunk sequence was corrupted: chunk sequence number %u, prev chunk sequence number %u", n_chunk, n_prev_chunk); return TWEAK_WIRE_ERROR; } TWEAK_LOG_TRACE("tweak_wire_rpmsg_transport_receive() ok, %u of %u chunks received", n_chunk, n_chunks); n_prev_chunk = n_chunk; + if (bytes_received + chunk_payload_size > *len) { + TWEAK_LOG_ERROR("Buffer is too short, needed at least %u bytes, given %u", + bytes_received + chunk_payload_size, *len); + return TWEAK_WIRE_ERROR; + } + memcpy(&buffer[bytes_received], &transport->recv_buff[PAYLOAD_OFFSET], chunk_payload_size); bytes_received += chunk_payload_size; - if (bytes_received > *len) { - TWEAK_LOG_ERROR("Buffer is too short, needed at least %u bytes, given %u", *len, bytes_received); - return TWEAK_WIRE_ERROR; - } } while (n_chunk != n_chunks); /* ...wait for input message */ @@ -349,15 +351,16 @@ tweak_wire_error_code receive_partitioned(struct tweak_wire_rpmsg_transport *tra return TWEAK_WIRE_SUCCESS; } +#undef as_uint16_t static void *tweak_wire_rpmsg_receive_thread(void *arg) { TWEAK_LOG_TRACE_ENTRY("arg = %p", arg); - uint16_t len; + size_t len; struct tweak_wire_connection_rpmsg *connection = (struct tweak_wire_connection_rpmsg *)arg; tweak_wire_error_code status; do { - len = (uint16_t)sizeof(connection->receive_buffer); + len = sizeof(connection->receive_buffer); status = receive_partitioned(&connection->transport, connection->receive_buffer, &len); if (status == TWEAK_WIRE_SUCCESS) diff --git a/tweak-wire/src/tweakwire_rpmsg_transport.h b/tweak-wire/src/tweakwire_rpmsg_transport.h index 0706524..b451e43 100644 --- a/tweak-wire/src/tweakwire_rpmsg_transport.h +++ b/tweak-wire/src/tweakwire_rpmsg_transport.h @@ -64,10 +64,10 @@ enum tweak_wire_rpmsg_max_message_size = 512, /** - * @brief Maximum amount of data that could be sent - * is 256 packets having 254 bytes payload each. + * @brief Maximum amount of data that could be sent. + * Maximum value supported by the protocol is 65535 packets with 252 bytes payload each. */ - tweak_wire_rpmsg_max_packet_size = UINT16_MAX - (2 * UINT8_MAX), + tweak_wire_rpmsg_max_packet_size = 256 * 1024, /** * @brief RPMSG seem to reject datagrams larger that this. @@ -141,7 +141,7 @@ struct tweak_wire_rpmsg_transport */ int eventfd_unblock; - rpmsg_char_dev_t *rcdev[1]; + rpmsg_char_dev_t *device; #else #error Backend type must be defined #endif diff --git a/tweak-wire/src/tweakwire_rpmsg_transport_linux.c b/tweak-wire/src/tweakwire_rpmsg_transport_linux.c index 81ec2f1..c24fdab 100644 --- a/tweak-wire/src/tweakwire_rpmsg_transport_linux.c +++ b/tweak-wire/src/tweakwire_rpmsg_transport_linux.c @@ -32,16 +32,45 @@ #include #include #include +#include #include #include #include #include -#include -#include +#include +#include #define LINUX_ENDPOINT_NAME "rpmsg_chrdev" +static int32_t create_tx_channel(struct tweak_wire_rpmsg_transport *transport) +{ + transport->remote_proc = R5F_MAIN0_0; + + int32_t fd = -1; + rpmsg_char_dev_t local_dev; + char name[32] = { 0 }; + + snprintf(name, sizeof(name) - 1, "rpmsg-char-%d-%d", transport->remote_proc, getpid()); + + transport->device = rpmsg_char_open(transport->remote_proc, + NULL, + transport->remote_endpoint, + name, + 0 + ); + + if (transport->device != NULL) + { + local_dev = *transport->device; + transport->local_endpoint = local_dev.endpt; + + fd = local_dev.fd; + } + + return fd; +} + tweak_wire_error_code tweak_wire_rpmsg_init_transport( struct tweak_wire_rpmsg_transport *transport, const char* endpoint_name, uint32_t endpoint, const char *params) @@ -78,19 +107,9 @@ tweak_wire_error_code tweak_wire_rpmsg_init_transport( return TWEAK_WIRE_ERROR; } - /* TODO: Remove dependency on CPU Id */ - transport->remote_proc = appIpcGetAppCpuId("mcu2_0"); - transport->remote_endpoint = endpoint; - - /* ...make sure IPC is enabled for remote partner cpu (s) */ - if (appIpcIsCpuEnabled(transport->remote_proc) == false) - { - TWEAK_LOG_ERROR("IPC is not enabled for cpu #%u", transport->remote_proc); - return TWEAK_WIRE_ERROR; - } - /* .. Open RPMSG character device */ - transport->fd = appIpcCreateTxCh(transport->remote_proc, transport->remote_endpoint, &transport->local_endpoint, &transport->rcdev[0]); + transport->remote_endpoint = endpoint; + transport->fd = create_tx_channel(transport); if (transport->fd < 0) { TWEAK_LOG_ERROR("failed to create endpoint %d: %m", transport->local_endpoint); @@ -214,7 +233,7 @@ void tweak_wire_rpmsg_transport_close(struct tweak_wire_rpmsg_transport *transpo { TWEAK_LOG_TRACE_ENTRY("transport = %p", transport); - appIpcDeleteCh(transport->rcdev[0]); + rpmsg_char_close(transport->device); transport->fd = -1; transport->remote_endpoint = 0; transport->local_endpoint = 0; diff --git a/zephyr/CMakeLists.txt b/zephyr/CMakeLists.txt new file mode 100644 index 0000000..fa65340 --- /dev/null +++ b/zephyr/CMakeLists.txt @@ -0,0 +1,76 @@ +# SPDX-License-Identifier: MIT + +# +# CMake build configuration for Cogent Tweak Tool. +# +# Copyright (c) 2022 Cogent Embedded, Inc. ALL RIGHTS RESERVED. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +if(CONFIG_TWEAKTOOL) + + set(TWEAKTOOL_DIR ${ZEPHYR_CURRENT_MODULE_DIR}) + + zephyr_library() + + zephyr_include_directories(${TWEAKTOOL_DIR}/tweak-pickle/src/autogen) + zephyr_include_directories(${TWEAKTOOL_DIR}/extern/uthash/src) + zephyr_include_directories(${TWEAKTOOL_DIR}/tweak-app/include) + zephyr_include_directories(${TWEAKTOOL_DIR}/tweak-common/include) + zephyr_include_directories(${TWEAKTOOL_DIR}/tweak-json/include) + zephyr_include_directories(${TWEAKTOOL_DIR}/tweak-metadata/include) + zephyr_include_directories(${TWEAKTOOL_DIR}/tweak-pickle/include) + zephyr_include_directories(${TWEAKTOOL_DIR}/tweak-wire/include) + zephyr_include_directories(${TWEAKTOOL_DIR}/tweak2lib/include) + + # Custom options + zephyr_compile_definitions(TWEAK_LOG_LEVEL=2) # Test + zephyr_compile_definitions(WITH_WIRE_NNG) + + zephyr_library_sources( + ${TWEAKTOOL_DIR}/tweak-app/src/tweakappclient.c + ${TWEAKTOOL_DIR}/tweak-app/src/tweakappcommon.c + ${TWEAKTOOL_DIR}/tweak-app/src/tweakappfeatures.c + ${TWEAKTOOL_DIR}/tweak-app/src/tweakappqueue.c + ${TWEAKTOOL_DIR}/tweak-app/src/tweakappserver.c + ${TWEAKTOOL_DIR}/tweak-app/src/tweakmodel.c + ${TWEAKTOOL_DIR}/tweak-app/src/tweakmodel_uri_to_tweak_id_index.c + ${TWEAKTOOL_DIR}/tweak-common/src/tweak_id_gen_zephyr.c + ${TWEAKTOOL_DIR}/tweak-common/src/tweakbuffer.c + ${TWEAKTOOL_DIR}/tweak-common/src/tweaklog.c + ${TWEAKTOOL_DIR}/tweak-common/src/tweaklog_format_time_zephyr.c + ${TWEAKTOOL_DIR}/tweak-common/src/tweaklog_out_stderr.c + ${TWEAKTOOL_DIR}/tweak-common/src/tweaklog_thread_id_zephyr.c + ${TWEAKTOOL_DIR}/tweak-common/src/tweakstring.c + ${TWEAKTOOL_DIR}/tweak-common/src/tweakvariant.c + ${TWEAKTOOL_DIR}/tweak-json/src/tweakjson.c + ${TWEAKTOOL_DIR}/tweak-metadata/src/tweakmetadata.c + ${TWEAKTOOL_DIR}/tweak-pickle/src/autogen/pb_common.c + ${TWEAKTOOL_DIR}/tweak-pickle/src/autogen/pb_decode.c + ${TWEAKTOOL_DIR}/tweak-pickle/src/autogen/pb_encode.c + ${TWEAKTOOL_DIR}/tweak-pickle/src/autogen/tweak.pb.c + ${TWEAKTOOL_DIR}/tweak-pickle/src/tweakpickle_client_pb.c + ${TWEAKTOOL_DIR}/tweak-pickle/src/tweakpickle_pb_util.c + ${TWEAKTOOL_DIR}/tweak-pickle/src/tweakpickle_pb_util.h + ${TWEAKTOOL_DIR}/tweak-pickle/src/tweakpickle_server_pb.c + ${TWEAKTOOL_DIR}/tweak-wire/src/tweakwire.c + ${TWEAKTOOL_DIR}/tweak-wire/src/tweakwire_nng.c + ${TWEAKTOOL_DIR}/tweak2lib/src/tweak2.c) +endif() diff --git a/zephyr/Kconfig b/zephyr/Kconfig new file mode 100644 index 0000000..3cd0185 --- /dev/null +++ b/zephyr/Kconfig @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: MIT + +config TWEAKTOOL + bool "Enable support for tweaktool" diff --git a/zephyr/module.yml b/zephyr/module.yml new file mode 100644 index 0000000..a216450 --- /dev/null +++ b/zephyr/module.yml @@ -0,0 +1,6 @@ +name: tweaktool +build: + cmake: zephyr + kconfig: zephyr/Kconfig + depends: + - nng