提交 2b3dd223 编写于 作者: Z z00427224 提交者: public tcshversion

Description: add build sysroot script

Reviewed-by:renwei
Change-Id: Ibaf777acd963bd50ba23714268e4375f539b363f
Reviewed-on: http://mgit-tm.rnd.huawei.com/10913234Tested-by: Npublic jenkins <public_jenkins@notesmail.huawei.com>
Reviewed-by: Npanxiaoqun 00277906 <panxiaoqun@huawei.com>
Tested-by: Npanxiaoqun 00277906 <panxiaoqun@huawei.com>
上级 361bfe7e
#!/bin/bash
# This script is used to create musl's libc.so.
# Copyright ? Huawei Technologies Co., Ltd. 2010-2018. All rights reserved.
set -e
readonly MUSL_DIR="$PWD/musl"
readonly MUSL_SOURCE="$PWD/../../../../third_party/musl/*"
#readonly MUSL_PATCH="$PWD/../../../../build/lite/patches/0000-musl-liteos.patch"
readonly LITEOSTOPDIR="$PWD/../../../../kernel/liteos_a"
readonly SYSROOT="$PWD/usr"
BUILD=`gcc -dumpmachine`
HOST=`gcc -dumpmachine`
TARGET=arm-liteos
CROSS_COMPILE=llvm-
CFLAGS_FOR_TARGET="--target=${TARGET} -mfloat-abi=soft -march=armv7-a -Wall -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack"
CFLAGS_FOR_TARGET1="--target=${TARGET} -mfloat-abi=soft -mcpu=cortex-a7 -Wall -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack"
CFLAGS_FOR_TARGET2="--target=${TARGET} -mfloat-abi=softfp -mcpu=cortex-a7 -mfpu=neon-vfpv4 -Wall -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack"
CFLAGS_FOR_TARGET3="--target=${TARGET} -mfloat-abi=hard -mcpu=cortex-a7 -mfpu=neon-vfpv4 -Wall -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wl,-z,relro,-z,now,-z,noexecstack"
PARALLEL=`grep ^processor /proc/cpuinfo|wc -l`
LITEOS_COMPILER_PATH=`${LITEOSTOPDIR}/tools/build/mk/get_llvm_compiler_path.sh ${CROSS_COMPILE} ${LITEOSTOPDIR}`
LDFLAG="-L${LITEOS_COMPILER_PATH}/lib/clang/9.0.0/lib/${TARGET} -L${LITEOS_COMPILER_PATH}/lib/${TARGET}/c++ --rtlib=compiler-rt -lclang_rt.builtins -lunwind -fuse-ld=lld -Wl,--build-id=sha1"
export PATH="${LITEOS_COMPILER_PATH}/bin:$PATH"
#prepare to build musl
mkdir -p $MUSL_DIR
mkdir -p $SYSROOT
cp -r $MUSL_SOURCE $MUSL_DIR
# prepare linux compat headers
sh thirdparty_headers.sh
#build musl
pushd $MUSL_DIR
#patch -p1 < $MUSL_PATCH
HEADERDIR="${SYSROOT}/include/${TARGET}"
LIBDIR="${SYSROOT}/lib/${TARGET}"
BINDIR="${SYSROOT}/bin/${TARGET}"
SYSDIR="${SYSROOT}/sys/${TARGET}"
mkdir -p $LIBDIR $BINDIR $SYSDIR $HEADERDIR
CC="${LITEOS_COMPILER_PATH}/bin/clang $CFLAGS_FOR_TARGET" CROSS_COMPILE="${CROSS_COMPILE}" LDFLAGS="${LDFLAG}" ./configure --prefix=$SYSROOT --libdir=$LIBDIR --bindir=$BINDIR --syslibdir=$SYSDIR --includedir=$HEADERDIR --build=$BUILD --host=$TARGET
make -j $PARALLEL
make install
make clean
HEADERDIR="${SYSROOT}/include/${TARGET}"
LIBDIR="${SYSROOT}/lib/${TARGET}/a7_soft"
BINDIR="${SYSROOT}/bin/${TARGET}/a7_soft"
SYSDIR="${SYSROOT}/sys/a7_soft"
mkdir -p $LIBDIR $BINDIR $SYSDIR $HEADERDIR
CC="${LITEOS_COMPILER_PATH}/bin/clang $CFLAGS_FOR_TARGET1" CROSS_COMPILE="${CROSS_COMPILE}" LDFLAGS="${LDFLAG}" ./configure --prefix=$SYSROOT --libdir=$LIBDIR --bindir=$BINDIR --syslibdir=$SYSDIR --includedir=$HEADERDIR --build=$BUILD --host=$TARGET
make -j $PARALLEL
make install
make clean
HEADERDIR="${SYSROOT}/include/${TARGET}"
LIBDIR="${SYSROOT}/lib/${TARGET}/a7_softfp_neon-vfpv4"
BINDIR="${SYSROOT}/bin/${TARGET}/a7_softfp_neon-vfpv4"
SYSDIR="${SYSROOT}/sys/${TARGET}/a7_softfp_neon-vfpv4"
mkdir -p $LIBDIR $BINDIR $SYSDIR $HEADERDIR
CC="${LITEOS_COMPILER_PATH}/bin/clang $CFLAGS_FOR_TARGET2" CROSS_COMPILE="${CROSS_COMPILE}" LDFLAGS="${LDFLAG}" ./configure --prefix=$SYSROOT --libdir=$LIBDIR --bindir=$BINDIR --syslibdir=$SYSDIR --includedir=$HEADERDIR --build=$BUILD --host=$TARGET
make -j $PARALLEL
make install
make clean
HEADERDIR="${SYSROOT}/include/${TARGET}"
LIBDIR="${SYSROOT}/lib/${TARGET}/a7_hard_neon-vfpv4"
BINDIR="${SYSROOT}/bin/${TARGET}/a7_hard_neon-vfpv4"
SYSDIR="${SYSROOT}/sys/${TARGET}/a7_hard_neon-vfpv4"
mkdir -p $LIBDIR $BINDIR $SYSDIR $HEADERDIR
CC="${LITEOS_COMPILER_PATH}/bin/clang $CFLAGS_FOR_TARGET3" CROSS_COMPILE="${CROSS_COMPILE}" LDFLAGS="${LDFLAG}" ./configure --prefix=$SYSROOT --libdir=$LIBDIR --bindir=$BINDIR --syslibdir=$SYSDIR --includedir=$HEADERDIR --build=$BUILD --host=$TARGET
make -j $PARALLEL
make install
popd
#!/bin/bash
# This script is used to prepare header files for musl's libc.so.
# Copyright ? Huawei Technologies Co., Ltd. 2010-2018. All rights reserved.
set -e
PRJ_ROOT="$PWD/../../../../"
LINUX_HDR="$PRJ_ROOT/prebuilts/lite/sysroot/thirdparty/linux_headers_install"
TMP_DIR_ORI="$PRJ_ROOT/prebuilts/lite/sysroot/ohos_tmp_ori"
TMP_DIR="$PRJ_ROOT/prebuilts/lite/sysroot/ohos_tmp"
MUSL_DIR="$PWD/musl/include"
export Z_BUILD_TOP="$PRJ_ROOT"
if [ ! -d "${LINUX_HDR}/asm" ] || [ ! -d "${LINUX_HDR}/asm-generic" ] || [ ! -d "${LINUX_HDR}/linux" ];then
echo "please install headers first!!!"
echo "see guide at $SYSROOT/../../thirdparty/README"
exit 1
fi
mkdir -p ${TMP_DIR_ORI}
mkdir -p ${TMP_DIR}
mkdir -p ${TMP_DIR_ORI}/uapi/asm-generic
mkdir -p ${TMP_DIR_ORI}/uapi/asm
mkdir -p ${TMP_DIR_ORI}/uapi/linux
cp ${LINUX_HDR}/asm-generic/bitsperlong.h ${TMP_DIR_ORI}/uapi/asm-generic
cp ${LINUX_HDR}/asm-generic/int-ll64.h ${TMP_DIR_ORI}/uapi/asm-generic
cp ${LINUX_HDR}/asm-generic/posix_types.h ${TMP_DIR_ORI}/uapi/asm-generic
cp ${LINUX_HDR}/asm/bitsperlong.h ${TMP_DIR_ORI}/uapi/asm
cp ${LINUX_HDR}/asm/posix_types.h ${TMP_DIR_ORI}/uapi/asm
cp ${LINUX_HDR}/asm/types.h ${TMP_DIR_ORI}/uapi/asm
cp ${LINUX_HDR}/linux/capability.h ${TMP_DIR_ORI}/uapi/linux
cp ${LINUX_HDR}/linux/posix_types.h ${TMP_DIR_ORI}/uapi/linux
cp ${LINUX_HDR}/linux/stddef.h ${TMP_DIR_ORI}/uapi/linux
cp ${LINUX_HDR}/linux/types.h ${TMP_DIR_ORI}/uapi/linux
echo "#ifndef _UAPI_LINUX_COMPILER_H" >> ${TMP_DIR_ORI}/uapi/linux/compiler.h
echo "#define _UAPI_LINUX_COMPILER_H" >> ${TMP_DIR_ORI}/uapi/linux/compiler.h
echo "#define __user" >> ${TMP_DIR_ORI}/uapi/linux/compiler.h
echo "#endif" >> ${TMP_DIR_ORI}/uapi/linux/compiler.h
pushd ${PRJ_ROOT}
python prebuilts/lite/sysroot/build/update_headers.py 2>/dev/null
popd
cp -rf ${TMP_DIR}/uapi/* ${MUSL_DIR}/
rm -rf ${TMP_DIR_ORI}
rm -rf ${TMP_DIR}
\ No newline at end of file
#!/usr/bin/env python
#-*-coding:utf-8-*-
# Perform for Z kernel headers
# Copyright Huawei Technologies Co., Ltd. 2010-2019. All rights reserved.
import sys
import os
import getopt
import subprocess
import time
import string
import re
import glob
# /*..*/ //...
Rule1 = "(\/\*(\s|.)*?\*\/)|(\/\/.*)"
c1=re.compile(Rule1)
#use list for order
key_list = [
# grep key, gerp dir, sed key, sed replace
["CONFIG_64BIT", ".", "CONFIG_64BIT", "__LP64__"],
["__unused;", ".", "__unused;", "__linux_unused;"],
["__unused\[", ".", "__unused\[", "__linux_unused["],
[" private;", ".", " private;", " __linux_private;"],
["\*virtual;", ".", "\*virtual;", "\* __linux_virtual;"],
["struct msqid_ds", ".", "struct msqid_ds", "struct __kernel_legacy_msqid_ds"],
["struct semid_ds", ".", "struct semid_ds", "struct __kernel_legacy_semid_ds"],
["struct shmid_ds", ".", "struct shmid_ds", "struct __kernel_legacy_shmid_ds"],
["struct ipc_perm", ".", "struct ipc_perm", "struct __kernel_legacy_ipc_perm"],
["union semun", ".", "union semun", "union __kernel_legacy_semun"],
["_NSIG", ".", "_NSIG", "_KERNEL__NSIG"],
["_KERNEL__NSIG_", ".", "_KERNEL__NSIG_", "_NSIG_"],
["#define NSIG\s", ".", "#define NSIG", "#define _KERNEL_NSIG"],
["SIGRTMIN", ".", "SIGRTMIN", "__SIGRTMIN"],
["SIGRTMAX", ".", "SIGRTMAX", "__SIGRTMAX"],
["struct udphdr", ".", "struct udphdr", "struct __kernel_udphdr"],
["__attribute_const__", ".", "__attribute_const__", "__attribute__((__const__))"],
["struct __kernel_sockaddr_storage", ".", "struct __kernel_sockaddr_storage", "struct sockaddr_storage"],
["off_t", "asm-mips/asm/stat.h", "off_t", "__kernel_off_t"],
["#ifndef __EXPORTED_HEADERS__", ".", "#ifndef __EXPORTED_HEADERS__", "#if 0 \/*__EXPORTED_HEADERS__*\/"],
["#ifndef __KERNEL_STRICT_NAMES", ".", "#ifndef __KERNEL_STRICT_NAMES", "#if 0 \/*__KERNEL_STRICT_NAMES*\/"],
["#ifdef __CHECKER__", ".", "#ifdef __CHECKER__", "#if 0 \/*__CHECKER__*\/"],
["#ifdef __HAVE_BUILTIN_BSWAP16__", ".", "#ifdef __HAVE_BUILTIN_BSWAP16__", "#if 1 \/*__HAVE_BUILTIN_BSWAP16__*\/"],
["#ifdef __HAVE_BUILTIN_BSWAP32__", ".", "#ifdef __HAVE_BUILTIN_BSWAP32__", "#if 1 \/*__HAVE_BUILTIN_BSWAP32__*\/"],
["#ifdef __HAVE_BUILTIN_BSWAP64__", ".", "#ifdef __HAVE_BUILTIN_BSWAP64__", "#if 1 \/*__HAVE_BUILTIN_BSWAP64__*\/"],
["#if defined(__ARMEB__)", "asm-arm", "#if defined(__ARMEB__)", "#if 0 \/*__ARMEB__*\/"],
["#ifdef __ARMEB__", "asm-arm", "#ifdef __ARMEB__", "#if 0 \/*__ARMEB__*\/"],
["defined(__ARM_EABI__)", "asm-arm", "defined(__ARM_EABI__)", "1 \/*defined(__ARM_EABI__)*\/"],
["#ifdef __MIPSEB__", "asm-mips", "#ifdef __MIPSEB__", "#if 0 \/*__MIPSEB__*\/"],
["#elif defined (__MIPSEB__)", "asm-mips", "#elif defined (__MIPSEB__)", "#elif 0 \/*__MIPSEB__*\/"],
["#if defined(__MIPSEB__)", "asm-mips", "#if defined(__MIPSEB__)", "#if 0 \/*__MIPSEB__*\/"],
["#elif defined(__MIPSEL__)", "asm-mips", "#elif defined(__MIPSEL__)", "#elif 1 \/*__MIPSEL__*\/"],
["#elif defined (__MIPSEL__)", "asm-mips", "#elif defined (__MIPSEL__)", "#elif 1 \/*__MIPSEL__*\/"],
["\!defined(__SANE_USERSPACE_TYPES__)", "asm-mips", "\!defined(__SANE_USERSPACE_TYPES__)", "0 \/*__SANE_USERSPACE_TYPES__*\/"],
["\/\*.*\*\/", ".", "\/\*.*\*\/", ""],
]
def deal_file(src):
# file exist or not
if not os.path.exists(src):
print 'Error: file - %s doesn\'t exist.'% src
return False
if os.path.islink(src):
print 'Error: file - %s is a link.'
return False
filetype = (os.path.splitext(src))[1]
if not filetype in ['.c','.h','.cpp','.hh','.cc']:
return False
try:
if not os.access(src, os.W_OK):
os.chmod(src, 0664)
except:
print 'Error: you can not chang %s\'s mode.'% src
# del all comments
inputf = open(src, 'r')
outputfilename = (os.path.splitext(src))[0] + '_no_comment'+filetype
outputf = open(outputfilename, 'w')
lines=inputf.read()
inputf.close()
lines=re.sub(Rule1,"",lines)
outputf.write(lines)
outputf.close()
#del right space & blank line
os.remove(src)
inputf = open(outputfilename, 'r')
outputf = open(src, 'w')
#write head info
outputf.write("/*\n")
outputf.write(" * This header was generated from the Linux kernel headers by update_headers.py,\n")
outputf.write(" * to provide necessary information from kernel to userspace, such as constants,\n")
outputf.write(" * structures, and macros, and thus, contains no copyrightable information.\n")
outputf.write(" */\n")
line = inputf.readline()
while line:
if line == '\n':
line = line.strip("\n")
else:
line = line.rstrip() + '\n'
outputf.write(line)
line = inputf.readline()
inputf.close()
outputf.close()
os.remove(outputfilename)
return True
def deal_dir(src):
# dir exist or not
if not os.path.exists(src):
print 'Error: dir - %s is not exist.'%s (src)
return False
filelists = os.listdir(src)
for eachfile in filelists:
eachfile = src + '/' +eachfile
if os.path.isdir(eachfile):
deal_dir(eachfile)
elif os.path.isfile(eachfile):
deal_file(eachfile)
return True
def copy_kernel_headers(build_top, original_dir, target_dir):
headers_dir = build_top + '/' + target_dir
external_dir = build_top + original_dir
headers_rm_cmd = "rm " + headers_dir + "/uapi -rf"
headers_cp_cmd = "cp " + external_dir + " " + headers_dir + " -r"
try:
status = subprocess.call(headers_rm_cmd, shell=True)
except:
printf("[Error] rm error!!!")
try:
status = subprocess.call(headers_cp_cmd, shell=True)
except:
printf("[Error] cp error!!!")
return 1
def replace_key_words_ext(keys):
replace_key_words(keys[0], keys[1], keys[2], keys[3])
return 1
def replace_key_words(original_key, target_dir, replace_key, replace_str):
replace_cmd = "grep \""+ original_key + "\" -rl " + target_dir + " | xargs sed -i \"s/" + replace_key + "/" + replace_str + "/g\""
try:
status = subprocess.call(replace_cmd, shell=True)
except:
printf("[Error] replace CONFIG_64BIT error!!!")
return 1
def usage():
print(" Usage: run the script at the root of project.\n For example:\n\
python ./foundation/ccruntime/libc/kernel/tools/update_Z_header.py")
return 0
def main():
if len(sys.argv) > 1:
usage()
return -1
kernel_dir = "prebuilts/lite/sysroot/ohos_tmp"
external_dir = '/prebuilts/lite/sysroot/ohos_tmp_ori/uapi'
status = -1
try:
build_top = os.environ["Z_BUILD_TOP"]
except KeyError as e:
print("[Warning] no env : %s, use current work dir." %(str(e)))
build_top = subprocess.check_output("pwd", shell=True)
status = copy_kernel_headers(build_top.strip(), external_dir, kernel_dir)
if status != 1:
print("[Error] copy files fail!!!")
sys.exti(1)
try:
os.chdir(kernel_dir + "/uapi")
except:
print("[Error] no uapi dir1!!!")
sys.exit(1)
current_dir = os.getcwd()
if "uapi" not in current_dir:
print("[Error] not uapi dir!!!")
sys.exit(1)
for val in key_list:
replace_key_words_ext(val)
try:
os.chdir("../")
except:
print("[Error] no uapi dir2!!!")
sys.exit(1)
deal_dir("uapi")
return 1
if __name__ == "__main__":
starttime=time.time()
main()
endtime=time.time()
print(endtime-starttime)
To build toolchains, we need some thirdparty headers.
1.linux headers
use following commands to install.
KERNEL_DIR project root directory for linux kernel.
kernel source version should be 4.4
...
cp -r $KERNEL_DIR/include/uapi/* ./linux_headers_install
...
pushd $KERNEL_DIR
make headers_install ARCH=arm INSTALL_HDR_PATH=./tmp_dir
popd
...
cp -r $KERNEL_DIR/tmp_dir/asm ./linux_headers_install
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册