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