| # 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), |
| ] |
| } |