|  | # Copyright 2017 The Chromium 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/config.gni") | 
|  | import("//build/config/fuchsia/rules.gni") | 
|  | import("//build/config/sysroot.gni") | 
|  |  | 
|  | assert(is_fuchsia) | 
|  | assert(!is_posix) | 
|  |  | 
|  | config("compiler") { | 
|  | sdk_version_file = rebase_path("$fuchsia_sdk/.hash") | 
|  | sdk_version = read_file(sdk_version_file, "trim string") | 
|  | defines = [ | 
|  | # To force full builds after SDK updates in case of ABI changes. | 
|  | "FUCHSIA_SDK_VERSION=$sdk_version", | 
|  | ] | 
|  | cflags = [] | 
|  | ldflags = [] | 
|  | if (current_cpu == "arm64") { | 
|  | cflags += [ "--target=aarch64-fuchsia" ] | 
|  | ldflags += [ "--target=aarch64-fuchsia" ] | 
|  | } else if (current_cpu == "x64") { | 
|  | cflags += [ "--target=x86_64-fuchsia" ] | 
|  | ldflags += [ "--target=x86_64-fuchsia" ] | 
|  | } else { | 
|  | assert(false, "Unsupported architecture") | 
|  | } | 
|  | asmflags = cflags | 
|  |  | 
|  | ldflags += [ | 
|  | # TODO(thakis): Once Fuchsia's libclang_rt.builtin no longer has upstream | 
|  | # patches, we might want to make tools/clang/scripts/update.py build it | 
|  | # and bundle it with the clang package instead of using the library from | 
|  | # the SDK, https://crbug.com/724204 | 
|  | # Note: Intentionally 7.0.0 instead of $clang_version because the clang | 
|  | # version of the toolchain_libs directory in the Fuchsia SDK can be | 
|  | # different from the version of Chromium's clang. | 
|  | "-resource-dir", | 
|  | rebase_path(fuchsia_sdk, root_build_dir) + "/toolchain_libs/clang/7.0.0", | 
|  |  | 
|  | # The stack defaults to 256k on Fuchsia (see | 
|  | # https://fuchsia.googlesource.com/zircon/+/master/system/private/zircon/stack.h#9), | 
|  | # but on other platforms it's much higher, so a variety of code assumes more | 
|  | # will be available. Raise to 8M which matches e.g. macOS. | 
|  | "-Wl,-z,stack-size=0x800000", | 
|  |  | 
|  | # We always want fdio or else e.g. stdio wouldn't be initialized if fdio | 
|  | # happens to not be directly referenced. The common POSIX-y compiler setup | 
|  | # uses -Wl,--as-needed which drops it if it's simply "-lfdio" from a libs | 
|  | # setting. Disable --as-needed, add fdio, and then set back to --as-needed. | 
|  | # https://crbug.com/731217. | 
|  | "-Wl,--no-as-needed", | 
|  | "-lfdio", | 
|  | "-Wl,--as-needed", | 
|  | ] | 
|  |  | 
|  | # Add SDK lib dir for -lfdio above. | 
|  | lib_dirs = [ rebase_path("${fuchsia_sdk}/arch/${current_cpu}/lib") ] | 
|  |  | 
|  | # TODO(crbug.com/821951): Clang enables SafeStack by default when targeting | 
|  | # Fuchsia, but it breaks some tests, notably in V8. | 
|  | cflags += [ "-fno-sanitize=safe-stack" ] | 
|  |  | 
|  | libs = [ "zircon" ] | 
|  | } | 
|  |  | 
|  | # Writes an extended version of fvm.blk to fvm.extended.blk. | 
|  | blobstore_extended_path = "$root_out_dir/fvm.extended.blk" | 
|  | action("blobstore_extended_fvm") { | 
|  | # The file is grown by 1GB, which should be large enough to hold packaged | 
|  | # binaries and assets. The value should be increased if the size becomes a | 
|  | # limitation in the future. | 
|  | _extend_size = "1073741824"  # 1GB | 
|  |  | 
|  | if (current_cpu == "arm64") { | 
|  | _target_dir = "//third_party/fuchsia-sdk/sdk/target/aarch64" | 
|  | } else if (current_cpu == "x64") { | 
|  | _target_dir = "//third_party/fuchsia-sdk/sdk/target/x86_64" | 
|  | } | 
|  |  | 
|  | script = "//build/config/fuchsia/extend_fvm.py" | 
|  |  | 
|  | inputs = [ | 
|  | "${_target_dir}/fvm.blk", | 
|  | "${_target_dir}/bootdata-blob.bin", | 
|  | "${_target_dir}/zircon.bin", | 
|  | ] | 
|  | outputs = [ | 
|  | blobstore_extended_path, | 
|  | ] | 
|  |  | 
|  | args = [ | 
|  | rebase_path("${fuchsia_sdk}/tools/fvm"), | 
|  | rebase_path("${_target_dir}/fvm.blk"), | 
|  | rebase_path(blobstore_extended_path), | 
|  | _extend_size, | 
|  | ] | 
|  | } | 
|  |  | 
|  | #  _________________________________________ | 
|  | # / Create a compressed copy-on-write (COW) \ | 
|  | # \ image based on fvm.blk.                 / | 
|  | #  ----------------------------------------- | 
|  | #         \   ^__^ | 
|  | #          \  (oo)\_______ | 
|  | #             (__)\       )\/\ | 
|  | #                 ||----w | | 
|  | #                 ||     || | 
|  | action("blobstore_extended_qcow2") { | 
|  | script = "//build/gn_run_binary.py" | 
|  |  | 
|  | deps = [ | 
|  | ":blobstore_extended_fvm", | 
|  | ] | 
|  | inputs = [ | 
|  | blobstore_extended_path, | 
|  | ] | 
|  | outputs = [ | 
|  | blobstore_qcow_path, | 
|  | ] | 
|  | data = [ | 
|  | blobstore_qcow_path, | 
|  | ] | 
|  |  | 
|  | args = [ | 
|  | rebase_path("//third_party/fuchsia-sdk/sdk/qemu/bin/qemu-img", | 
|  | root_build_dir), | 
|  | "convert", | 
|  | "-f", | 
|  | "raw", | 
|  | "-O", | 
|  | "qcow2", | 
|  | "-c", | 
|  | rebase_path(blobstore_extended_path), | 
|  | rebase_path(blobstore_qcow_path), | 
|  | ] | 
|  | } |