1# Copyright (c) 2023 Huawei Device Co., Ltd. 2# Licensed under the Apache License, Version 2.0 (the "License"); 3# you may not use this file except in compliance with the License. 4# You may obtain a copy of the License at 5# 6# http://www.apache.org/licenses/LICENSE-2.0 7# 8# Unless required by applicable law or agreed to in writing, software 9# distributed under the License is distributed on an "AS IS" BASIS, 10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11# See the License for the specific language governing permissions and 12# limitations under the License. 13 14import("$build_root/third_party_gn/musl/musl_template.gni") 15 16musl_libs("soft_libs") { 17} 18 19group("musl_headers") { 20 deps = [ 21 ":copy_uapi_file", 22 ":create_alltypes_h_file", 23 ":create_syscall_h_file", 24 ":create_version_h_file", 25 ":musl_copy_inc_arpa_file", 26 ":musl_copy_inc_hook_file", 27 ":musl_copy_inc_net_file", 28 ":musl_copy_inc_netinet_file", 29 ":musl_copy_inc_netpacket_file", 30 ] 31} 32 33action("create_porting_src") { 34 script = "//third_party/musl/scripts/porting.sh" 35 36 sources_dir = [ "//third_party/musl" ] 37 38 outdir = [ "${target_out_dir}/${musl_ported_dir}" ] 39 40 src_files = musl_src_arch_file 41 src_files += musl_inc_root_files 42 src_files += musl_inc_fortify_files 43 src_files += musl_inc_sys_files 44 src_files += musl_inc_scsi_files 45 src_files += musl_inc_netpacket_files 46 src_files += musl_inc_netinet_files 47 src_files += musl_inc_net_files 48 src_files += musl_inc_arpa_files 49 src_files += musl_inc_bits_files 50 src_files += musl_src_ldso 51 src_files += musl_src_file 52 53 src_files += [ 54 "scripts/create_syscall.sh", 55 "scripts/create_vesion.sh", 56 "scripts/create_alltypes.sh", 57 "scripts/install.py", 58 "tools/install.sh", 59 "tools/version.sh", 60 "VERSION", 61 "include/alltypes.h.in", 62 "arch/${musl_arch}/bits/syscall.h.in", 63 "arch/${musl_arch}/bits/alltypes.h.in", 64 "tools/mkalltypes.sed", 65 "crt/rcrt1.c", 66 "crt/crt1.c", 67 "crt/Scrt1.c", 68 "crt/${musl_arch}/crtn.s", 69 "crt/${musl_arch}/crti.s", 70 ] 71 args = [ "-i" ] + rebase_path(sources_dir) 72 args += [ "-o" ] + rebase_path(outdir) 73 args += [ "-p" ] + [ "${musl_target_os}" ] 74 foreach(i, src_files) { 75 foreach(s, musl_src_porting_file) { 76 if (i == s) { 77 src_files -= [ "${s}" ] 78 } 79 } 80 } 81 82 outputs = [] 83 foreach(s, src_files) { 84 outputs += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 85 } 86 87 foreach(s, musl_src_porting_file) { 88 outputs += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 89 } 90 inputs = [] 91 foreach(s, src_files) { 92 inputs += [ "${musl_dir}/${s}" ] 93 } 94 95 foreach(s, musl_src_porting_file) { 96 inputs += [ "${musl_porting_dir}/${s}" ] 97 } 98} 99 100action("create_alltypes_h_file") { 101 script = "${target_out_dir}/${musl_ported_dir}/scripts/create_alltypes.sh" 102 103 sources = [ "${target_out_dir}/${musl_ported_dir}/tools/mkalltypes.sed" ] 104 105 sources += [ 106 "${target_out_dir}/${musl_ported_dir}/arch/${musl_arch}/bits/alltypes.h.in", 107 "${target_out_dir}/${musl_ported_dir}/include/alltypes.h.in", 108 ] 109 110 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/bits/alltypes.h" ] 111 112 args = [ "-o" ] + rebase_path(outputs, root_build_dir) + 113 rebase_path(sources, root_build_dir) 114 115 deps = [ ":create_porting_src" ] 116} 117 118action("create_version_h_file") { 119 script = "${target_out_dir}/${musl_ported_dir}/scripts/create_vesion.sh" 120 121 sources = [ 122 "${target_out_dir}/${musl_ported_dir}/VERSION", 123 "${target_out_dir}/${musl_ported_dir}/tools/version.sh", 124 ] 125 126 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/version.h" ] 127 128 args = 129 rebase_path(sources, root_build_dir) + 130 [ rebase_path("${target_out_dir}/${musl_inc_out_dir}", root_build_dir) ] 131 132 deps = [ ":create_porting_src" ] 133} 134 135action("create_syscall_h_file") { 136 script = "${target_out_dir}/${musl_ported_dir}/scripts/create_syscall.sh" 137 138 sources = [ 139 "${target_out_dir}/${musl_ported_dir}/arch/${musl_arch}/bits/syscall.h.in", 140 ] 141 142 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/bits/syscall.h" ] 143 144 args = rebase_path(sources, root_build_dir) + 145 rebase_path(outputs, root_build_dir) 146 147 deps = [ ":create_porting_src" ] 148} 149 150uapi_from = "local" 151uapi_full_path = rebase_path(uapi_dir) 152arguments_uapi = [ "-c" ] 153 154# exclude these files because they need special treatment 155if (uapi_from == "make") { 156 exclude_files = "^asm\$|^scsi\$" 157} else { 158 exclude_files = "^asm-arm\$|^asm-arm64\$|^scsi\$" 159} 160 161arguments_uapi += 162 [ "ls ${uapi_full_path} | grep -Ev " + "\"" + "${exclude_files}" + "\"" ] 163uspi_files = exec_script("/bin/sh", arguments_uapi, "list lines") 164 165# Generate a copy target for each file 166foreach(file, uspi_files) { 167 copy("copy_uapi_${file}") { 168 sources = [ "${uapi_dir}/${file}" ] 169 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/${file}" ] 170 } 171} 172 173group("copy_uapi_scsi") { 174 deps = [] 175 sources = [] 176 outputs = [] 177 uapi_scsi_dir = rebase_path("${uapi_dir}/scsi") 178 arguments_scsi = [ "-c" ] 179 arguments_scsi += [ "ls ${uapi_scsi_dir}" ] 180 uapi_scsi_files = exec_script("/bin/sh", arguments_scsi, "list lines") 181 182 # Generate a copy target for each file in scsi dir to avoid being influenced by musl_copy_inc_scsi output 183 foreach(file, uapi_scsi_files) { 184 copy("copy_uapi_scsi_${file}") { 185 sources += [ "${uapi_dir}/scsi/${file}" ] 186 outputs += [ "${target_out_dir}/${musl_inc_out_dir}/scsi/${file}" ] 187 } 188 deps += [ ":copy_uapi_scsi_${file}" ] 189 } 190} 191 192copy("copy_uapi_asm") { 193 if (uapi_from == "local") { 194 if ("${musl_arch}" == "arm") { 195 file_name = "asm-arm" 196 } else { # aarch64 and x86_64 use same file 197 file_name = "asm-arm64" 198 } 199 sources = [ "${uapi_dir}/${file_name}/asm" ] 200 } else { 201 sources = [ "${uapi_dir}/asm" ] 202 } 203 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/asm" ] 204} 205 206group("copy_uapi_file") { 207 deps = [ ":copy_uapi_scsi" ] 208 209 # We need do different processing for asm according to the source of uapi 210 deps += [ ":copy_uapi_asm" ] 211 foreach(file, uspi_files) { 212 deps += [ ":copy_uapi_${file}" ] 213 } 214} 215 216copy("musl_copy_inc_hook_file") { 217 sources = musl_inc_hook_files 218 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] 219} 220 221copy("musl_copy_inc_bits") { 222 sources = [] 223 sources_bits = musl_inc_bits_files 224 foreach(s, sources_bits) { 225 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 226 } 227 outputs = 228 [ "${target_out_dir}/${musl_inc_out_dir}/bits/{{source_file_part}}" ] 229 deps = [ ":create_porting_src" ] 230} 231 232copy("musl_copy_inc_fortify") { 233 sources = [] 234 sources_fortify = musl_inc_fortify_files 235 foreach(s, sources_fortify) { 236 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 237 } 238 outputs = 239 [ "${target_out_dir}/${musl_inc_out_dir}/fortify/{{source_file_part}}" ] 240 deps = [ ":create_porting_src" ] 241} 242 243copy("musl_copy_inc_root") { 244 sources = [] 245 sources_inc_root = musl_inc_root_files 246 foreach(s, sources_inc_root) { 247 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 248 } 249 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] 250 deps = [ ":create_porting_src" ] 251} 252 253copy("musl_copy_inc_sys") { 254 sources = [] 255 sources_inc_sys = musl_inc_sys_files 256 foreach(s, sources_inc_sys) { 257 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 258 } 259 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/sys/{{source_file_part}}" ] 260 deps = [ ":create_porting_src" ] 261} 262 263copy("musl_copy_inc_netinet_file") { 264 sources = [] 265 sources_netinet_file = musl_inc_netinet_files 266 foreach(s, sources_netinet_file) { 267 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 268 } 269 outputs = 270 [ "${target_out_dir}/${musl_inc_out_dir}/netinet/{{source_file_part}}" ] 271 deps = [ ":create_porting_src" ] 272} 273 274copy("musl_copy_inc_arpa_file") { 275 sources = [] 276 sources_arpa_file = musl_inc_arpa_files 277 foreach(s, sources_arpa_file) { 278 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 279 } 280 outputs = 281 [ "${target_out_dir}/${musl_inc_out_dir}/arpa/{{source_file_part}}" ] 282 deps = [ ":create_porting_src" ] 283} 284 285copy("musl_copy_inc_net_file") { 286 sources = [] 287 sources_net_file = musl_inc_net_files 288 foreach(s, sources_net_file) { 289 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 290 } 291 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/net/{{source_file_part}}" ] 292 deps = [ ":create_porting_src" ] 293} 294 295copy("musl_copy_inc_netpacket_file") { 296 sources = [] 297 sources_netpacket_file = musl_inc_netpacket_files 298 foreach(s, sources_netpacket_file) { 299 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 300 } 301 outputs = 302 [ "${target_out_dir}/${musl_inc_out_dir}/netpacket/{{source_file_part}}" ] 303 deps = [ ":create_porting_src" ] 304} 305