• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (C) 2021 Huawei Device Co., Ltd.
2# Copyright (C) 2019 The Android Open Source Project
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#     http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15import("//build/ohos/ndk/ndk.gni")
16import("//third_party/musl/musl_config.gni")
17import("//third_party/musl/musl_src.gni")
18import("//third_party/musl/musl_template.gni")
19
20toolchains_dir = "//prebuilts/clang/ohos"
21musl_target_out_dir = "${root_out_dir}/obj/third_party/musl"
22ndk_musl_include = "ndk_musl_include"
23
24if (host_os == "mac") {
25  if (host_cpu == "arm64") {
26    toolchains_file_name = "darwin-arm64"
27    deps_name = "darwin_arm64"
28  } else {
29    toolchains_file_name = "darwin-x86_64"
30    deps_name = "darwin_x86_64"
31  }
32
33  darwin_system_toolchains_dir = "${toolchains_dir}/${toolchains_file_name}"
34  ohos_ndk_toolchains("${deps_name}") {
35    dest_dir = "$ndk_darwin_toolchains_out_dir"
36    sources = [
37      "${darwin_system_toolchains_dir}/llvm/NOTICE",
38      "${darwin_system_toolchains_dir}/llvm/bin",
39      "${darwin_system_toolchains_dir}/llvm/include",
40      "${darwin_system_toolchains_dir}/llvm/lib",
41      "${darwin_system_toolchains_dir}/llvm/libexec",
42      "${darwin_system_toolchains_dir}/llvm/share",
43    ]
44    license_file = "${darwin_system_toolchains_dir}/llvm/NOTICE"
45  }
46
47  action("darwin_toolchain") {
48    outputs = [ "${ndk_darwin_toolchains_out_dir}" ]
49    script = "toolchain.sh"
50    args =
51        [ "-i" ] + [ rebase_path("${darwin_system_toolchains_dir}/libcxx-ndk") ]
52    args += [ "-o" ] + [ rebase_path("${ndk_darwin_toolchains_out_dir}") ]
53    if (host_cpu == "arm64") {
54      deps = [ ":darwin_arm64" ]
55    } else {
56      deps = [ ":darwin_x86_64" ]
57    }
58  }
59} else {
60  linux_x86_64_toolchains_dir = "${toolchains_dir}/linux-x86_64"
61  windows_x86_64_toolchain_dir = "${toolchains_dir}/windows-x86_64"
62
63  ohos_ndk_toolchains("linux_x86_64") {
64    dest_dir = "$ndk_linux_toolchains_out_dir"
65    sources = [
66      "${linux_x86_64_toolchains_dir}/llvm/NOTICE",
67      "${linux_x86_64_toolchains_dir}/llvm/bin",
68      "${linux_x86_64_toolchains_dir}/llvm/include",
69      "${linux_x86_64_toolchains_dir}/llvm/lib",
70      "${linux_x86_64_toolchains_dir}/llvm/libexec",
71      "${linux_x86_64_toolchains_dir}/llvm/share",
72    ]
73    license_file = "${linux_x86_64_toolchains_dir}/llvm/NOTICE"
74  }
75
76  ohos_ndk_toolchains("windows_x86_64") {
77    dest_dir = "$ndk_windows_toolchains_out_dir"
78    sources = [
79      "${windows_x86_64_toolchain_dir}/llvm/NOTICE",
80      "${windows_x86_64_toolchain_dir}/llvm/bin",
81      "${windows_x86_64_toolchain_dir}/llvm/include",
82      "${windows_x86_64_toolchain_dir}/llvm/lib",
83      "${windows_x86_64_toolchain_dir}/llvm/libexec",
84      "${windows_x86_64_toolchain_dir}/llvm/share",
85    ]
86    args = [ "--follow-all-symlinks" ]
87    license_file = "${windows_x86_64_toolchain_dir}/llvm/NOTICE"
88  }
89  action("linux_toolchain") {
90    outputs = [ "${ndk_linux_toolchains_out_dir}" ]
91    script = "toolchain.sh"
92    args =
93        [ "-i" ] + [ rebase_path("${linux_x86_64_toolchains_dir}/libcxx-ndk") ]
94    args += [ "-o" ] + [ rebase_path("${ndk_linux_toolchains_out_dir}") ]
95    deps = [ ":linux_x86_64" ]
96  }
97
98  action("windows_toolchain") {
99    outputs = [ "${ndk_windows_toolchains_out_dir}" ]
100    script = "toolchain.sh"
101    args =
102        [ "-i" ] + [ rebase_path("${windows_x86_64_toolchain_dir}/libcxx-ndk") ]
103    args += [ "-o" ] + [ rebase_path("${ndk_windows_toolchains_out_dir}") ]
104    deps = [ ":windows_x86_64" ]
105  }
106}
107
108group("ndk_toolchain") {
109  if (host_os == "mac") {
110    deps = [ ":darwin_toolchain" ]
111  } else {
112    deps = [
113      ":linux_toolchain",
114      ":windows_toolchain",
115    ]
116  }
117}
118
119group("musl_sysroot") {
120  deps = [
121    ":copy_musl_sysroot",
122    ":musl_arm_bits_arm32",
123    ":musl_arm_uapi_arm32",
124    ":musl_bits_aarch64",
125    ":musl_bits_x86_64",
126  ]
127}
128
129action("copy_ndk_uapi") {
130  outputs = [ "${musl_target_out_dir}/${ndk_musl_include}/linux" ]
131  script = "${musl_dir}/scripts/copy_uapi.sh"
132  args = [ "-i" ] + [ rebase_path("${uapi_dir}") ]
133  args +=
134      [ "-o" ] + [ rebase_path("${musl_target_out_dir}/${ndk_musl_include}") ]
135  args += [ "-t" ] + [ "${musl_arch}" ]
136}
137
138action("copy_ndk_musl_headers") {
139  outputs = [ "${musl_target_out_dir}/${ndk_musl_include}" ]
140  script = "copy_ndk_musl_headers.sh"
141  args = [ "-i" ] + [ rebase_path("${musl_dir}/${ndk_musl_include}") ]
142  args +=
143      [ "-o" ] + [ rebase_path("${musl_target_out_dir}/${ndk_musl_include}") ]
144  deps = [ ":copy_ndk_uapi" ]
145}
146
147action("copy_musl_sysroot") {
148  outputs = [ "${ndk_headers_out_dir}" ]
149  script = "copy_musl_sysroot.sh"
150  args =
151      [ "-i" ] + [ rebase_path("${musl_target_out_dir}/${ndk_musl_include}") ]
152  args += [ "-o" ] + [ rebase_path("${ndk_headers_out_dir}") ]
153  args += [ "-t" ] + [ "${musl_arch}" ]
154  deps = [ ":copy_ndk_musl_headers" ]
155}
156
157musl_libs_arm32 = [
158  "//third_party/musl:create_alltypes_h(//build/toolchain/ohos:ohos_clang_arm)",
159  "//third_party/musl:create_syscall_h(//build/toolchain/ohos:ohos_clang_arm)",
160  "//third_party/musl:musl_copy_inc_bits(//build/toolchain/ohos:ohos_clang_arm)",
161]
162
163musl_libs_aarch64 = [
164  "//third_party/musl:create_alltypes_h(//build/toolchain/ohos:ohos_clang_arm64)",
165  "//third_party/musl:create_syscall_h(//build/toolchain/ohos:ohos_clang_arm64)",
166  "//third_party/musl:musl_copy_inc_bits(//build/toolchain/ohos:ohos_clang_arm64)",
167]
168
169musl_libs_x86_64 = [
170  "//third_party/musl:create_alltypes_h(//build/toolchain/ohos:ohos_clang_x86_64)",
171  "//third_party/musl:create_syscall_h(//build/toolchain/ohos:ohos_clang_x86_64)",
172  "//third_party/musl:musl_copy_inc_bits(//build/toolchain/ohos:ohos_clang_x86_64)",
173]
174
175musl_lib_arm32 = [
176  "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_arm)",
177  "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_arm)",
178  "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_arm)",
179  "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_arm)",
180  "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_arm)",
181  "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_arm)",
182  "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_arm)",
183  "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_arm)",
184  "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_arm)",
185  "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_arm)",
186]
187
188musl_lib_arm64 = [
189  "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_arm64)",
190  "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_arm64)",
191  "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_arm64)",
192  "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_arm64)",
193  "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_arm64)",
194  "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_arm64)",
195  "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_arm64)",
196  "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_arm64)",
197  "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_arm64)",
198  "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_arm64)",
199]
200
201musl_lib_x86_64 = [
202  "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_x86_64)",
203  "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_x86_64)",
204  "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_x86_64)",
205  "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_x86_64)",
206  "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_x86_64)",
207  "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_x86_64)",
208  "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_x86_64)",
209  "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_x86_64)",
210  "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_x86_64)",
211  "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_x86_64)",
212]
213
214## arm-linux-ohos asm directory
215ohos_ndk_copy("musl_arm_uapi_arm32") {
216  dest_dir = "$ndk_os_irrelevant_out_dir/sysroot/usr/include/arm-linux-ohos"
217
218  sources =
219      [ "//kernel/linux/patches/linux-5.10/prebuilts/usr/include/asm-arm/asm" ]
220  args = [ "--ignore-stale" ]
221}
222
223## arm-linux-ohos bits directory
224ohos_copy("musl_arm_bits_arm32") {
225  deps = musl_libs_arm32
226  sources = []
227  sources_temp = [
228    "alltypes.h",
229    "syscall.h",
230  ]
231  sources_temp += musl_inc_bits_files
232  sources_orig = get_path_info(sources_temp, "file")
233
234  # print("${sources_orig}")
235
236  foreach(s, sources_orig) {
237    sources += [ get_label_info(deps[0], "target_out_dir") +
238                 "/usr/include/arm-linux-ohos/bits/${s}" ]
239  }
240  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/include/arm-linux-ohos/bits/{{source_file_part}}" ]
241}
242
243## aarch64-linux-ohos bits directory
244ohos_copy("musl_bits_aarch64") {
245  deps = musl_libs_aarch64
246  sources = []
247  sources_temp = [
248    "alltypes.h",
249    "syscall.h",
250  ]
251  sources_temp += musl_inc_bits_files
252  sources_orig = get_path_info(sources_temp, "file")
253
254  # print("${sources_orig}")
255
256  foreach(s, sources_orig) {
257    sources += [ get_label_info(deps[0], "target_out_dir") +
258                 "/usr/include/aarch64-linux-ohos/bits/${s}" ]
259  }
260  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/include/aarch64-linux-ohos/bits/{{source_file_part}}" ]
261}
262
263## x86_64-linux-ohos bits directory
264ohos_copy("musl_bits_x86_64") {
265  deps = musl_libs_x86_64
266  sources = []
267  sources_temp = [
268    "alltypes.h",
269    "syscall.h",
270  ]
271  sources_temp += musl_inc_bits_files
272  sources_orig = get_path_info(sources_temp, "file")
273
274  # print("${sources_orig}")
275
276  foreach(s, sources_orig) {
277    sources += [ get_label_info(deps[0], "target_out_dir") +
278                 "/usr/include/x86_64-linux-ohos/bits/${s}" ]
279  }
280  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/include/x86_64-linux-ohos/bits/{{source_file_part}}" ]
281}
282
283ohos_copy("musl_ndk_libs_arm32") {
284  deps = musl_lib_arm32
285  crt_dir = "${root_build_dir}/obj/third_party/musl/usr/lib/arm-linux-ohos"
286  sources = [
287    "${crt_dir}/Scrt1.o",
288    "${crt_dir}/crt1.o",
289    "${crt_dir}/crti.o",
290    "${crt_dir}/crtn.o",
291    "${crt_dir}/rcrt1.o",
292  ]
293  sources += [ get_label_info(deps[0], "target_out_dir") +
294               "/usr/lib/arm-linux-ohos/libm.a" ]
295  sources += [ get_label_info(deps[0], "target_out_dir") +
296               "/usr/lib/arm-linux-ohos/libdl.a" ]
297  sources += [ get_label_info(deps[0], "target_out_dir") +
298               "/usr/lib/arm-linux-ohos/libc.a" ]
299  sources += [ get_label_info(deps[0], "target_out_dir") +
300               "/usr/lib/arm-linux-ohos/libcrypt.a" ]
301  sources += [ get_label_info(deps[0], "target_out_dir") +
302               "/usr/lib/arm-linux-ohos/libpthread.a" ]
303  sources += [ get_label_info(deps[0], "target_out_dir") +
304               "/usr/lib/arm-linux-ohos/libresolv.a" ]
305  sources += [ get_label_info(deps[0], "target_out_dir") +
306               "/usr/lib/arm-linux-ohos/librt.a" ]
307  sources += [ get_label_info(deps[0], "target_out_dir") +
308               "/usr/lib/arm-linux-ohos/libutil.a" ]
309  sources += [ get_label_info(deps[0], "target_out_dir") +
310               "/usr/lib/arm-linux-ohos/libxnet.a" ]
311
312  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/arm-linux-ohos/{{source_file_part}}" ]
313}
314
315ohos_copy("musl_ndk_libs_aarch64") {
316  deps = musl_lib_arm64
317  sources = [ get_label_info(deps[0], "target_out_dir") +
318              "/usr/lib/aarch64-linux-ohos/Scrt1.o" ]
319  sources += [ get_label_info(deps[0], "target_out_dir") +
320               "/usr/lib/aarch64-linux-ohos/crt1.o" ]
321  sources += [ get_label_info(deps[0], "target_out_dir") +
322               "/usr/lib/aarch64-linux-ohos/crti.o" ]
323  sources += [ get_label_info(deps[0], "target_out_dir") +
324               "/usr/lib/aarch64-linux-ohos/crtn.o" ]
325  sources += [ get_label_info(deps[0], "target_out_dir") +
326               "/usr/lib/aarch64-linux-ohos/rcrt1.o" ]
327  sources += [ get_label_info(deps[0], "target_out_dir") +
328               "/usr/lib/aarch64-linux-ohos/libc.a" ]
329  sources += [ get_label_info(deps[0], "target_out_dir") +
330               "/usr/lib/aarch64-linux-ohos/libdl.a" ]
331  sources += [ get_label_info(deps[0], "target_out_dir") +
332               "/usr/lib/aarch64-linux-ohos/libm.a" ]
333  sources += [ get_label_info(deps[0], "target_out_dir") +
334               "/usr/lib/aarch64-linux-ohos/libcrypt.a" ]
335  sources += [ get_label_info(deps[0], "target_out_dir") +
336               "/usr/lib/aarch64-linux-ohos/libpthread.a" ]
337  sources += [ get_label_info(deps[0], "target_out_dir") +
338               "/usr/lib/aarch64-linux-ohos/libresolv.a" ]
339  sources += [ get_label_info(deps[0], "target_out_dir") +
340               "/usr/lib/aarch64-linux-ohos/librt.a" ]
341  sources += [ get_label_info(deps[0], "target_out_dir") +
342               "/usr/lib/aarch64-linux-ohos/libutil.a" ]
343  sources += [ get_label_info(deps[0], "target_out_dir") +
344               "/usr/lib/aarch64-linux-ohos/libxnet.a" ]
345
346  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/aarch64-linux-ohos/{{source_file_part}}" ]
347}
348
349ohos_copy("musl_ndk_libs_x86_64") {
350  deps = musl_lib_x86_64
351  crt_dir = "${root_build_dir}/obj/third_party/musl/usr/lib/x86_64-linux-ohos"
352  sources = [
353    "${crt_dir}/Scrt1.o",
354    "${crt_dir}/crt1.o",
355    "${crt_dir}/crti.o",
356    "${crt_dir}/crtn.o",
357    "${crt_dir}/rcrt1.o",
358  ]
359  sources += [ get_label_info(deps[0], "target_out_dir") +
360               "/usr/lib/x86_64-linux-ohos/libc.a" ]
361  sources += [ get_label_info(deps[0], "target_out_dir") +
362               "/usr/lib/x86_64-linux-ohos/libdl.a" ]
363  sources += [ get_label_info(deps[0], "target_out_dir") +
364               "/usr/lib/x86_64-linux-ohos/libm.a" ]
365  sources += [ get_label_info(deps[0], "target_out_dir") +
366               "/usr/lib/x86_64-linux-ohos/libcrypt.a" ]
367  sources += [ get_label_info(deps[0], "target_out_dir") +
368               "/usr/lib/x86_64-linux-ohos/libpthread.a" ]
369  sources += [ get_label_info(deps[0], "target_out_dir") +
370               "/usr/lib/x86_64-linux-ohos/libresolv.a" ]
371  sources += [ get_label_info(deps[0], "target_out_dir") +
372               "/usr/lib/x86_64-linux-ohos/librt.a" ]
373  sources += [ get_label_info(deps[0], "target_out_dir") +
374               "/usr/lib/x86_64-linux-ohos/libutil.a" ]
375  sources += [ get_label_info(deps[0], "target_out_dir") +
376               "/usr/lib/x86_64-linux-ohos/libxnet.a" ]
377
378  outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/x86_64-linux-ohos/{{source_file_part}}" ]
379}
380