| # Copyright 2019 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/config/fuchsia/zircon.gni") |
| import("//build/sdk/sdk_atom.gni") |
| |
| sysroot_toolchain = "//build/zircon:zircon_toolchain" |
| sysroot_dir = get_label_info(":sysroot($sysroot_toolchain)", "target_out_dir") |
| sysroot_dir += "/sysroot" |
| |
| # Collect the metadata for the SDK. |
| file_base = "arch/$target_cpu/sysroot" |
| sdk_files = [] |
| |
| version_content = { |
| root = file_base |
| |
| include_dir = "$file_base/include" |
| headers = [] |
| link_libs = [] |
| dist_libs = [] |
| debug_libs = [] |
| } |
| |
| # Turn the information from Zircon into a set of copy() rules for the |
| # sysroot while filling in $version_content. |
| sysroot_deps = [] |
| i = 0 |
| foreach(entry, zircon_legacy_sysroot) { |
| if (defined(entry.sdk)) { |
| sdk = { |
| } |
| sdk = entry.sdk |
| if (defined(sdk.headers)) { |
| # This has to generate a separate copy() target for each file. |
| dir = rebase_path(sdk.include_dir, "", zircon_root_build_dir) |
| foreach(file, sdk.headers) { |
| i = i + 1 |
| if (current_toolchain == sysroot_toolchain) { |
| copy_target = "copy_$i" |
| sysroot_deps += [ ":$copy_target" ] |
| copy(copy_target) { |
| visibility = [ ":sysroot" ] |
| sources = [ |
| "$dir/$file", |
| ] |
| outputs = [ |
| "$sysroot_dir/include/$file", |
| ] |
| } |
| } |
| version_content.headers += [ "$file_base/include/$file" ] |
| sdk_files += [ |
| { |
| source = "$dir/$file" |
| dest = "$file_base/include/$file" |
| }, |
| ] |
| } |
| } else if (defined(sdk.debug)) { |
| version_content.debug_libs += |
| [ rebase_path(sdk.source, "", zircon_root_build_dir) ] |
| } else { |
| # This is just a single copy() target. |
| if (defined(sdk.link)) { |
| file = "$sysroot_dir/${sdk.link}" |
| version_content.link_libs += [ "$file_base/${sdk.link}" ] |
| sdk_files += [ |
| { |
| source = rebase_path(sdk.source, "", zircon_root_build_dir) |
| dest = "$file_base/${sdk.link}" |
| }, |
| ] |
| } else if (defined(sdk.dist)) { |
| file = "$sysroot_dir/${sdk.dist}" |
| version_content.dist_libs += [ "$file_base/${sdk.dist}" ] |
| sdk_files += [ |
| { |
| source = rebase_path(sdk.source, "", zircon_root_build_dir) |
| dest = "$file_base/${sdk.dist}" |
| }, |
| ] |
| } else { |
| assert(false, "confused by $sdk") |
| } |
| i = i + 1 |
| if (current_toolchain == sysroot_toolchain) { |
| copy_target = "copy_$i" |
| sysroot_deps += [ ":$copy_target" ] |
| copy(copy_target) { |
| visibility = [ ":sysroot" ] |
| sources = [ |
| "$zircon_root_build_dir/${sdk.source}", |
| ] |
| outputs = [ |
| file, |
| ] |
| } |
| } |
| } |
| } |
| } |
| |
| group("sysroot") { |
| if (current_toolchain == sysroot_toolchain) { |
| deps = sysroot_deps |
| } else { |
| assert(sysroot_deps == []) |
| public_deps = [ |
| ":sysroot($sysroot_toolchain)", |
| ] |
| } |
| } |
| |
| write_file("$target_gen_dir/sysroot.meta.in.json", |
| { |
| type = "sysroot" |
| name = "sysroot" |
| versions = { |
| if (target_cpu == "arm64") { |
| arm64 = version_content |
| } else if (target_cpu == "x64") { |
| x64 = version_content |
| } else { |
| assert(false, "Unknown CPU type: $target_cpu") |
| } |
| } |
| }, |
| "json") |
| |
| action("sysroot-meta") { |
| visibility = [ ":*" ] |
| script = "//build/zircon/sdk_build_id.py" |
| sources = [ |
| "$target_gen_dir/sysroot.meta.in.json", |
| ] |
| outputs = [ |
| "$target_out_dir/sysroot.meta.out.json", |
| "$target_out_dir/sysroot.debug.manifest", |
| ] |
| args = [ |
| "--input=" + rebase_path(sources[0], root_build_dir), |
| "--output=" + rebase_path(outputs[0], root_build_dir), |
| "--manifest=" + rebase_path(outputs[1], root_build_dir), |
| "--location=/versions/$target_cpu/debug_libs", |
| ] |
| } |
| meta_outputs = get_target_outputs(":sysroot-meta") |
| |
| sdk_atom("sysroot_sdk") { |
| id = "sdk://pkg/sysroot" |
| category = "partner" |
| |
| non_sdk_deps = [ ":sysroot-meta" ] |
| |
| meta = { |
| dest = "pkg/sysroot/meta.json" |
| schema = "sysroot" |
| source = meta_outputs[0] |
| } |
| |
| files = sdk_files |
| file_list = meta_outputs[1] |
| } |