From 1c36778750f8f146f1cf3d6f2c8925aa45856545 Mon Sep 17 00:00:00 2001 From: NEU-lab <2942375747@qq.com> Date: Sun, 22 Sep 2024 23:13:34 +0800 Subject: [PATCH] =?UTF-8?q?bdwgc-8.0.0=EF=BC=9B=E6=96=B0=E5=A2=9E=E4=B8=89?= =?UTF-8?q?=E6=96=B9=E5=BA=93bdwgc-8.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: NEU-lab <2942375747@qq.com> --- thirdparty/bdwgc-8.0.0/HPKBUILD | 73 +++++++++ thirdparty/bdwgc-8.0.0/HPKCHECK | 29 ++++ thirdparty/bdwgc-8.0.0/OAT.xml | 16 ++ thirdparty/bdwgc-8.0.0/README.OpenSource | 11 ++ thirdparty/bdwgc-8.0.0/README_zh.md | 9 ++ thirdparty/bdwgc-8.0.0/SHA512SUM | 1 + .../bdwgc-8.0.0/bdwgc-8.0.0_oh_pkg.patch | 151 ++++++++++++++++++ thirdparty/bdwgc-8.0.0/docs/hap_integrate.md | 76 +++++++++ .../docs/pic/bdwgc_install_dir.png | Bin 0 -> 11934 bytes .../bdwgc-8.0.0/docs/pic/bdwgc_test.png | Bin 0 -> 26090 bytes 10 files changed, 366 insertions(+) create mode 100644 thirdparty/bdwgc-8.0.0/HPKBUILD create mode 100644 thirdparty/bdwgc-8.0.0/HPKCHECK create mode 100644 thirdparty/bdwgc-8.0.0/OAT.xml create mode 100644 thirdparty/bdwgc-8.0.0/README.OpenSource create mode 100644 thirdparty/bdwgc-8.0.0/README_zh.md create mode 100644 thirdparty/bdwgc-8.0.0/SHA512SUM create mode 100644 thirdparty/bdwgc-8.0.0/bdwgc-8.0.0_oh_pkg.patch create mode 100644 thirdparty/bdwgc-8.0.0/docs/hap_integrate.md create mode 100644 thirdparty/bdwgc-8.0.0/docs/pic/bdwgc_install_dir.png create mode 100644 thirdparty/bdwgc-8.0.0/docs/pic/bdwgc_test.png diff --git a/thirdparty/bdwgc-8.0.0/HPKBUILD b/thirdparty/bdwgc-8.0.0/HPKBUILD new file mode 100644 index 00000000..ddfd0938 --- /dev/null +++ b/thirdparty/bdwgc-8.0.0/HPKBUILD @@ -0,0 +1,73 @@ +# 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: wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangyihao<2471389@stu.neu.edu.cn>, wangying +# Maintainer: wangyihao<2471389@stu.neu.edu.cn>, wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangying + +pkgname=bdwgc-8.0.0 +pkgver=v8.0.0 +pkgrel=0 +pkgdesc="bdwgc is a conservative garbage collector for C and C++." +url="https://github.com/ivmai/bdwgc/tree/v8.0.0" +archs=("armeabi-v7a" "arm64-v8a") +license=("MIT license") +depends=() +makedepends=() +source="https://github.com/ivmai/bdwgc/archive/refs/tags/v8.0.0.zip" + +downloadpackage=true +autounpack=true +buildtools=cmake +patchflag=true + +builddir=bdwgc-8.0.0 +packagename=bdwgc-v8.0.0.zip + +# 为编译设置环境,如设置环境变量,创建编译目录等 +prepare() { + if $patchflag + then + cd $builddir + patch -p1 < `pwd`/../bdwgc-8.0.0_oh_pkg.patch + # patch只需要打一次,关闭打patch + patchflag=false + cd $OLDPWD + fi + mkdir -p $builddir/$ARCH-build +} + +build() { + cd $builddir + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -DCMAKE_C_FLAGS="-Wno-unused-command-line-argument" \ + -DCMAKE_CXX_FLAGS="-Wno-unused-command-line-argument" -B$ARCH-build -S./ > $buildlog 2>&1 + $MAKE VERBOSE=1 -C $ARCH-build >> $buildlog 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir + $MAKE -C $ARCH-build install >> $buildlog 2>&1 + cd $OLDPWD +} + + +check() { + echo "The test must be on an OpenHarmony device!" +} + + +cleanbuild() { + rm -rf ${PWD}/$builddir +} \ No newline at end of file diff --git a/thirdparty/bdwgc-8.0.0/HPKCHECK b/thirdparty/bdwgc-8.0.0/HPKCHECK new file mode 100644 index 00000000..30cecfd0 --- /dev/null +++ b/thirdparty/bdwgc-8.0.0/HPKCHECK @@ -0,0 +1,29 @@ +# 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: wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangyihao<2471389@stu.neu.edu.cn>, wangying +# Maintainer: wangyihao<2471389@stu.neu.edu.cn>, wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangying + +source HPKBUILD > /dev/null 2>&1 # 导入HPKBUILD文件 +logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${OHOS_SDK_VER}_test.log + +# 在OH环境执行测试的接口 +openharmonycheck() { + res=0 + cd ${builddir}/${ARCH}-build # 进入到测试目录 + ctest > ${logfile} 2>&1 # 执行测试命令并将测试结果导出到${logfile} + res=$? + cd $OLDPWD + + return $res +} \ No newline at end of file diff --git a/thirdparty/bdwgc-8.0.0/OAT.xml b/thirdparty/bdwgc-8.0.0/OAT.xml new file mode 100644 index 00000000..eeb1f946 --- /dev/null +++ b/thirdparty/bdwgc-8.0.0/OAT.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/bdwgc-8.0.0/README.OpenSource b/thirdparty/bdwgc-8.0.0/README.OpenSource new file mode 100644 index 00000000..fbf869ae --- /dev/null +++ b/thirdparty/bdwgc-8.0.0/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "bdwgc-8.0.0", + "License": "MIT license", + "License File": "https://github.com/ivmai/bdwgc/blob/master/LICENSE", + "Version Number": "v8.0.0", + "Owner": "2942375747@qq.com", + "Upstream URL": "https://github.com/ivmai/bdwgc", + "Description": "bdwgc is a conservative garbage collector for C and C++." + } +] \ No newline at end of file diff --git a/thirdparty/bdwgc-8.0.0/README_zh.md b/thirdparty/bdwgc-8.0.0/README_zh.md new file mode 100644 index 00000000..5a4f7a79 --- /dev/null +++ b/thirdparty/bdwgc-8.0.0/README_zh.md @@ -0,0 +1,9 @@ +# bdwgc-8.0.0三方库说明 +## 功能简介 +bdwgc-8.0.0是一个面向C和c++的保守垃圾收集器 +## 三方库版本: +- v8.0.0 +## 使用约束: +- [IDE和SDK版本](../../docs/constraint.md) +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) diff --git a/thirdparty/bdwgc-8.0.0/SHA512SUM b/thirdparty/bdwgc-8.0.0/SHA512SUM new file mode 100644 index 00000000..802cd20c --- /dev/null +++ b/thirdparty/bdwgc-8.0.0/SHA512SUM @@ -0,0 +1 @@ +36f81a9ee99ef32905e2e1ed8601da6d1bd03d064291b30706aa7609e69eb4db8723b6c03ff7caf3c0fb9389fe151a4dfd58dec7e302fb403649a9f9c2c6be22 bdwgc-v8.0.0.zip \ No newline at end of file diff --git a/thirdparty/bdwgc-8.0.0/bdwgc-8.0.0_oh_pkg.patch b/thirdparty/bdwgc-8.0.0/bdwgc-8.0.0_oh_pkg.patch new file mode 100644 index 00000000..c65e9a9b --- /dev/null +++ b/thirdparty/bdwgc-8.0.0/bdwgc-8.0.0_oh_pkg.patch @@ -0,0 +1,151 @@ +--- bdwgc-8.0.0_old/os_dep.c 2018-09-05 06:10:55.000000000 +0800 ++++ bdwgc-8.0.0/os_dep.c 2024-09-02 11:21:27.546371962 +0800 +@@ -18,7 +18,7 @@ + + #if !defined(OS2) && !defined(PCR) && !defined(AMIGA) && !defined(MACOS) \ + && !defined(MSWINCE) && !defined(SN_TARGET_ORBIS) \ +- && !defined(SN_TARGET_PSP2) && !defined(__CC_ARM) ++ && !defined(SN_TARGET_PSP2) && !defined(__CC_ARM) && !defined(__OHOS__) + # include + # if !defined(MSWIN32) && !defined(MSWIN_XBOX1) + # include +@@ -504,14 +504,14 @@ + ptr_t GC_data_start = NULL; + + EXTERN_C_BEGIN +- extern char **environ; ++ // extern char **environ; + EXTERN_C_END + + GC_INNER void GC_init_netbsd_elf(void) + { + /* This may need to be environ, without the underscore, for */ + /* some versions. */ +- GC_data_start = GC_find_limit((ptr_t)&environ, FALSE); ++ // GC_data_start = GC_find_limit((ptr_t)&environ, FALSE); + } + #endif /* NETBSD */ + +@@ -1531,7 +1531,7 @@ + /* with SunOS dynamic loading), or GC_mark_roots needs to check for */ + /* them (as we do with PCR). Called with allocator lock held. */ + # ifdef OS2 +- ++#ifndef __OHOS__ + void GC_register_data_segments(void) + { + PTIB ptib; +@@ -1717,6 +1717,7 @@ + # else + # define GetWriteWatch_alloc_flag 0 + # endif /* !GWW_VDB */ ++#endif + + # if defined(MSWIN32) || defined(MSWINCE) || defined(CYGWIN32) + +@@ -1916,7 +1917,7 @@ + if (base != limit) GC_add_roots_inner(base, limit, FALSE); + } + #endif /* MSWIN32 */ +- ++#if !defined(__OHOS__) + void GC_register_data_segments(void) + { + # ifdef MSWIN32 +@@ -1924,7 +1925,7 @@ + /* any other GC global variable would fit too. */ + # endif + } +- ++#endif + # else /* !OS2 && !Windows */ + + # if (defined(SVR4) || defined(AIX) || defined(DGUX) \ +@@ -2007,7 +2008,7 @@ + # undef GC_AMIGA_DS + + #elif defined(OPENBSD) +- ++#if !defined(__OHOS__) + /* Depending on arch alignment, there can be multiple holes */ + /* between DATASTART and DATAEND. Scan in DATASTART .. DATAEND */ + /* and register each region. */ +@@ -2027,7 +2028,7 @@ + region_start = GC_skip_hole_openbsd(region_end, DATAEND); + } + } +- ++#endif + # else /* !OS2 && !Windows && !AMIGA && !OPENBSD */ + + # if !defined(PCR) && !defined(MACOS) && defined(REDIRECT_MALLOC) \ +@@ -2036,7 +2037,7 @@ + extern caddr_t sbrk(int); + EXTERN_C_END + # endif +- ++#if !defined(__OHOS__) + void GC_register_data_segments(void) + { + # if !defined(PCR) && !defined(MACOS) +@@ -2105,7 +2106,7 @@ + /* Dynamic libraries are added at every collection, since they may */ + /* change. */ + } +- ++#endif + # endif /* !AMIGA */ + # endif /* !MSWIN32 && !MSWINCE */ + # endif /* !OS2 */ +--- bdwgc-8.0.0_old/misc.c 2018-09-05 06:10:55.000000000 +0800 ++++ bdwgc-8.0.0/misc.c 2024-09-02 11:40:15.563734838 +0800 +@@ -1277,7 +1277,10 @@ + + /* Add initial guess of root sets. Do this first, since sbrk(0) */ + /* might be used. */ +- if (GC_REGISTER_MAIN_STATIC_DATA()) GC_register_data_segments(); ++ if (GC_REGISTER_MAIN_STATIC_DATA()) ++ #ifndef __OHOS__ ++ GC_register_data_segments(); ++ #endif + GC_init_headers(); + GC_bl_init(); + GC_mark_init(); + +--- bdwgc-8.0.0_old/CMakeLists.txt 2018-09-05 06:10:55.000000000 +0800 ++++ bdwgc-8.0.0/CMakeLists.txt 2024-09-02 18:26:14.137861542 +0800 +@@ -248,14 +248,25 @@ + + ADD_LIBRARY( gcmt-dll SHARED ${SRC}) + +-IF(WIN32) +- ADD_EXECUTABLE(cord cord/cordbscs.c cord/cordxtra.c +- cord/tests/de.c cord/tests/de_win.c) +- SET_TARGET_PROPERTIES(cord PROPERTIES WIN32_EXECUTABLE TRUE) +- SET_TARGET_PROPERTIES(cord PROPERTIES +- COMPILE_DEFINITIONS GC_NOT_DLL) +- TARGET_LINK_LIBRARIES(cord gc-lib) +- TARGET_LINK_LIBRARIES(cord gdi32) +-ENDIF(WIN32) ++#IF(WIN32) ++# ADD_EXECUTABLE(cord cord/cordbscs.c cord/cordxtra.c ++# cord/tests/de.c cord/tests/de_win.c) ++# SET_TARGET_PROPERTIES(cord PROPERTIES WIN32_EXECUTABLE TRUE) ++# SET_TARGET_PROPERTIES(cord PROPERTIES ++# COMPILE_DEFINITIONS GC_NOT_DLL) ++# TARGET_LINK_LIBRARIES(cord gc-lib) ++# TARGET_LINK_LIBRARIES(cord gdi32) ++#ENDIF(WIN32) ++set(TARGET_NAME bdwgc-8.0.0) ++set(TARGET_INSTALL_INCLUDEDIR "include") ++set(TARGET_INSTALL_LIBDIR "lib") ++# װ̬ ++install(TARGETS gcmt-lib ++ ARCHIVE DESTINATION ${TARGET_INSTALL_LIBDIR}) ++ ++# װ ++install(TARGETS gcmt-lib ++ LIBRARY DESTINATION ${TARGET_INSTALL_LIBDIR}) ++ + + ADD_SUBDIRECTORY(tests) diff --git a/thirdparty/bdwgc-8.0.0/docs/hap_integrate.md b/thirdparty/bdwgc-8.0.0/docs/hap_integrate.md new file mode 100644 index 00000000..0120b7fd --- /dev/null +++ b/thirdparty/bdwgc-8.0.0/docs/hap_integrate.md @@ -0,0 +1,76 @@ +# bdwgc-8.0.0集成到应用hap + +本库是在RK3568开发板上基于OpenHarmony3.2 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +## 开发环境 + +- [开发环境准备](../../../docs/hap_integrate_environment.md) + +## 编译三方库 + +- 下载本仓库 + + ```shell + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 三方库目录结构 + + ```shell + tpc_c_cplusplus/thirdparty/bdwgc-8.0.0 #三方库bdwgc-8.0.0的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── HPKCHECK #测试脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md #三方库简介 + ``` + +- 在lycium目录下编译三方库 + + 编译环境的搭建参考[准备三方库构建环境](../../../lycium/README.md#1编译环境准备) + + ```shell + cd lycium + ./build.sh bdwgc-8.0.0 + ``` + +- 三方库头文件及生成的库 + + 在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + + ```shell + bdwgc-8.0.0/arm64-v8a bdwgc-8.0.0/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +- 编译出可执行的文件进行测试,[准备三方库测试环境](../../../lycium/README.md#3ci环境准备) +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的头文件拷贝到该目录下,将编译生成的三方库以及依赖库全部(动态库名字带版本号和不带版本号的都需要)拷贝到工程的libs目录下,如下图所示: +   + +  ![thirdparty_install_dir](pic/bdwgc_install_dir.png) + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + + ```shell + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/bdwgc/${OHOS_ARCH}/lib/libgcmt-lib.a) + ``` + +## 测试三方库 +进入到构建目录运行测试用例(注意arm64-v8a为构建64位的目录,armeabi-v7a为构建32位的目录),执行结果如图所示 + +```shell + cd /data/tpc_c_cplusplus/thirdparty/bdwgc-8.0.0/bdwgc-8.0.0/arm64-v8a-build/ + ./ctest +``` + ![bdwgc_test](pic/bdwgc_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) \ No newline at end of file diff --git a/thirdparty/bdwgc-8.0.0/docs/pic/bdwgc_install_dir.png b/thirdparty/bdwgc-8.0.0/docs/pic/bdwgc_install_dir.png new file mode 100644 index 0000000000000000000000000000000000000000..a0dbbf20b92693df38b1efb5ee22c85282b2c3e2 GIT binary patch literal 11934 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 GzV$!qiTt|& literal 0 HcmV?d00001 diff --git a/thirdparty/bdwgc-8.0.0/docs/pic/bdwgc_test.png b/thirdparty/bdwgc-8.0.0/docs/pic/bdwgc_test.png new file mode 100644 index 0000000000000000000000000000000000000000..326cf80e10ed22b3cd2726f96efda67f96447392 GIT binary patch literal 26090 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 literal 0 HcmV?d00001 -- Gitee