2021-03-11 18:43:57 +08:00
|
|
|
# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
|
|
|
|
# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
|
|
|
|
#
|
|
|
|
# Redistribution and use in source and binary forms, with or without modification,
|
|
|
|
# are permitted provided that the following conditions are met:
|
|
|
|
#
|
|
|
|
# 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
|
|
# conditions and the following disclaimer.
|
|
|
|
#
|
|
|
|
# 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
|
|
|
# of conditions and the following disclaimer in the documentation and/or other materials
|
|
|
|
# provided with the distribution.
|
|
|
|
#
|
|
|
|
# 3. Neither the name of the copyright holder nor the names of its contributors may be used
|
|
|
|
# to endorse or promote products derived from this software without specific prior written
|
|
|
|
# permission.
|
|
|
|
#
|
|
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
|
|
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
|
|
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
|
|
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
|
|
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
|
|
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
|
|
|
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
|
|
|
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
|
|
|
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
|
|
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
|
|
|
import("//build/lite/config/component/lite_component.gni")
|
2021-07-13 23:57:39 +08:00
|
|
|
|
|
|
|
declare_args() {
|
|
|
|
tee_enable = false
|
2021-07-23 01:01:19 +08:00
|
|
|
liteos_name = "OHOS_Image"
|
2021-07-13 23:57:39 +08:00
|
|
|
}
|
|
|
|
|
2021-07-23 01:01:19 +08:00
|
|
|
cmd = "if [ -f $device_path/BUILD.gn ]; then echo true; else echo false; fi"
|
|
|
|
HAVE_DEVICE_SDK = exec_script("//build/lite/run_shell_cmd.py", [ cmd ], "value")
|
|
|
|
|
2021-07-13 23:57:39 +08:00
|
|
|
LITEOS_MENUCONFIG_H = rebase_path("$root_out_dir/config.h")
|
|
|
|
|
|
|
|
tee = ""
|
|
|
|
if (tee_enable) {
|
|
|
|
tee = "_tee"
|
|
|
|
}
|
|
|
|
|
|
|
|
productName = get_path_info(product_path, "file")
|
|
|
|
config_file = "${productName}_release.config"
|
|
|
|
if (ohos_build_compiler == "clang") {
|
|
|
|
if (ohos_build_type == "debug") {
|
|
|
|
config_file = "debug/${productName}_${ohos_build_compiler}${tee}.config"
|
|
|
|
} else {
|
|
|
|
config_file = "${productName}_${ohos_build_compiler}_release${tee}.config"
|
|
|
|
}
|
|
|
|
} else if (ohos_build_compiler == "gcc") {
|
|
|
|
if (ohos_build_type == "debug") {
|
|
|
|
config_file = "${productName}_debug_shell${tee}.config"
|
|
|
|
} else {
|
|
|
|
config_file = "${productName}_release${tee}.config"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
liteos_config_file = rebase_path("tools/build/config/$config_file")
|
|
|
|
|
|
|
|
# we prefer use product specified config file
|
|
|
|
f = "$product_path/config/${ohos_build_type}${tee}.config"
|
|
|
|
if (exec_script("//build/lite/run_shell_cmd.py", [ "if [ -f $f ]; then echo true; else echo false; fi" ], "value")) {
|
|
|
|
liteos_config_file = f
|
|
|
|
}
|
|
|
|
|
|
|
|
print("liteos_config_file:", liteos_config_file)
|
|
|
|
|
|
|
|
exec_script("//build/lite/run_shell_cmd.py",
|
|
|
|
[
|
|
|
|
"env" +
|
|
|
|
" CONFIG_=LOSCFG_" +
|
|
|
|
" KCONFIG_CONFIG_HEADER='y=true'" +
|
|
|
|
" KCONFIG_CONFIG=$liteos_config_file" +
|
|
|
|
" DEVICE_PATH=$device_path" +
|
|
|
|
" srctree=" + rebase_path(".") +
|
|
|
|
" genconfig" +
|
|
|
|
" --header-path $LITEOS_MENUCONFIG_H" +
|
|
|
|
" --file-list kconfig_files.txt" +
|
|
|
|
" --env-list kconfig_env.txt" +
|
|
|
|
" --config-out config.gni",
|
|
|
|
])
|
|
|
|
|
|
|
|
import("liteos.gni")
|
2021-03-11 18:43:57 +08:00
|
|
|
|
|
|
|
generate_notice_file("kernel_notice_file") {
|
|
|
|
module_name = "kernel"
|
|
|
|
module_source_dir_list = [
|
2021-07-13 23:57:39 +08:00
|
|
|
"$LITEOSTHIRDPARTY/FreeBSD",
|
|
|
|
"$LITEOSTHIRDPARTY/musl",
|
|
|
|
"$LITEOSTHIRDPARTY/zlib",
|
|
|
|
"$LITEOSTHIRDPARTY/FatFs",
|
|
|
|
"$LITEOSTHIRDPARTY/Linux_Kernel",
|
|
|
|
"$LITEOSTHIRDPARTY/lwip",
|
|
|
|
"$LITEOSTHIRDPARTY/NuttX",
|
|
|
|
"$LITEOSTHIRDPARTY/mtd-utils",
|
2021-03-11 18:43:57 +08:00
|
|
|
]
|
|
|
|
}
|
|
|
|
|
2021-07-13 23:57:39 +08:00
|
|
|
liteos_arch_cflags = []
|
|
|
|
if (defined(LOSCFG_ARCH_ARM)) {
|
|
|
|
mcpu = LOSCFG_ARCH_CPU
|
|
|
|
if (defined(LOSCFG_ARCH_ARM_AARCH64) && defined(LOSCFG_ARCH_FPU_DISABLE)) {
|
|
|
|
mcpu += "+nofp"
|
|
|
|
}
|
|
|
|
liteos_arch_cflags += [ "-mcpu=$mcpu" ]
|
|
|
|
if (defined(LOSCFG_ARCH_ARM_AARCH32)) {
|
|
|
|
liteos_arch_cflags += [
|
|
|
|
"-mfloat-abi=softfp",
|
|
|
|
"-mfpu=$LOSCFG_ARCH_FPU",
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
cc = "$ohos_current_cc_command " + string_join(" ", liteos_arch_cflags)
|
|
|
|
if (ohos_build_compiler == "clang") {
|
|
|
|
cc += " --target=$target_triple"
|
|
|
|
}
|
|
|
|
|
|
|
|
config("arch_config") {
|
|
|
|
cflags = liteos_arch_cflags
|
|
|
|
asmflags = cflags
|
|
|
|
ldflags = cflags
|
|
|
|
}
|
|
|
|
|
|
|
|
config("as_objs_libc_flags") {
|
|
|
|
defines = [ "__ASSEMBLY__" ]
|
|
|
|
|
|
|
|
# linux style macros
|
|
|
|
if (defined(LOSCFG_ARCH_ARM_V7A) || defined(LOSCFG_ARCH_ARM_V7R) ||
|
|
|
|
defined(LOSCFG_ARCH_ARM_V7M)) {
|
|
|
|
defines += [ "__LINUX_ARM_ARCH__=7" ]
|
|
|
|
} else if (defined(LOSCFG_ARCH_ARM_V8A) || defined(LOSCFG_ARCH_ARM_V8R) ||
|
|
|
|
defined(LOSCFG_ARCH_ARM_V8M)) {
|
|
|
|
defines += [ "__LINUX_ARM_ARCH__=8" ]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
config("std_include") {
|
|
|
|
std_include = exec_script("//build/lite/run_shell_cmd.py", [ "$cc -print-file-name=include" ], "trim string")
|
|
|
|
include_dirs = [ std_include ]
|
|
|
|
}
|
|
|
|
|
|
|
|
config("public") {
|
|
|
|
configs = [
|
|
|
|
"arch:public",
|
|
|
|
"platform:public",
|
|
|
|
"kernel:public",
|
|
|
|
"compat:public",
|
|
|
|
"bsd:public",
|
|
|
|
"fs:public",
|
|
|
|
"drivers:public",
|
|
|
|
"security:public",
|
|
|
|
"net:public",
|
|
|
|
"shell:public",
|
|
|
|
"lib:public",
|
|
|
|
]
|
2021-07-23 01:01:19 +08:00
|
|
|
|
|
|
|
configs += [
|
|
|
|
"$HDFTOPDIR:public",
|
|
|
|
"//drivers/liteos:public",
|
|
|
|
]
|
|
|
|
|
|
|
|
if (HAVE_DEVICE_SDK) {
|
|
|
|
configs += [ "$device_path:public" ]
|
|
|
|
}
|
2021-07-13 23:57:39 +08:00
|
|
|
}
|
|
|
|
|
2021-07-22 18:52:24 +08:00
|
|
|
config("los_nostdinc") {
|
|
|
|
cflags = [ "-nostdinc" ]
|
|
|
|
}
|
|
|
|
|
|
|
|
config("los_nostdlib") {
|
|
|
|
ldflags = [ "-nostdlib" ]
|
|
|
|
}
|
|
|
|
|
|
|
|
config("los_common") {
|
2021-07-13 23:57:39 +08:00
|
|
|
cflags = [
|
|
|
|
"-imacros",
|
|
|
|
"$LITEOS_MENUCONFIG_H",
|
|
|
|
]
|
|
|
|
|
|
|
|
defines = [ "__LITEOS__" ]
|
|
|
|
|
|
|
|
cflags_c = [ "-std=c99" ]
|
|
|
|
|
|
|
|
cflags += [
|
|
|
|
"-fno-pic",
|
|
|
|
"-fno-builtin",
|
|
|
|
"-Wall",
|
|
|
|
"-Werror",
|
|
|
|
"-fms-extensions",
|
|
|
|
"-Wno-address-of-packed-member",
|
|
|
|
"-fno-strict-aliasing",
|
|
|
|
"-fno-common",
|
|
|
|
"-fsigned-char",
|
|
|
|
"-Wpointer-arith",
|
|
|
|
"-Wstrict-prototypes",
|
|
|
|
"-Winvalid-pch",
|
|
|
|
"-ffunction-sections",
|
|
|
|
"-fdata-sections",
|
|
|
|
"-fno-exceptions",
|
|
|
|
"-fno-omit-frame-pointer",
|
|
|
|
"-fno-short-enums",
|
|
|
|
]
|
|
|
|
|
|
|
|
if (defined(LOSCFG_QUICK_START)) {
|
|
|
|
cflags -= [ "-Werror" ]
|
|
|
|
}
|
|
|
|
|
|
|
|
if (defined(LOSCFG_COMPILE_DEBUG)) {
|
|
|
|
cflags += [
|
|
|
|
"-O0",
|
|
|
|
"-g",
|
|
|
|
"-gdwarf-2",
|
2021-03-11 18:43:57 +08:00
|
|
|
]
|
2021-07-13 23:57:39 +08:00
|
|
|
} else {
|
|
|
|
if (defined(LOSCFG_COMPILER_CLANG_LLVM)) {
|
|
|
|
cflags += [
|
|
|
|
"-Oz",
|
|
|
|
"-flto",
|
|
|
|
]
|
|
|
|
} else {
|
|
|
|
cflags += [ "-O2" ]
|
2021-03-11 18:43:57 +08:00
|
|
|
}
|
2021-07-13 23:57:39 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if (defined(LOSCFG_CC_STACKPROTECTOR_ALL)) {
|
|
|
|
cflags += [ "-fstack-protector-all" ]
|
|
|
|
} else if (defined(LOSCFG_CC_STACKPROTECTOR_STRONG)) {
|
|
|
|
cflags += [ "-fstack-protector-strong" ]
|
|
|
|
} else if (defined(LOSCFG_CC_STACKPROTECTOR)) {
|
|
|
|
cflags += [
|
|
|
|
"-fstack-protector",
|
|
|
|
"--param",
|
|
|
|
"ssp-buffer-size=4",
|
|
|
|
]
|
2021-03-11 18:43:57 +08:00
|
|
|
} else {
|
2021-07-13 23:57:39 +08:00
|
|
|
cflags += [ "-fno-stack-protector" ]
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!defined(LOSCFG_COMPILER_CLANG_LLVM)) {
|
|
|
|
cflags += [ "-fno-aggressive-loop-optimizations" ]
|
|
|
|
if (!defined(LOSCFG_ARCH_ARM_AARCH64)) {
|
|
|
|
cflags += [
|
|
|
|
"-mno-unaligned-access",
|
|
|
|
"-mthumb-interwork",
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (defined(LOSCFG_THUMB)) {
|
|
|
|
cflags += [
|
|
|
|
"-mthumb",
|
|
|
|
"-Wa,-mimplicit-it=thumb",
|
|
|
|
]
|
2021-03-11 18:43:57 +08:00
|
|
|
}
|
2021-07-13 23:57:39 +08:00
|
|
|
|
|
|
|
asmflags = cflags
|
|
|
|
}
|
|
|
|
|
2021-07-22 18:52:24 +08:00
|
|
|
config("los_config") {
|
|
|
|
configs = [
|
|
|
|
":los_common",
|
|
|
|
":arch_config",
|
|
|
|
":los_nostdinc",
|
|
|
|
":los_nostdlib",
|
2021-07-23 01:01:19 +08:00
|
|
|
":std_include",
|
2021-07-22 18:52:24 +08:00
|
|
|
]
|
|
|
|
}
|
|
|
|
|
2021-07-23 01:01:19 +08:00
|
|
|
executable("liteos") {
|
2021-07-13 23:57:39 +08:00
|
|
|
configs = [] # clear default configs
|
|
|
|
configs += [ ":los_config" ]
|
2021-07-23 01:01:19 +08:00
|
|
|
configs += [ ":public" ]
|
2021-07-13 23:57:39 +08:00
|
|
|
|
|
|
|
ldflags = [
|
|
|
|
"-static",
|
|
|
|
"-Wl,--gc-sections",
|
2021-07-23 01:01:19 +08:00
|
|
|
"-Wl,-Map=$liteos_name.map",
|
2021-07-13 23:57:39 +08:00
|
|
|
"-Wl,--no-eh-frame-hdr",
|
|
|
|
]
|
|
|
|
|
|
|
|
libgcc = exec_script("//build/lite/run_shell_cmd.py", [ "$cc -print-libgcc-file-name" ], "trim string")
|
|
|
|
libs = [ libgcc ]
|
|
|
|
if (defined(LOSCFG_COMPILER_CLANG_LLVM)) {
|
2021-07-22 18:52:24 +08:00
|
|
|
ldflags += [ "-Wl,-T" + rebase_path("tools/build/liteos_llvm.ld", root_build_dir) ]
|
2021-07-13 23:57:39 +08:00
|
|
|
} else {
|
2021-07-22 18:52:24 +08:00
|
|
|
ldflags += [ "-Wl,-T" + rebase_path("tools/build/liteos.ld", root_build_dir) ]
|
2021-07-23 01:01:19 +08:00
|
|
|
ldflags += [ "-Wl,-nostartfiles" ]
|
2021-07-13 23:57:39 +08:00
|
|
|
}
|
|
|
|
|
2021-07-22 18:52:24 +08:00
|
|
|
output_dir = target_out_dir
|
2021-07-23 01:01:19 +08:00
|
|
|
output_name = liteos_name
|
2021-07-22 18:52:24 +08:00
|
|
|
|
2021-07-13 23:57:39 +08:00
|
|
|
deps = [
|
|
|
|
":modules",
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
2021-07-23 01:01:19 +08:00
|
|
|
copy("copy_liteos") {
|
|
|
|
deps = [ ":liteos" ]
|
|
|
|
sources = [ "$target_out_dir/unstripped/bin/$liteos_name" ]
|
|
|
|
outputs = [ "$root_out_dir/{{source_file_part}}" ]
|
|
|
|
}
|
|
|
|
|
|
|
|
build_ext_component("build_kernel_image") {
|
|
|
|
deps = [ ":copy_liteos" ]
|
|
|
|
exec_path = rebase_path(root_out_dir)
|
2021-07-13 23:57:39 +08:00
|
|
|
|
|
|
|
objcopy = "${compile_prefix}objcopy$toolchain_cmd_suffix"
|
|
|
|
objdump = "${compile_prefix}objdump$toolchain_cmd_suffix"
|
|
|
|
|
2021-07-23 01:01:19 +08:00
|
|
|
command = "$objcopy -O binary $liteos_name $liteos_name.bin"
|
|
|
|
command += " && sh -c '$objdump -t $liteos_name | sort >$liteos_name.sym.sorted'"
|
|
|
|
command += " && sh -c '$objdump -d $liteos_name >$liteos_name.asm'"
|
2021-07-13 23:57:39 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
group("modules") {
|
|
|
|
deps = [
|
|
|
|
"arch",
|
|
|
|
"bsd",
|
|
|
|
"compat",
|
|
|
|
"drivers",
|
|
|
|
"fs",
|
|
|
|
"kernel",
|
|
|
|
"lib",
|
|
|
|
"net",
|
|
|
|
"platform",
|
|
|
|
"security",
|
|
|
|
"shell",
|
|
|
|
"syscall",
|
|
|
|
]
|
2021-07-23 01:01:19 +08:00
|
|
|
|
|
|
|
deps += [
|
|
|
|
"$HDFTOPDIR",
|
|
|
|
"//drivers/liteos",
|
|
|
|
]
|
|
|
|
|
|
|
|
if (HAVE_DEVICE_SDK) {
|
|
|
|
deps += [ device_path ]
|
|
|
|
}
|
2021-07-13 23:57:39 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
group("apps") {
|
|
|
|
deps = [ "apps" ]
|
|
|
|
}
|
|
|
|
|
|
|
|
group("tests") {
|
|
|
|
deps = [ "testsuites" ]
|
|
|
|
}
|
|
|
|
|
|
|
|
group("kernel") {
|
2021-07-23 01:01:19 +08:00
|
|
|
deps = [ ":build_kernel_image" ]
|
2021-07-13 23:57:39 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
group("liteos_a") {
|
|
|
|
deps = [
|
|
|
|
":apps",
|
|
|
|
":kernel",
|
|
|
|
":tests",
|
|
|
|
]
|
2021-03-11 18:43:57 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
build_ext_component("make") {
|
|
|
|
exec_path = rebase_path(".", root_build_dir)
|
|
|
|
outdir = rebase_path(get_path_info(".", "out_dir"))
|
2021-06-24 02:24:58 +08:00
|
|
|
sysroot_path = rebase_path(ohos_current_sysroot)
|
|
|
|
arch_cflags = string_join(" ", target_arch_cflags)
|
2021-07-10 19:36:44 +08:00
|
|
|
command = "./build.sh ${board_name} ${ohos_build_compiler} ${root_build_dir} ${ohos_build_type} \"${tee_enable}\""
|
2021-07-07 20:20:09 +08:00
|
|
|
command += " \"${device_company}\" \"${product_path}\" $outdir \"${ohos_version}\" ${sysroot_path} \"${arch_cflags}\""
|
|
|
|
command += " \"${device_path}\""
|
2021-03-11 18:43:57 +08:00
|
|
|
}
|