diff --git a/thirdparty/libwebsockets/HPKBUILD b/thirdparty/libwebsockets/HPKBUILD new file mode 100644 index 0000000000000000000000000000000000000000..8dcb2d25935aff38d1114279e9f0ebc4442f50d5 --- /dev/null +++ b/thirdparty/libwebsockets/HPKBUILD @@ -0,0 +1,130 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Contributor: jiajiawei <2968675576@qq.com> +# Maintainer: jiajiawei <2968675576@qq.com> + +pkgname=libwebsockets +pkgver=v4.3.3 +pkgrel=0 +pkgdesc="Libwebsockets (LWS) is a lightweight and pure C library that allows you to implement various network protocols easily with a nonblocking event loop. " +url="https://libwebsockets.org/" +archs=("armeabi-v7a" "arm64-v8a") +license=("MIT License" "BSD2" "BSD3" "ZLIB" "APACHE2" "CC0") +depends=("openssl_1_0_2u" "zlib" "sqlite" "libuv" "libevent") +makedepends=() + +# 官方下载地址https://github.com/libwebsockets/$pkgname/archive/refs/tags/$pkgver.zip受网络影响可能存在下载失败的情况,现使用gitee镜像可以与官方仓库保持同步 +source="https://gitee.com/mirrors/${pkgname}source/repository/archive/$pkgver.zip" + +downloadpackage=true +autounpack=true +builddir=${pkgname}source-${pkgver} +packagename=$builddir.zip + +prepare() { + mkdir -p $builddir/$ARCH-build +} + +# 编译armeabi-v7a添加openssl_1_0_2u依赖,编译arm64-v8a关闭openssl_1_0_2u依赖 +# -DLWS_OPENSSL_SUPPORT=1 支持openssl +# -DLWS_WITH_ZLIB=ON 添加zlib依赖 +# -DLWS_WITH_SQLITE3=ON 添加sqlite依赖 +# -DLWS_WITH_LIBUV=ON 添加libuv依赖 +# -DLWS_WITH_LIBEVENT=ON 添加libevent依赖 +# -DLWS_ROLE_MQTT=ON 添加MQTT client注释 +# -DLWS_IPV6=ON 添加IPV6的支持 +# -DLWS_WITH_LWSWS=ON 添加Libwebsockets Webserve的支持 +# -DLWS_WITH_HTTP_PROXY=ON 添加active HTTP proxying的支持 +# -DLWS_WITH_ZIP_FOPS=ON 添加serving pre-zipped files的支持 +# -DLWS_WITH_SOCKS5=ON 允许在客户端连接中使用SOCKS5代理 +# -DLWS_ROLE_RAW_PROXY=ON 添加Raw packet proxy的支持 +# -DLWS_WITH_PEER_LIMITS=ON 追踪对等方并限制单个对等方可以分配的资源 +# -DLWS_WITH_RANGES=ON 支持http ranges (RFC7233) +# -DLWS_WITH_THREADPOOL=ON 支持受控的工作线程池(依赖于pthread) +# -DLWS_WITH_HTTP_STREAM_COMPRESSION=ON 支持HTTP流压缩 +# -DLWS_WITH_ALSA=ON 启用alsa音频示例 +# -DLWS_WITH_GTK=ON 启用gtk示例 +# -DLWS_WITH_FTS=ON 支持全文搜索 +# -DLWS_WITH_SYS_ASYNC_DNS=ON 支持非阻塞的内部IPv4 + IPv6 DNS解析器 +# -DLWS_WITH_SYS_DHCP_CLIENT=ON 内置的小型ntp客户端适用于TLS日期验证并通过lws_system运行 +# -DLWS_WITH_SYS_FAULT_INJECTION=ON 支持内置的小型DHCP客户端 +# -DLWS_WITH_SYS_METRICS=ON 启用故障注入支持 +# -DLWS_WITH_SECURE_STREAMS=ON 支持Lws Metrics AP +# -DLWS_WITH_SECURE_STREAMS_PROXY_API=ON 支持 Secure Streams protocol-agnostic API +# -DLWS_WITH_SECURE_STREAMS_AUTH_SIGV4=ON 将 Secure Streams 支持扩展到跨进程工作 +# -DLWS_WITH_SECURE_STREAMS_BUFFER_DUMP=ON 将 Secure Streams Auth 支持扩展到 AWS Sigv4 +build() { + cd $builddir + if [ $ARCH == "armeabi-v7a" ] + then + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" \ + -DLWS_OPENSSL_SUPPORT=1 \ + -DLWS_OPENSSL_INCLUDE_DIRS="$LYCIUM_ROOT/usr/openssl_1_0_2u/$ARCH/include" \ + -DLWS_OPENSSL_LIBRARIES="$LYCIUM_ROOT/usr/openssl_1_0_2u/$ARCH/lib/libssl.a;$LYCIUM_ROOT/usr/openssl_1_0_2u/$ARCH/lib/libcrypto.a" \ + -DLWS_WITH_ZLIB=ON \ + -DLWS_ZLIB_LIBRARIES="$LYCIUM_ROOT/usr/zlib/$ARCH/lib/libz.a" \ + -DLWS_ZLIB_INCLUDE_DIRS="$LYCIUM_ROOT/usr/zlib/$ARCH/include" \ + -DLWS_WITH_SQLITE3=ON \ + -DLWS_SQLITE3_LIBRARIES="$LYCIUM_ROOT/usr/sqlite/$ARCH/lib/libsqlite3.a" \ + -DLWS_SQLITE3_INCLUDE_DIRS="$LYCIUM_ROOT/usr/sqlite/$ARCH/include" \ + -DLWS_WITH_LIBUV=ON \ + -DLWS_LIBUV_LIBRARIES="$LYCIUM_ROOT/usr/libuv/$ARCH/lib/libuv_a.a" \ + -DLWS_LIBUV_INCLUDE_DIRS="$LYCIUM_ROOT/libuv/$ARCH/include" \ + -DLWS_WITH_LIBEVENT=ON \ + -DLIBEVENT_LIBRARIES="$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_core.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_extra.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_openssl.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_pthreads.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent.a" \ + -DLIBEVENT_INCLUDE_DIRS="$LYCIUM_ROOT/usr/libevent/$ARCH/include" \ + -DLWS_ROLE_MQTT=ON -DLWS_IPV6=ON -DLWS_WITH_LWSWS=ON -DLWS_WITH_HTTP_PROXY=ON -DLWS_WITH_ZIP_FOPS=ON -DLWS_WITH_SOCKS5=ON -DLWS_ROLE_RAW_PROXY=ON -DLWS_WITH_PEER_LIMITS=ON -DLWS_WITH_RANGES=ON -DLWS_WITH_THREADPOOL=ON -DLWS_WITH_HTTP_STREAM_COMPRESSION=ON -DLWS_WITH_ALSA=ON -DLWS_WITH_GTK=ON -DLWS_WITH_FTS=ON -DLWS_WITH_SYS_ASYNC_DNS=ON -DLWS_WITH_SYS_DHCP_CLIENT=ON -DLWS_WITH_SYS_FAULT_INJECTION=ON -DLWS_WITH_SYS_METRICS=ON -DLWS_WITH_SECURE_STREAMS=ON -DLWS_WITH_SECURE_STREAMS_PROXY_API=ON -DLWS_WITH_SECURE_STREAMS_AUTH_SIGV4=ON -DLWS_WITH_SECURE_STREAMS_BUFFER_DUMP=ON \ + -DCMAKE_C_FLAGS="-Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-command-line-argument" \ + -B$ARCH-build -S./ > $buildlog 2>&1 + elif [ $ARCH == "arm64-v8a" ] + then + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" \ + -DLWS_WITH_SSL=OFF \ + -DLWS_WITH_ZLIB=ON \ + -DLWS_ZLIB_LIBRARIES="$LYCIUM_ROOT/usr/zlib/$ARCH/lib/libz.a" \ + -DLWS_ZLIB_INCLUDE_DIRS="$LYCIUM_ROOT/usr/zlib/$ARCH/include" \ + -DLWS_WITH_SQLITE3=ON \ + -DLWS_SQLITE3_LIBRARIES="$LYCIUM_ROOT/usr/sqlite/$ARCH/lib/libsqlite3.a" \ + -DLWS_SQLITE3_INCLUDE_DIRS="$LYCIUM_ROOT/usr/sqlite/$ARCH/include" \ + -DLWS_WITH_LIBUV=ON \ + -DLWS_LIBUV_LIBRARIES="$LYCIUM_ROOT/usr/libuv/$ARCH/lib/libuv_a.a" \ + -DLWS_LIBUV_INCLUDE_DIRS="$LYCIUM_ROOT/libuv/$ARCH/include" \ + -DLWS_WITH_LIBEVENT=ON \ + -DLIBEVENT_LIBRARIES="$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_core.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_extra.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_openssl.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent_pthreads.a;$LYCIUM_ROOT/usr/libevent/$ARCH/lib/libevent.a" \ + -DLIBEVENT_INCLUDE_DIRS="$LYCIUM_ROOT/usr/libevent/$ARCH/include" \ + -B$ARCH-build -S./ > $buildlog 2>&1 + else + echo "${ARCH} not support" + fi + $MAKE VERBOSE=1 -C $ARCH-build >> $buildlog 2>&1 # 此处使用$MAKE,在lycium/build.sh中定义,变量值为make -j32。日志路径使用变量build.log + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir + make -C $ARCH-build install >> $buildlog 2>&1 # 日志路径使用变量build.log + cd $OLDPWD +} + +check() { + echo "The test must be on an OpenHarmony device!" + # TODO +} + +# 清理环境 +cleanbuild() { + rm -rf ${PWD}/$builddir #${PWD}/$packagename +} \ No newline at end of file diff --git a/thirdparty/libwebsockets/HPKCHECK b/thirdparty/libwebsockets/HPKCHECK new file mode 100644 index 0000000000000000000000000000000000000000..54e70fbd28a83dec2c93b63683d4e2d49b047b11 --- /dev/null +++ b/thirdparty/libwebsockets/HPKCHECK @@ -0,0 +1,31 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Contributor: jiajiawei <2968675576@qq.com> +# Maintainer: jiajiawei <2968675576@qq.com> + +source HPKBUILD > /dev/null 2>&1 +logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log + +openharmonycheck() { + res=0 + cd ${builddir}/${ARCH}-build/bin + ./libwebsockets-test-server > ${logfile} 2>&1 + res=$? + if [ $res -ne 0 ]; then + cd $OLDPWD + return $res + fi + cd $OLDPWD + return $res +} \ No newline at end of file diff --git a/thirdparty/libwebsockets/README.OpenSource b/thirdparty/libwebsockets/README.OpenSource new file mode 100644 index 0000000000000000000000000000000000000000..84bed58bed7b7086aa9de4aec8f4ec2963a51d0e --- /dev/null +++ b/thirdparty/libwebsockets/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "libwebsockets", + "License": "MIT License", + "License File": "https://github.com/warmcat/libwebsockets/blob/main/LICENSE", + "Version Number": "v4.3.3", + "Owner": "jia_jiahao@runkaihong.com.cn", + "Upstream URL": "https://libwebsockets.org/", + "Description": "Libwebsockets (LWS) is a lightweight and pure C library that allows you to implement various network protocols easily with a nonblocking event loop" + } +] \ No newline at end of file diff --git a/thirdparty/libwebsockets/README_zh.md b/thirdparty/libwebsockets/README_zh.md new file mode 100644 index 0000000000000000000000000000000000000000..302b112b045467b0a5a1b34a348f9e45499e6b3a --- /dev/null +++ b/thirdparty/libwebsockets/README_zh.md @@ -0,0 +1,9 @@ +# libwebsockets 三方库说明 +## 功能简介 +libwebsockets是一款轻量级用来开发服务器和客户端的C库。 +## 三方库版本 +- v4.3.3 +## 使用约束 +- [IDE和SDK版本](../../docs/constraint.md) +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) \ No newline at end of file diff --git a/thirdparty/libwebsockets/SHA512SUM b/thirdparty/libwebsockets/SHA512SUM new file mode 100644 index 0000000000000000000000000000000000000000..9189fd8e361523b3a1075721ca8e8d05303d2fb8 --- /dev/null +++ b/thirdparty/libwebsockets/SHA512SUM @@ -0,0 +1 @@ +fb9e8c139c8b32532fac8b36ef43b0a6cca64709d5653b427de04979c459e4261c7ec92780359a77c15d72db31b393d8f8e08ad2913f91e0ada5ebe30ae736fb libwebsocketssource-v4.3.3.zip \ No newline at end of file diff --git a/thirdparty/libwebsockets/docs/hap_integrate.md b/thirdparty/libwebsockets/docs/hap_integrate.md new file mode 100644 index 0000000000000000000000000000000000000000..f4f95ac17a575c26f16fe7ed285c7664f7b212c9 --- /dev/null +++ b/thirdparty/libwebsockets/docs/hap_integrate.md @@ -0,0 +1,80 @@ +# libwebsockets在OpenHarHarmony上运行 + +本库是在RK3568开发板上基于OpenHarmony4.1 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +## 开发环境 + +- [开发环境准备](../../../docs/hap_integrate_environment.md) + +## 编译三方库 + +- 下载本仓库 + + ``` + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 三方库目录结构 + + ```shell + tpc_c_cplusplus/thirdparty/libwebsockets #三方库libwebsockets的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── README_zh.md #libwebsockets说明文档 + ├── SHA512SUM #三方库校验文件 + ├── OAT.xml #OAT开源审查文本 + ``` + +- 在lycium目录下编译三方库 + 编译环境的搭建参考[准备三方库构建环境](../../../lycium/README.md#1编译环境准备) + + ``` + cd lycium + ./build.sh libwebsockets + ``` + +- 三方库头文件及生成的库 + + 在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库和头文件 + + ```shell + libwebsockets/arm64-v8a + libwebsockets/armeabi-v7a + ``` +- [测试三方库](#测试三方库) + + +## 应用中使用三方库 +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库拷贝到该目录下 +   + +![alt text](./pic/thirdparty.png) + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + +```shell +#将三方库加入工程中 +target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libwebsockets/${OHOS_ARCH}/lib/libwebsockets.a) +#将三方库的头文件加入工程中 +target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libwebsockets/${OHOS_ARCH}/include) +``` + +![alt text](./pic/target_link_libraries.png) + +## 测试三方库 + +- 编译出可执行的文件进行测试,[准备三方库测试环境](../../../lycium/README.md#3ci环境准备) + +- 将tpc_c_cplusplus发送至rk3568开发板data目录,进入到构建目录运行测试用例(注意arm64-v8a-build为构建64位的目录,armeabi-v7a-build为构建32位的目录),执行结果如图所示 +``` +cd data/tpc_c_cplusplus/thirdparty/libwebsockets/libwebsocketssource-v4.3.3/arm64-v8a-build/bin +./libwebsockets-test-server +``` +![alt text](./pic/test.png) + +## 参考资料 + +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) +- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) +- [通过DevEco Studio开发一个NAPI工程](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md) diff --git a/thirdparty/libwebsockets/docs/pic/target_link_libraries.png b/thirdparty/libwebsockets/docs/pic/target_link_libraries.png new file mode 100644 index 0000000000000000000000000000000000000000..045ffd0ba3b8d012aa810d5393d1dc8336bae1a9 Binary files /dev/null and b/thirdparty/libwebsockets/docs/pic/target_link_libraries.png differ diff --git a/thirdparty/libwebsockets/docs/pic/test.png b/thirdparty/libwebsockets/docs/pic/test.png new file mode 100644 index 0000000000000000000000000000000000000000..9a566dc9a454089da690a54a9ead1645edd94981 Binary files /dev/null and b/thirdparty/libwebsockets/docs/pic/test.png differ diff --git a/thirdparty/libwebsockets/docs/pic/thirdparty.png b/thirdparty/libwebsockets/docs/pic/thirdparty.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe56f248a3b155f2b52b696294db517b8f0fea6 Binary files /dev/null and b/thirdparty/libwebsockets/docs/pic/thirdparty.png differ