查看: 89|回复: 0

Dayu210鸿蒙标准系统可执行demo独立编译介绍

[复制链接]

3

主题

1

回帖

20

积分

新手上路

积分
20
发表于 2025-4-13 08:11:09 | 显示全部楼层 |阅读模式
鸿蒙的可执行程序通常是基于鸿蒙源码框架进行编译,但是有时候我们需要编译一些很简单的测试demo,放在鸿蒙框架中编译则会很慢,所以我们可以将鸿蒙的编译文件命令整理出来单独编译。
本文档是基于dayu210(aarch64架构)梳理的快速编译介绍。
一、准备工具

1.1 创建目录ohos_build

该目录用于设置独立编译的配置
  1. mkdir ohos_build
  2. cd ohos_build
  3. mkdir musl
复制代码
1.2 llvm工具链

鸿蒙的llvm工具链位于prebuilts/clang/ohos/linux-x86_64/llvm路径下,将其拷贝到ohos_build目录内。
  1. cp -rf prebuilts/clang/ohos/linux-x86_64/llvm ~/ohos_build
复制代码
1.3 musl库准备

将基于dayu210产品编译好的musl库拷贝到ohos_build下,编译成功的musl库文件位于out/rk3588/obj/third_party/musl路径下。
  1. cp -rf out/rk3588/obj/third_party/musl/usr ~/ohos_build/musl/
复制代码
二、创建编译脚本build.sh

创建编译脚本build.sh内容如下。
  1. #!/bin/bash
  2. set -e
  3. SRC_FILE=$1
  4. if [[ ${SRC_FILE} == "" ]]; then
  5.     SRC_FILE=./demo/demo.c
  6. elif [[ -d ${SRC_FILE} ]]; then
  7.     tmp_path=${SRC_FILE}
  8.     SRC_FILE=""
  9.     for file in ${tmp_path}/*.c; do
  10.         temp_file=`basename $file`
  11.         SRC_FILE="${SRC_FILE} ${tmp_path}/${temp_file}"
  12.     done
  13. elif [[ -f ${SRC_FILE} && "${SRC_FILE##*.}"x = "c"x ]]; then
  14.     SRC_FILE=${SRC_FILE}
  15. else
  16.     echo "Unknow source file: $1"
  17.     exit 1
  18. fi
  19. DST_FILE=$2
  20. if [[ ${DST_FILE} == "" ]]; then
  21.     DST_FILE=./demo_test
  22. fi
  23. CLANG=./llvm/bin/clang
  24. CFLAGS="-D__MUSL__ -Xclang -mllvm -Xclang -instcombine-lower-dbg-declare=0 -mfloat-abi=hard"
  25. MUSL_PATH="./musl"
  26. TARGET_ARCH="aarch64-linux-ohos"
  27. ${CLANG} ${CFLAGS} -I${MUSL_PATH}/usr/include/${TARGET_ARCH} --target=${TARGET_ARCH} -march=armv8-a --sysroot=${MUSL_PATH} ${SRC_FILE} -o ${DST_FILE}
  28. echo "编译成功的可执行文件位于: ${DST_FILE}"
复制代码
三、build.sh编译脚本功能介绍

本编译脚本支持默认编译、单独文件编译、指定目录下多文件编译三种功能以及指定输出编译结果。
3.1 默认编译

默认编译的时候将要写的测试用例保存在ohos_build/demo目录下,测试用例命名为demo.c,当我们运行脚本不添加参数时默认编译的源代码文件为demo/demo.c,输出的文件为demo_test。
编译命令如下:
  1. ./build.sh
复制代码
3.2 单独文件编译

build.sh编译脚本的第一个参数便是指定编译文件的路径,最好是绝对路径,源码必须是c文件且文件存在;第二个参数是输出文件名,可以省略,默认值为demo_test。
参考编译示例如下:
  1. ./build.sh demo/demo.c demo_test
复制代码
3.3 指定目录下多文件编译

build.sh编译脚本的第一个参数便是指定编译源码目录的路径,最好是绝对路径,源码必须全部是c文件且只能有一个main函数;第二个参数是输出文件名,可以省略,默认值为demo_test。
参考编译示例如下:
  1. ./build.sh multi_files multi_files_test
复制代码
3.4 指定输出编译结果

build.sh编译脚本的第二个参数是输出文件名,可以省略,默认值为demo_test,如果源码文件或路径省略则输出结果文件名必须省略,不然只会当作源码文件处理。
四、配置好的源码仓介绍

按照上述介绍配置好的环境代码仓位于https://gitee.com/itopen/ohos_build.git,同时提供了demo和multi_files的样例,可以直接使用。
[code][/code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表