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 ":FreeBSD_copy", 22 ":copy_uapi_file", 23 ":create_alltypes_h_file", 24 ":create_syscall_h_file", 25 ":create_version_h_file", 26 ":musl_copy_inc_arpa_file", 27 ":musl_copy_inc_hook_file", 28 ":musl_copy_inc_net_file", 29 ":musl_copy_inc_netinet_file", 30 ":musl_copy_inc_netpacket_file", 31 ] 32} 33 34action("create_porting_src") { 35 script = "//third_party/musl/scripts/porting.sh" 36 37 sources_dir = [ "//third_party/musl" ] 38 39 outdir = [ "${target_out_dir}/${musl_ported_dir}" ] 40 41 src_files = musl_src_arch_file 42 src_files += musl_src_file 43 src_files += musl_src_ldso 44 src_files += musl_inc_bits_files 45 src_files += musl_inc_arpa_files 46 src_files += musl_inc_net_files 47 src_files += musl_inc_netinet_files 48 src_files += musl_inc_netpacket_files 49 src_files += musl_inc_scsi_files 50 src_files += musl_inc_sys_files 51 src_files += musl_inc_fortify_files 52 src_files += musl_inc_root_files 53 src_files += musl_inc_info_files 54 src_files += musl_inc_trace_files 55 56 src_files += [ 57 "crt/Scrt1.c", 58 "crt/crt1.c", 59 "crt/rcrt1.c", 60 "tools/mkalltypes.sed", 61 "arch/${musl_arch}/bits/alltypes.h.in", 62 "arch/${musl_arch}/bits/syscall.h.in", 63 "include/alltypes.h.in", 64 "VERSION", 65 "tools/version.sh", 66 "tools/install.sh", 67 "scripts/install.py", 68 "scripts/create_alltypes.sh", 69 "scripts/create_vesion.sh", 70 "scripts/create_syscall.sh", 71 ] 72 src_files += [ 73 "crt/${musl_arch}/crti.s", 74 "crt/${musl_arch}/crtn.s", 75 ] 76 77 args = [ "-i" ] + rebase_path(sources_dir) 78 args += [ "-o" ] + rebase_path(outdir) 79 args += [ "-p" ] + [ "${musl_target_os}" ] 80 foreach(i, src_files) { 81 foreach(s, musl_src_files_ext) { 82 if (i == s) { 83 src_files -= [ "${s}" ] 84 } 85 } 86 } 87 88 outputs = [] 89 foreach(s, src_files) { 90 outputs += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 91 } 92 93 foreach(s, musl_src_files_ext) { 94 outputs += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 95 } 96 97 inputs = [] 98 foreach(i, src_files) { 99 foreach(s, musl_src_linux_files) { 100 if (i == s) { 101 src_files -= [ "${s}" ] 102 } 103 } 104 } 105 foreach(s, src_files) { 106 inputs += [ "${musl_dir}/${s}" ] 107 } 108 109 foreach(s, musl_src_files_ext) { 110 inputs += [ "${musl_dir}/${s}" ] 111 } 112} 113 114action("create_alltypes_h_file") { 115 script = "${target_out_dir}/${musl_ported_dir}/scripts/create_alltypes.sh" 116 117 sources = [ "${target_out_dir}/${musl_ported_dir}/tools/mkalltypes.sed" ] 118 119 sources += [ 120 "${target_out_dir}/${musl_ported_dir}/arch/${musl_arch}/bits/alltypes.h.in", 121 "${target_out_dir}/${musl_ported_dir}/include/alltypes.h.in", 122 ] 123 124 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/bits/alltypes.h" ] 125 126 args = [ "-o" ] + rebase_path(outputs, root_build_dir) + 127 rebase_path(sources, root_build_dir) 128 129 deps = [ ":create_porting_src" ] 130} 131 132action("create_version_h_file") { 133 script = "${target_out_dir}/${musl_ported_dir}/scripts/create_vesion.sh" 134 135 sources = [ 136 "${target_out_dir}/${musl_ported_dir}/VERSION", 137 "${target_out_dir}/${musl_ported_dir}/tools/version.sh", 138 ] 139 140 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/version.h" ] 141 142 args = 143 rebase_path(sources, root_build_dir) + 144 [ rebase_path("${target_out_dir}/${musl_inc_out_dir}", root_build_dir) ] 145 146 deps = [ ":create_porting_src" ] 147} 148 149action("create_syscall_h_file") { 150 script = "${target_out_dir}/${musl_ported_dir}/scripts/create_syscall.sh" 151 152 sources = [ 153 "${target_out_dir}/${musl_ported_dir}/arch/${musl_arch}/bits/syscall.h.in", 154 ] 155 156 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/bits/syscall.h" ] 157 158 args = rebase_path(sources, root_build_dir) + 159 rebase_path(outputs, root_build_dir) 160 161 deps = [ ":create_porting_src" ] 162} 163 164uapi_from = "local" 165uapi_full_path = rebase_path(musl_uapi_dir) 166arguments_uapi = [ "-c" ] 167 168# exclude these files because they need special treatment 169if (uapi_from == "make") { 170 exclude_files = "^asm\$|^scsi\$" 171} else { 172 exclude_files = "^asm-arm\$|^asm-arm64\$|^scsi\$" 173} 174 175arguments_uapi += 176 [ "ls ${uapi_full_path} | grep -Ev " + "\"" + "${exclude_files}" + "\"" ] 177uspi_files = exec_script("/bin/sh", arguments_uapi, "list lines") 178 179# Generate a copy target for each file 180foreach(file, uspi_files) { 181 copy("copy_uapi_${file}") { 182 sources = [ "${musl_uapi_dir}/${file}" ] 183 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/${file}" ] 184 } 185} 186 187group("copy_uapi_scsi") { 188 deps = [] 189 sources = [] 190 outputs = [] 191 uapi_scsi_dir = rebase_path("${musl_uapi_dir}/scsi") 192 arguments_scsi = [ "-c" ] 193 arguments_scsi += [ "ls ${uapi_scsi_dir}" ] 194 uapi_scsi_files = exec_script("/bin/sh", arguments_scsi, "list lines") 195 196 # Generate a copy target for each file in scsi dir to avoid being influenced by musl_copy_inc_scsi output 197 foreach(file, uapi_scsi_files) { 198 copy("copy_uapi_scsi_${file}") { 199 sources += [ "${musl_uapi_dir}/scsi/${file}" ] 200 outputs += [ "${target_out_dir}/${musl_inc_out_dir}/scsi/${file}" ] 201 } 202 deps += [ ":copy_uapi_scsi_${file}" ] 203 } 204} 205 206copy("copy_uapi_asm") { 207 if (uapi_from == "local") { 208 if ("${musl_arch}" == "arm") { 209 file_name = "asm-arm" 210 } else { # aarch64 and x86_64 use same file 211 file_name = "asm-arm64" 212 } 213 sources = [ "${musl_uapi_dir}/${file_name}/asm" ] 214 } else { 215 sources = [ "${musl_uapi_dir}/asm" ] 216 } 217 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/asm" ] 218} 219 220group("copy_uapi_file") { 221 deps = [ ":copy_uapi_scsi" ] 222 223 # We need do different processing for asm according to the source of uapi 224 deps += [ ":copy_uapi_asm" ] 225 foreach(file, uspi_files) { 226 deps += [ ":copy_uapi_${file}" ] 227 } 228} 229 230copy("musl_copy_inc_hook_file") { 231 sources = musl_inc_hook_files 232 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] 233} 234 235copy("musl_copy_inc_bits") { 236 sources = [] 237 sources_bits = musl_inc_bits_files 238 foreach(s, sources_bits) { 239 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 240 } 241 outputs = 242 [ "${target_out_dir}/${musl_inc_out_dir}/bits/{{source_file_part}}" ] 243 deps = [ ":create_porting_src" ] 244} 245 246copy("musl_copy_inc_fortify") { 247 sources = [] 248 sources_fortify = musl_inc_fortify_files 249 foreach(s, sources_fortify) { 250 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 251 } 252 outputs = 253 [ "${target_out_dir}/${musl_inc_out_dir}/fortify/{{source_file_part}}" ] 254 deps = [ ":create_porting_src" ] 255} 256 257copy("musl_copy_inc_root") { 258 sources = [] 259 sources_inc_root = musl_inc_root_files 260 foreach(s, sources_inc_root) { 261 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 262 } 263 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ] 264 deps = [ ":create_porting_src" ] 265} 266 267copy("musl_copy_inc_sys") { 268 sources = [] 269 sources_inc_sys = musl_inc_sys_files 270 foreach(s, sources_inc_sys) { 271 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 272 } 273 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/sys/{{source_file_part}}" ] 274 deps = [ ":create_porting_src" ] 275} 276 277copy("musl_copy_inc_netinet_file") { 278 sources = [] 279 sources_netinet_file = musl_inc_netinet_files 280 foreach(s, sources_netinet_file) { 281 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 282 } 283 outputs = 284 [ "${target_out_dir}/${musl_inc_out_dir}/netinet/{{source_file_part}}" ] 285 deps = [ ":create_porting_src" ] 286} 287 288copy("musl_copy_inc_arpa_file") { 289 sources = [] 290 sources_arpa_file = musl_inc_arpa_files 291 foreach(s, sources_arpa_file) { 292 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 293 } 294 outputs = 295 [ "${target_out_dir}/${musl_inc_out_dir}/arpa/{{source_file_part}}" ] 296 deps = [ ":create_porting_src" ] 297} 298 299copy("musl_copy_inc_net_file") { 300 sources = [] 301 sources_net_file = musl_inc_net_files 302 foreach(s, sources_net_file) { 303 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 304 } 305 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/net/{{source_file_part}}" ] 306 deps = [ ":create_porting_src" ] 307} 308 309copy("musl_copy_inc_netpacket_file") { 310 sources = [] 311 sources_netpacket_file = musl_inc_netpacket_files 312 foreach(s, sources_netpacket_file) { 313 sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ] 314 } 315 outputs = 316 [ "${target_out_dir}/${musl_inc_out_dir}/netpacket/{{source_file_part}}" ] 317 deps = [ ":create_porting_src" ] 318} 319 320group("FreeBSD_copy") { 321 deps = [ ":FreeBSD_sys_headers" ] 322} 323 324copy("FreeBSD_sys_headers") { 325 sources = freebsd_sys_headers 326 outputs = [ "${target_out_dir}/${musl_inc_out_dir}/sys/{{source_file_part}}" ] 327 deps = [ ":create_porting_src" ] 328} 329