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" 22 23if (host_os == "mac") { 24 darwin_x86_64_toolchains_dir = "${toolchains_dir}/darwin-x86_64" 25 ohos_ndk_toolchains("darwin_x86_64") { 26 dest_dir = "$ndk_darwin_toolchains_out_dir" 27 sources = [ 28 "${darwin_x86_64_toolchains_dir}/llvm/NOTICE", 29 "${darwin_x86_64_toolchains_dir}/llvm/bin", 30 "${darwin_x86_64_toolchains_dir}/llvm/include", 31 "${darwin_x86_64_toolchains_dir}/llvm/lib", 32 "${darwin_x86_64_toolchains_dir}/llvm/libexec", 33 "${darwin_x86_64_toolchains_dir}/llvm/share", 34 ] 35 license_file = "${darwin_x86_64_toolchains_dir}/llvm/NOTICE" 36 } 37 action("darwin_toolchain") { 38 outputs = [ "${ndk_darwin_toolchains_out_dir}" ] 39 script = "toolchain.sh" 40 args = 41 [ "-i" ] + [ rebase_path("${darwin_x86_64_toolchains_dir}/libcxx-ndk") ] 42 args += [ "-o" ] + [ rebase_path("${ndk_darwin_toolchains_out_dir}") ] 43 deps = [ ":darwin_x86_64" ] 44 } 45} else { 46 linux_x86_64_toolchains_dir = "${toolchains_dir}/linux-x86_64" 47 windows_x86_64_toolchain_dir = "${toolchains_dir}/windows-x86_64" 48 49 ohos_ndk_toolchains("linux_x86_64") { 50 dest_dir = "$ndk_linux_toolchains_out_dir" 51 sources = [ 52 "${linux_x86_64_toolchains_dir}/llvm/NOTICE", 53 "${linux_x86_64_toolchains_dir}/llvm/bin", 54 "${linux_x86_64_toolchains_dir}/llvm/include", 55 "${linux_x86_64_toolchains_dir}/llvm/lib", 56 "${linux_x86_64_toolchains_dir}/llvm/libexec", 57 "${linux_x86_64_toolchains_dir}/llvm/share", 58 ] 59 license_file = "${linux_x86_64_toolchains_dir}/llvm/NOTICE" 60 } 61 62 ohos_ndk_toolchains("windows_x86_64") { 63 dest_dir = "$ndk_windows_toolchains_out_dir" 64 sources = [ 65 "${windows_x86_64_toolchain_dir}/llvm/NOTICE", 66 "${windows_x86_64_toolchain_dir}/llvm/bin", 67 "${windows_x86_64_toolchain_dir}/llvm/include", 68 "${windows_x86_64_toolchain_dir}/llvm/lib", 69 "${windows_x86_64_toolchain_dir}/llvm/libexec", 70 "${windows_x86_64_toolchain_dir}/llvm/share", 71 ] 72 args = [ "--follow-all-symlinks" ] 73 license_file = "${windows_x86_64_toolchain_dir}/llvm/NOTICE" 74 } 75 action("linux_toolchain") { 76 outputs = [ "${ndk_linux_toolchains_out_dir}" ] 77 script = "toolchain.sh" 78 args = 79 [ "-i" ] + [ rebase_path("${linux_x86_64_toolchains_dir}/libcxx-ndk") ] 80 args += [ "-o" ] + [ rebase_path("${ndk_linux_toolchains_out_dir}") ] 81 deps = [ ":linux_x86_64" ] 82 } 83 84 action("windows_toolchain") { 85 outputs = [ "${ndk_windows_toolchains_out_dir}" ] 86 script = "toolchain.sh" 87 args = 88 [ "-i" ] + [ rebase_path("${windows_x86_64_toolchain_dir}/libcxx-ndk") ] 89 args += [ "-o" ] + [ rebase_path("${ndk_windows_toolchains_out_dir}") ] 90 deps = [ ":windows_x86_64" ] 91 } 92} 93 94group("ndk_toolchain") { 95 if (host_os == "mac") { 96 deps = [ ":darwin_toolchain" ] 97 } else { 98 deps = [ 99 ":linux_toolchain", 100 ":windows_toolchain", 101 ] 102 } 103} 104 105group("musl_sysroot") { 106 deps = [ 107 ":copy_musl_sysroot", 108 ":musl_arm_bits_arm32", 109 ":musl_arm_uapi_arm32", 110 ] 111} 112 113action("copy_musl_sysroot") { 114 outputs = [ "${ndk_headers_out_dir}" ] 115 script = "copy_musl_sysroot.sh" 116 args = 117 [ "-i" ] + [ rebase_path("${musl_target_out_dir}/${musl_inc_out_dir}") ] 118 args += [ "-o" ] + [ rebase_path("${ndk_headers_out_dir}") ] 119 args += [ "-t" ] + [ "${musl_arch}" ] 120 deps = [ "//third_party/musl:musl_headers" ] 121} 122 123musl_libs_arm32 = [ 124 "//third_party/musl:create_alltypes_h(//build/toolchain/ohos:ohos_clang_arm)", 125 "//third_party/musl:create_syscall_h(//build/toolchain/ohos:ohos_clang_arm)", 126 "//third_party/musl:musl_copy_inc_bits(//build/toolchain/ohos:ohos_clang_arm)", 127] 128 129musl_lib_arm32 = [ 130 "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_arm)", 131 "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_arm)", 132 "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_arm)", 133 "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_arm)", 134 "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_arm)", 135 "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_arm)", 136 "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_arm)", 137 "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_arm)", 138 "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_arm)", 139 "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_arm)", 140] 141 142musl_lib_arm64 = [ 143 "//third_party/musl:soft_musl_crt_install_action(//build/toolchain/ohos:ohos_clang_arm64)", 144 "//third_party/musl:soft_libc_musl_static(//build/toolchain/ohos:ohos_clang_arm64)", 145 "//third_party/musl:soft_libm(//build/toolchain/ohos:ohos_clang_arm64)", 146 "//third_party/musl:soft_libdl(//build/toolchain/ohos:ohos_clang_arm64)", 147 "//third_party/musl:soft_libpthread(//build/toolchain/ohos:ohos_clang_arm64)", 148 "//third_party/musl:soft_libcrypt(//build/toolchain/ohos:ohos_clang_arm64)", 149 "//third_party/musl:soft_libutil(//build/toolchain/ohos:ohos_clang_arm64)", 150 "//third_party/musl:soft_libxnet(//build/toolchain/ohos:ohos_clang_arm64)", 151 "//third_party/musl:soft_libresolv(//build/toolchain/ohos:ohos_clang_arm64)", 152 "//third_party/musl:soft_librt(//build/toolchain/ohos:ohos_clang_arm64)", 153] 154 155## arm-linux-ohos asm directory 156ohos_ndk_copy("musl_arm_uapi_arm32") { 157 dest_dir = "$ndk_os_irrelevant_out_dir/sysroot/usr/include/arm-linux-ohos" 158 159 sources = 160 [ "//kernel/linux/patches/linux-5.10/prebuilts/usr/include/asm-arm/asm" ] 161 args = [ "--ignore-stale" ] 162} 163 164## arm-linux-ohos bits directory 165ohos_copy("musl_arm_bits_arm32") { 166 deps = musl_libs_arm32 167 sources = [] 168 sources_temp = [ 169 "alltypes.h", 170 "syscall.h", 171 ] 172 sources_temp += musl_inc_bits_files 173 sources_orig = get_path_info(sources_temp, "file") 174 175 # print("${sources_orig}") 176 177 foreach(s, sources_orig) { 178 sources += [ get_label_info(deps[0], "target_out_dir") + 179 "/usr/include/arm-linux-ohos/bits/${s}" ] 180 } 181 outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/include/arm-linux-ohos/bits/{{source_file_part}}" ] 182} 183 184ohos_copy("musl_ndk_libs_arm32") { 185 deps = musl_lib_arm32 186 sources = [ get_label_info(deps[0], "target_out_dir") + 187 "/usr/lib/arm-linux-ohos/Scrt1.o" ] 188 sources += [ get_label_info(deps[0], "target_out_dir") + 189 "/usr/lib/arm-linux-ohos/crt1.o" ] 190 sources += [ get_label_info(deps[0], "target_out_dir") + 191 "/usr/lib/arm-linux-ohos/crti.o" ] 192 sources += [ get_label_info(deps[0], "target_out_dir") + 193 "/usr/lib/arm-linux-ohos/crtn.o" ] 194 sources += [ get_label_info(deps[0], "target_out_dir") + 195 "/usr/lib/arm-linux-ohos/rcrt1.o" ] 196 sources += [ get_label_info(deps[0], "target_out_dir") + 197 "/usr/lib/arm-linux-ohos/libm.a" ] 198 sources += [ get_label_info(deps[0], "target_out_dir") + 199 "/usr/lib/arm-linux-ohos/libdl.a" ] 200 sources += [ get_label_info(deps[0], "target_out_dir") + 201 "/usr/lib/arm-linux-ohos/libc.a" ] 202 sources += [ get_label_info(deps[0], "target_out_dir") + 203 "/usr/lib/arm-linux-ohos/libcrypt.a" ] 204 sources += [ get_label_info(deps[0], "target_out_dir") + 205 "/usr/lib/arm-linux-ohos/libpthread.a" ] 206 sources += [ get_label_info(deps[0], "target_out_dir") + 207 "/usr/lib/arm-linux-ohos/libresolv.a" ] 208 sources += [ get_label_info(deps[0], "target_out_dir") + 209 "/usr/lib/arm-linux-ohos/librt.a" ] 210 sources += [ get_label_info(deps[0], "target_out_dir") + 211 "/usr/lib/arm-linux-ohos/libutil.a" ] 212 sources += [ get_label_info(deps[0], "target_out_dir") + 213 "/usr/lib/arm-linux-ohos/libxnet.a" ] 214 215 outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/arm-linux-ohos/{{source_file_part}}" ] 216} 217 218ohos_copy("musl_ndk_libs_aarch64") { 219 deps = musl_lib_arm64 220 sources = [ get_label_info(deps[0], "target_out_dir") + 221 "/usr/lib/aarch64-linux-ohos/Scrt1.o" ] 222 sources += [ get_label_info(deps[0], "target_out_dir") + 223 "/usr/lib/aarch64-linux-ohos/crt1.o" ] 224 sources += [ get_label_info(deps[0], "target_out_dir") + 225 "/usr/lib/aarch64-linux-ohos/crti.o" ] 226 sources += [ get_label_info(deps[0], "target_out_dir") + 227 "/usr/lib/aarch64-linux-ohos/crtn.o" ] 228 sources += [ get_label_info(deps[0], "target_out_dir") + 229 "/usr/lib/aarch64-linux-ohos/rcrt1.o" ] 230 sources += [ get_label_info(deps[0], "target_out_dir") + 231 "/usr/lib/aarch64-linux-ohos/libc.a" ] 232 sources += [ get_label_info(deps[0], "target_out_dir") + 233 "/usr/lib/aarch64-linux-ohos/libdl.a" ] 234 sources += [ get_label_info(deps[0], "target_out_dir") + 235 "/usr/lib/aarch64-linux-ohos/libm.a" ] 236 sources += [ get_label_info(deps[0], "target_out_dir") + 237 "/usr/lib/aarch64-linux-ohos/libcrypt.a" ] 238 sources += [ get_label_info(deps[0], "target_out_dir") + 239 "/usr/lib/aarch64-linux-ohos/libpthread.a" ] 240 sources += [ get_label_info(deps[0], "target_out_dir") + 241 "/usr/lib/aarch64-linux-ohos/libresolv.a" ] 242 sources += [ get_label_info(deps[0], "target_out_dir") + 243 "/usr/lib/aarch64-linux-ohos/librt.a" ] 244 sources += [ get_label_info(deps[0], "target_out_dir") + 245 "/usr/lib/aarch64-linux-ohos/libutil.a" ] 246 sources += [ get_label_info(deps[0], "target_out_dir") + 247 "/usr/lib/aarch64-linux-ohos/libxnet.a" ] 248 249 outputs = [ "$ndk_os_irrelevant_out_dir/sysroot/usr/lib/aarch64-linux-ohos/{{source_file_part}}" ] 250} 251