1#!/bin/bash 2 3# Copyright (C) 2022 Huawei Technologies Co., Ltd. 4# Licensed under the Mulan PSL v2. 5# You can use this software according to the terms and conditions of the Mulan 6# PSL v2. 7# You may obtain a copy of Mulan PSL v2 at: 8# http://license.coscl.org.cn/MulanPSL2 9# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY 10# KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO 11# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 12# See the Mulan PSL v2 for more details. 13 14set -e 15 16THIRD_PARTY_ORIGIN=$(pwd)/../../../../../../../../third_party 17 18MUSL_CODE=${THIRD_PARTY_ORIGIN}/musl 19EXPORT_MUSL_HEADER_PATH=$(pwd)/musl 20 21BOUNDS_CHECK_CODE=${THIRD_PARTY_ORIGIN}/bounds_checking_function 22EXPORT_BOUNDS_CHECK_HEADER_PATH=$(pwd)/bounds_checking_function 23 24function do_copy_musl_header_file() { 25 if [[ "$1" == "ARM32" ]]; then 26 ARCH=arm 27 LIBC_HEADER=libc_32 28 else 29 ARCH=aarch64 30 LIBC_HEADER=libc 31 fi 32 33 LIBC_HEADER_PATH=${EXPORT_MUSL_HEADER_PATH}/${LIBC_HEADER} 34 if [[ -d "${LIBC_HEADER_PATH}" ]]; then 35 rm -rf ${LIBC_HEADER_PATH} 36 fi 37 38 mkdir ${LIBC_HEADER_PATH} 39 mkdir -p ${LIBC_HEADER_PATH}/sys 40 mkdir -p ${LIBC_HEADER_PATH}/netinet 41 mkdir -p ${LIBC_HEADER_PATH}/arpa 42 mkdir -p ${LIBC_HEADER_PATH}/arch/generic 43 mkdir -p ${LIBC_HEADER_PATH}/fortify 44 45 LIBC_ARCH_PATH=${LIBC_HEADER_PATH}/arch 46 mkdir -p ${LIBC_ARCH_PATH} 47 48 cp ${MUSL_CODE}/include/semaphore.h ${LIBC_HEADER_PATH} 49 cp ${MUSL_CODE}/include/signal.h ${LIBC_HEADER_PATH} 50 cp ${MUSL_CODE}/include/stdalign.h ${LIBC_HEADER_PATH} 51 cp ${MUSL_CODE}/include/stdbool.h ${LIBC_HEADER_PATH} 52 cp ${MUSL_CODE}/include/malloc.h ${LIBC_HEADER_PATH} 53 cp ${MUSL_CODE}/include/dlfcn.h ${LIBC_HEADER_PATH} 54 cp ${MUSL_CODE}/include/byteswap.h ${LIBC_HEADER_PATH} 55 cp ${MUSL_CODE}/include/pthread.h ${LIBC_HEADER_PATH} 56 cp ${MUSL_CODE}/include/stdlib.h ${LIBC_HEADER_PATH} 57 cp ${MUSL_CODE}/include/stdio.h ${LIBC_HEADER_PATH} 58 cp ${MUSL_CODE}/include/errno.h ${LIBC_HEADER_PATH} 59 cp ${MUSL_CODE}/include/inttypes.h ${LIBC_HEADER_PATH} 60 cp ${MUSL_CODE}/include/elf.h ${LIBC_HEADER_PATH} 61 cp ${MUSL_CODE}/include/assert.h ${LIBC_HEADER_PATH} 62 cp ${MUSL_CODE}/include/string.h ${LIBC_HEADER_PATH} 63 cp ${MUSL_CODE}/include/strings.h ${LIBC_HEADER_PATH} 64 cp ${MUSL_CODE}/include/stdarg.h ${LIBC_HEADER_PATH} 65 cp ${MUSL_CODE}/include/setjmp.h ${LIBC_HEADER_PATH} 66 cp ${MUSL_CODE}/include/fcntl.h ${LIBC_HEADER_PATH} 67 cp ${MUSL_CODE}/include/endian.h ${LIBC_HEADER_PATH} 68 cp ${MUSL_CODE}/include/time.h ${LIBC_HEADER_PATH} 69 cp ${MUSL_CODE}/include/limits.h ${LIBC_HEADER_PATH} 70 cp ${MUSL_CODE}/include/unistd.h ${LIBC_HEADER_PATH} 71 cp ${MUSL_CODE}/include/locale.h ${LIBC_HEADER_PATH} 72 cp ${MUSL_CODE}/include/wchar.h ${LIBC_HEADER_PATH} 73 cp ${MUSL_CODE}/include/sched.h ${LIBC_HEADER_PATH} 74 cp ${MUSL_CODE}/include/ctype.h ${LIBC_HEADER_PATH} 75 cp ${MUSL_CODE}/include/math.h ${LIBC_HEADER_PATH} 76 cp ${MUSL_CODE}/include/wctype.h ${LIBC_HEADER_PATH} 77 cp ${MUSL_CODE}/include/alloca.h ${LIBC_HEADER_PATH} 78 cp ${MUSL_CODE}/include/stddef.h ${LIBC_HEADER_PATH} 79 cp ${MUSL_CODE}/include/stdint.h ${LIBC_HEADER_PATH} 80 cp ${MUSL_CODE}/include/alloca.h ${LIBC_HEADER_PATH} 81 cp ${MUSL_CODE}/include/netdb.h ${LIBC_HEADER_PATH} 82 cp ${MUSL_CODE}/include/poll.h ${LIBC_HEADER_PATH} 83 cp ${MUSL_CODE}/include/syscall.h ${LIBC_HEADER_PATH} 84 cp ${MUSL_CODE}/include/features.h ${LIBC_HEADER_PATH} 85 cp ${MUSL_CODE}/include/sys/mman.h ${LIBC_HEADER_PATH}/sys 86 cp ${MUSL_CODE}/include/sys/syscall.h ${LIBC_HEADER_PATH}/sys 87 cp ${MUSL_CODE}/include/sys/procfs.h ${LIBC_HEADER_PATH}/sys 88 cp ${MUSL_CODE}/include/sys/user.h ${LIBC_HEADER_PATH}/sys 89 cp ${MUSL_CODE}/include/sys/stat.h ${LIBC_HEADER_PATH}/sys 90 cp ${MUSL_CODE}/include/sys/param.h ${LIBC_HEADER_PATH}/sys 91 cp ${MUSL_CODE}/include/sys/time.h ${LIBC_HEADER_PATH}/sys 92 cp ${MUSL_CODE}/include/sys/types.h ${LIBC_HEADER_PATH}/sys 93 cp ${MUSL_CODE}/include/sys/select.h ${LIBC_HEADER_PATH}/sys 94 cp ${MUSL_CODE}/include/sys/sysmacros.h ${LIBC_HEADER_PATH}/sys 95 cp ${MUSL_CODE}/include/sys/resource.h ${LIBC_HEADER_PATH}/sys 96 cp ${MUSL_CODE}/include/sys/auxv.h ${LIBC_HEADER_PATH}/sys 97 cp ${MUSL_CODE}/include/sys/uio.h ${LIBC_HEADER_PATH}/sys 98 cp ${MUSL_CODE}/include/sys/socket.h ${LIBC_HEADER_PATH}/sys 99 cp ${MUSL_CODE}/include/sys/un.h ${LIBC_HEADER_PATH}/sys 100 cp ${MUSL_CODE}/include/sys/ioctl.h ${LIBC_HEADER_PATH}/sys 101 cp ${MUSL_CODE}/include/sys/times.h ${LIBC_HEADER_PATH}/sys 102 cp ${MUSL_CODE}/include/netinet/in.h ${LIBC_HEADER_PATH}/netinet 103 cp ${MUSL_CODE}/include/netinet/tcp.h ${LIBC_HEADER_PATH}/netinet 104 cp ${MUSL_CODE}/include/arpa/inet.h ${LIBC_HEADER_PATH}/arpa 105 cp -r ${MUSL_CODE}/porting/linux/user/include/fortify/* ${LIBC_HEADER_PATH}/fortify 106 cp -r ${MUSL_CODE}/arch/generic/* ${LIBC_HEADER_PATH}/arch/generic/ 107 cp -r ${MUSL_CODE}/arch/${ARCH} ${LIBC_ARCH_PATH} 108 109 cp -r ${MUSL_CODE}/arch/${ARCH}/bits/syscall.h.in ${LIBC_ARCH_PATH}/${ARCH}/bits/syscall.h 110 sed -f ${MUSL_CODE}/tools/mkalltypes.sed ${MUSL_CODE}/arch/${ARCH}/bits/alltypes.h.in ${MUSL_CODE}/include/alltypes.h.in > ${LIBC_ARCH_PATH}/${ARCH}/bits/alltypes.h 111 sed -n -e s/__NR_/SYS_/p < ${MUSL_CODE}/arch/${ARCH}/bits/alltypes.h.in >> ${LIBC_ARCH_PATH}/${ARCH}/bits/alltypes.h 112} 113 114function copy_musl_header_file() { 115 mkdir -p ${EXPORT_MUSL_HEADER_PATH} 116 do_copy_musl_header_file ARM32 117 do_copy_musl_header_file ARM64 118} 119 120function copy_bounds_check_header_file() { 121 mkdir -p ${EXPORT_BOUNDS_CHECK_HEADER_PATH} 122 mkdir -p ${EXPORT_BOUNDS_CHECK_HEADER_PATH}/include 123 cp -r ${BOUNDS_CHECK_CODE}/include/* ${EXPORT_BOUNDS_CHECK_HEADER_PATH}/include/ 124} 125 126copy_musl_header_file 127copy_bounds_check_header_file 128