• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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