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