• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1if (is_lite_system && current_os == "ohos") {
2  group("sysroot_lite") {
3    print("ohos_build_compiler:", ohos_build_compiler)
4    print("ohos_kernel_type:", ohos_kernel_type)
5
6    # Mini system of liteos_a needs not prepare for build, so set "kernel_is_prebuilt is true" in
7    # config.json to avoid it.
8    if (!is_mini_system && !ohos_kernel_is_prebuilt) {
9      deps = [ "scripts/build_lite:build" ]
10    } else if (!ohos_kernel_is_prebuilt) {
11      if (ohos_kernel_type == "liteos_m") {
12        all_dependent_configs = [
13          "//kernel/liteos_m:public",
14          "//kernel/liteos_m:kconfig_config",
15        ]
16      } else if (ohos_kernel_type == "uniproton") {
17        all_dependent_configs = [
18          "//kernel/uniproton:os_config",
19          "//kernel/uniproton:kconfig_config",
20        ]
21      }
22    }
23  }
24} else {
25  import("musl_template.gni")
26
27  group("musl_all") {
28    deps = [
29      ":musl_headers",
30      ":soft_libs",
31    ]
32  }
33
34  ohos_prebuilt_etc("ld-musl-namespace-${musl_arch}-test.ini") {
35    source =
36        "${musl_porting_dir}/config/ld-musl-namespace-${musl_arch}-test.ini"
37  }
38
39  ohos_prebuilt_etc("ld-musl-namespace-${musl_arch}.ini") {
40    source = "${musl_porting_dir}/config/ld-musl-namespace-${musl_arch}.ini"
41    install_images = [
42      "system",
43      "updater",
44    ]
45  }
46
47  group("musl_ns_config") {
48    deps = [
49      ":ld-musl-namespace-${musl_arch}-test.ini",
50      ":ld-musl-namespace-${musl_arch}.ini",
51    ]
52  }
53
54  group("musl_libs") {
55    deps = [
56      ":musl_headers",
57      ":musl_sysparam",
58      ":soft_libs",
59    ]
60  }
61
62  ohos_prebuilt_etc("musl_sysparam") {
63    source = "${musl_porting_dir}/etc/musl.para"
64    relative_install_dir = "param"
65  }
66
67  musl_libs("soft_libs") {
68  }
69
70  group("musl_headers") {
71    deps = [
72      ":copy_uapi",
73      ":create_alltypes_h",
74      ":create_syscall_h",
75      ":create_version_h",
76      ":musl_copy_inc_arpa",
77      ":musl_copy_inc_bits",
78      ":musl_copy_inc_fortify",
79      ":musl_copy_inc_hook",
80      ":musl_copy_inc_info",
81      ":musl_copy_inc_net",
82      ":musl_copy_inc_netinet",
83      ":musl_copy_inc_netpacket",
84      ":musl_copy_inc_root",
85      ":musl_copy_inc_scsi",
86      ":musl_copy_inc_sys",
87      ":musl_copy_inc_trace",
88      ":musl_ns_config",
89    ]
90  }
91
92  action("create_porting_src") {
93    script = "scripts/porting.sh"
94
95    sources_dir = [ "//third_party/musl" ]
96
97    outdir = [ "${target_out_dir}/${musl_ported_dir}" ]
98
99    src_files = musl_src_arch_file
100    src_files += musl_src_file
101    src_files += musl_src_ldso
102    src_files += musl_inc_bits_files
103    src_files += musl_inc_arpa_files
104    src_files += musl_inc_net_files
105    src_files += musl_inc_netinet_files
106    src_files += musl_inc_netpacket_files
107    src_files += musl_inc_scsi_files
108    src_files += musl_inc_sys_files
109    src_files += musl_inc_fortify_files
110    src_files += musl_inc_root_files
111    src_files += [
112      "crt/${musl_arch}/crti.s",
113      "crt/${musl_arch}/crtn.s",
114      "crt/Scrt1.c",
115      "crt/crt1.c",
116      "crt/rcrt1.c",
117      "tools/mkalltypes.sed",
118      "arch/${musl_arch}/bits/alltypes.h.in",
119      "arch/${musl_arch}/bits/syscall.h.in",
120      "include/alltypes.h.in",
121      "VERSION",
122      "tools/version.sh",
123      "tools/install.sh",
124      "scripts/install.py",
125      "scripts/create_alltypes.sh",
126      "scripts/create_vesion.sh",
127      "scripts/create_syscall.sh",
128    ]
129
130    args = [ "-i" ] + rebase_path(sources_dir)
131    args += [ "-o" ] + rebase_path(outdir)
132    args += [ "-p" ] + [ "${musl_target_os}" ]
133
134    foreach(i, src_files) {
135      foreach(s, musl_src_porting_file) {
136        if (i == s) {
137          src_files -= [ "${s}" ]
138        }
139      }
140    }
141
142    outputs = []
143    foreach(s, src_files) {
144      outputs += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
145    }
146
147    foreach(s, musl_src_porting_file) {
148      outputs += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
149    }
150
151    inputs = []
152    foreach(s, src_files) {
153      inputs += [ "${musl_dir}/${s}" ]
154    }
155
156    foreach(s, musl_src_porting_file) {
157      inputs += [ "${musl_porting_dir}/${s}" ]
158    }
159  }
160
161  action("create_alltypes_h") {
162    script = "${target_out_dir}/${musl_ported_dir}/scripts/create_alltypes.sh"
163
164    outputs = [ "${target_out_dir}/${musl_inc_out_dir}/bits/alltypes.h" ]
165
166    sources = [ "${target_out_dir}/${musl_ported_dir}/tools/mkalltypes.sed" ]
167    sources += [
168      "${target_out_dir}/${musl_ported_dir}/arch/${musl_arch}/bits/alltypes.h.in",
169      "${target_out_dir}/${musl_ported_dir}/include/alltypes.h.in",
170    ]
171
172    args = [ "-o" ] + rebase_path(outputs, root_build_dir)
173    args += rebase_path(sources, root_build_dir)
174
175    deps = [ ":create_porting_src" ]
176  }
177
178  action("create_version_h") {
179    script = "${target_out_dir}/${musl_ported_dir}/scripts/create_vesion.sh"
180
181    outputs = [ "${target_out_dir}/${musl_inc_out_dir}/version.h" ]
182
183    sources = [
184      "${target_out_dir}/${musl_ported_dir}/VERSION",
185      "${target_out_dir}/${musl_ported_dir}/tools/version.sh",
186    ]
187
188    args = rebase_path(sources, root_build_dir)
189    args +=
190        [ rebase_path("${target_out_dir}/${musl_inc_out_dir}", root_build_dir) ]
191
192    deps = [ ":create_porting_src" ]
193  }
194
195  action("create_syscall_h") {
196    script = "${target_out_dir}/${musl_ported_dir}/scripts/create_syscall.sh"
197
198    outputs = [ "${target_out_dir}/${musl_inc_out_dir}/bits/syscall.h" ]
199
200    sources = [ "${target_out_dir}/${musl_ported_dir}/arch/${musl_arch}/bits/syscall.h.in" ]
201
202    args = rebase_path(sources, root_build_dir)
203    args += rebase_path(outputs, root_build_dir)
204
205    deps = [ ":create_porting_src" ]
206  }
207
208  # if uapi_dir does not exist, then make uapi from linux_kernel_dir
209  if (exec_script("/bin/sh",
210                  [
211                    "-c",
212                    "if [ ! -d " + rebase_path(uapi_dir) +
213                        " ]; then echo true; else echo false; fi",
214                  ],
215                  "value")) {
216    kernel_dir = rebase_path(linux_kernel_dir)
217    kernel_out_dir = "${kernel_dir}/make_output"
218    uapi_dir = "${kernel_out_dir}/usr/include"
219    make_uapi_cmd = "rm -rf ${uapi_dir}"
220    make_uapi_cmd += " && make -C ${kernel_dir} -sj headers O=${kernel_out_dir} ARCH=${target_cpu}"
221    make_uapi_cmd += " && cp -f ${kernel_dir}/drivers/staging/android/uapi/ashmem.h ${uapi_dir}/linux/ashmem.h"
222    make_uapi_cmd += " && sed -i '/#define _INPUT_H/i#define _UAPI_INPUT_H' ${uapi_dir}/linux/input.h"
223    make_uapi_cmd += " && sed -i '/struct __kernel_sockaddr_storage/i#define sockaddr_storage __kernel_sockaddr_storage' ${uapi_dir}/linux/socket.h"
224    args_make_uapi = [ "-c" ]
225    args_make_uapi += [ make_uapi_cmd ]
226    exec_script("/bin/sh", args_make_uapi, "value")
227    uapi_from = "make"
228  } else {
229    uapi_from = "local"
230  }
231
232  uapi_full_path = rebase_path(uapi_dir)
233  arguments_uapi = [ "-c" ]
234
235  # exclude these files because they need special treatment
236  if (uapi_from == "make") {
237    exclude_files = "^asm\$|^scsi\$"
238  } else {
239    exclude_files = "^asm-arm\$|^asm-arm64\$|^scsi\$"
240  }
241
242  arguments_uapi +=
243      [ "ls ${uapi_full_path} | grep -Ev " + "\"" + "${exclude_files}" + "\"" ]
244  uspi_files = exec_script("/bin/sh", arguments_uapi, "list lines")
245
246  # Generate a copy target for each file
247  foreach(file, uspi_files) {
248    copy("copy_uapi_${file}") {
249      sources = [ "${uapi_dir}/${file}" ]
250      outputs = [ "${target_out_dir}/${musl_inc_out_dir}/${file}" ]
251    }
252  }
253
254  group("copy_uapi_scsi") {
255    deps = []
256    sources = []
257    outputs = []
258    uapi_scsi_dir = rebase_path("${uapi_dir}/scsi")
259    arguments_scsi = [ "-c" ]
260    arguments_scsi += [ "ls ${uapi_scsi_dir}" ]
261    uapi_scsi_files = exec_script("/bin/sh", arguments_scsi, "list lines")
262
263    # Generate a copy target for each file in scsi dir to avoid being influenced by musl_copy_inc_scsi output
264    foreach(file, uapi_scsi_files) {
265      copy("copy_uapi_scsi_${file}") {
266        sources += [ "${uapi_dir}/scsi/${file}" ]
267        outputs += [ "${target_out_dir}/${musl_inc_out_dir}/scsi/${file}" ]
268      }
269      deps += [ ":copy_uapi_scsi_${file}" ]
270    }
271  }
272
273  copy("copy_uapi_asm") {
274    if (uapi_from == "local") {
275      if ("${musl_arch}" == "arm") {
276        file_name = "asm-arm"
277      } else {  # aarch64 and x86_64 use same file
278        file_name = "asm-arm64"
279      }
280      sources = [ "${uapi_dir}/${file_name}/asm" ]
281    } else {
282      sources = [ "${uapi_dir}/asm" ]
283    }
284    outputs = [ "${target_out_dir}/${musl_inc_out_dir}/asm" ]
285  }
286
287  group("copy_uapi") {
288    deps = [ ":copy_uapi_scsi" ]
289
290    # We need do different processing for asm according to the source of uapi
291    deps += [ ":copy_uapi_asm" ]
292    foreach(file, uspi_files) {
293      deps += [ ":copy_uapi_${file}" ]
294    }
295  }
296
297  copy("musl_copy_inc_bits") {
298    sources = []
299    sources_orig = musl_inc_bits_files
300    foreach(s, sources_orig) {
301      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
302    }
303    outputs =
304        [ "${target_out_dir}/${musl_inc_out_dir}/bits/{{source_file_part}}" ]
305    deps = [ ":create_porting_src" ]
306  }
307
308  copy("musl_copy_inc_arpa") {
309    sources = []
310    sources_orig = musl_inc_arpa_files
311    foreach(s, sources_orig) {
312      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
313    }
314    outputs =
315        [ "${target_out_dir}/${musl_inc_out_dir}/arpa/{{source_file_part}}" ]
316    deps = [ ":create_porting_src" ]
317  }
318
319  copy("musl_copy_inc_net") {
320    sources = []
321    sources_orig = musl_inc_net_files
322    foreach(s, sources_orig) {
323      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
324    }
325    outputs =
326        [ "${target_out_dir}/${musl_inc_out_dir}/net/{{source_file_part}}" ]
327    deps = [ ":create_porting_src" ]
328  }
329
330  copy("musl_copy_inc_netinet") {
331    sources = []
332    sources_orig = musl_inc_netinet_files
333    foreach(s, sources_orig) {
334      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
335    }
336    outputs =
337        [ "${target_out_dir}/${musl_inc_out_dir}/netinet/{{source_file_part}}" ]
338    deps = [ ":create_porting_src" ]
339  }
340
341  copy("musl_copy_inc_netpacket") {
342    sources = []
343    sources_orig = musl_inc_netpacket_files
344    foreach(s, sources_orig) {
345      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
346    }
347    outputs = [
348      "${target_out_dir}/${musl_inc_out_dir}/netpacket/{{source_file_part}}",
349    ]
350    deps = [ ":create_porting_src" ]
351  }
352
353  copy("musl_copy_inc_scsi") {
354    sources = []
355    sources_orig = musl_inc_scsi_files
356    foreach(s, sources_orig) {
357      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
358    }
359    outputs =
360        [ "${target_out_dir}/${musl_inc_out_dir}/scsi/{{source_file_part}}" ]
361    deps = [ ":create_porting_src" ]
362  }
363
364  copy("musl_copy_inc_sys") {
365    sources = []
366    sources_orig = musl_inc_sys_files
367    foreach(s, sources_orig) {
368      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
369    }
370    outputs =
371        [ "${target_out_dir}/${musl_inc_out_dir}/sys/{{source_file_part}}" ]
372    deps = [ ":create_porting_src" ]
373  }
374
375  copy("musl_copy_inc_trace") {
376    sources = []
377    sources_orig = musl_inc_trace_files
378    foreach(s, sources_orig) {
379      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
380    }
381    outputs =
382        [ "${target_out_dir}/${musl_inc_out_dir}/trace/{{source_file_part}}" ]
383    deps = [ ":create_porting_src" ]
384  }
385
386  copy("musl_copy_inc_info") {
387    sources = []
388    sources_orig = musl_inc_info_files
389    foreach(s, sources_orig) {
390      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
391    }
392    outputs =
393        [ "${target_out_dir}/${musl_inc_out_dir}/info/{{source_file_part}}" ]
394    deps = [ ":create_porting_src" ]
395  }
396
397  copy("musl_copy_inc_fortify") {
398    sources = []
399    sources_orig = musl_inc_fortify_files
400    foreach(s, sources_orig) {
401      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
402    }
403    outputs =
404        [ "${target_out_dir}/${musl_inc_out_dir}/fortify/{{source_file_part}}" ]
405    deps = [ ":create_porting_src" ]
406  }
407
408  copy("musl_copy_inc_root") {
409    sources = []
410    sources_orig = musl_inc_root_files
411    foreach(s, sources_orig) {
412      sources += [ "${target_out_dir}/${musl_ported_dir}/${s}" ]
413    }
414    outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ]
415    deps = [ ":create_porting_src" ]
416  }
417
418  copy("musl_copy_inc_hook") {
419    sources = musl_inc_hook_files
420    outputs = [ "${target_out_dir}/${musl_inc_out_dir}/{{source_file_part}}" ]
421  }
422
423  group("libctest") {
424    testonly = true
425    deps = [ "libc-test:musl_libc_test" ]
426  }
427}
428