[GN] Adds dart_host_sdk_toolchain argument

Setting this build argument to something other than host_toolchain will
cause the build target create_host_sdk to be exposed. That target will
build the Dart SDK with the toolchain specified by
dart_host_sdk_toolchain.

TO-549

Change-Id: Ida92521724cf7af34b34fb8c6d3514a226c48dd4
Reviewed-on: https://dart-review.googlesource.com/18145
Reviewed-by: Zach Anderson <zra@google.com>
Commit-Queue: Zach Anderson <zra@google.com>
This commit is contained in:
Zachary Anderson 2017-11-02 17:27:19 +00:00 committed by commit-bot@chromium.org
parent f09c86d0d5
commit 8fc90bd3bc
9 changed files with 91 additions and 51 deletions

View file

@ -2,6 +2,8 @@
# for details. All rights reserved. Use of this source code is governed by a # for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file. # BSD-style license that can be found in the LICENSE file.
import("build/dart_host_sdk_toolchain.gni")
# This target will be built if no target is specified when invoking ninja. # This target will be built if no target is specified when invoking ninja.
group("default") { group("default") {
if (is_fuchsia || is_fuchsia_host) { if (is_fuchsia || is_fuchsia_host) {
@ -72,6 +74,14 @@ group("create_sdk") {
] ]
} }
if (dart_host_sdk_toolchain != host_toolchain) {
group("create_host_sdk") {
deps = [
"sdk:create_sdk($dart_host_sdk_toolchain)",
]
}
}
group("dart2js") { group("dart2js") {
deps = [ deps = [
"utils/compiler:dart2js", "utils/compiler:dart2js",

View file

@ -66,6 +66,8 @@
# saves unnecessarily compiling your tool for the target platform. But if you # saves unnecessarily compiling your tool for the target platform. But if you
# need a target build of your tool as well, just leave off the if statement. # need a target build of your tool as well, just leave off the if statement.
import("dart_host_sdk_toolchain.gni")
if (host_os == "win") { if (host_os == "win") {
_host_executable_suffix = ".exe" _host_executable_suffix = ".exe"
} else { } else {
@ -97,7 +99,7 @@ template("compiled_action") {
outputs = invoker.outputs outputs = invoker.outputs
# Constuct the host toolchain version of the tool. # Constuct the host toolchain version of the tool.
host_tool = invoker.tool + "($host_toolchain)" host_tool = invoker.tool + "($dart_host_toolchain)"
# Get the path to the executable. Currently, this assumes that the tool # Get the path to the executable. Currently, this assumes that the tool
# does not specify output_name so that the target name is the name to use. # does not specify output_name so that the target name is the name to use.
@ -150,7 +152,7 @@ template("compiled_action_foreach") {
outputs = invoker.outputs outputs = invoker.outputs
# Constuct the host toolchain version of the tool. # Constuct the host toolchain version of the tool.
host_tool = invoker.tool + "($host_toolchain)" host_tool = invoker.tool + "($dart_host_toolchain)"
# Get the path to the executable. Currently, this assumes that the tool # Get the path to the executable. Currently, this assumes that the tool
# does not specify output_name so that the target name is the name to use. # does not specify output_name so that the target name is the name to use.

View file

@ -0,0 +1,18 @@
# Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
declare_args() {
# In a cross-build, this should be set to the toolchain to use to build a Dart
# SDK to run on the host that targets the host. This is distinct from
# 'host_toolchain', which in a cross-build builds artifacts to run on the host
# that target the target architecture.
dart_host_sdk_toolchain = host_toolchain
}
# dart_host_toolchain should be used in the Dart tree instead of host_toolchain.
# It will ensure that we are selecting the correct host toolchain.
dart_host_toolchain = host_toolchain
if (current_toolchain == dart_host_sdk_toolchain) {
dart_host_toolchain = dart_host_sdk_toolchain
}

View file

@ -2,6 +2,7 @@
# for details. All rights reserved. Use of this source code is governed by a # for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file. # BSD-style license that can be found in the LICENSE file.
import("../build/dart_host_sdk_toolchain.gni")
import("runtime_args.gni") import("runtime_args.gni")
config("dart_public_config") { config("dart_public_config") {
@ -55,48 +56,52 @@ config("dart_no_snapshot_config") {
config("dart_os_config") { config("dart_os_config") {
defines = [] defines = []
if (target_os == "android") { if (current_toolchain != dart_host_sdk_toolchain) {
defines += [ "TARGET_OS_ANDROID" ] if (target_os == "android") {
} else if (target_os == "fuchsia") { defines += [ "TARGET_OS_ANDROID" ]
defines += [ "TARGET_OS_FUCHSIA" ] } else if (target_os == "fuchsia") {
} else if (target_os == "ios") { defines += [ "TARGET_OS_FUCHSIA" ]
defines += [ "TARGET_OS_MACOS" ] } else if (target_os == "ios") {
defines += [ "TARGET_OS_MACOS_IOS" ] defines += [ "TARGET_OS_MACOS" ]
} else if (target_os == "linux") { defines += [ "TARGET_OS_MACOS_IOS" ]
defines += [ "TARGET_OS_LINUX" ] } else if (target_os == "linux") {
} else if (target_os == "mac") { defines += [ "TARGET_OS_LINUX" ]
defines += [ "TARGET_OS_MACOS" ] } else if (target_os == "mac") {
} else if (target_os == "win") { defines += [ "TARGET_OS_MACOS" ]
defines += [ "TARGET_OS_WINDOWS" ] } else if (target_os == "win") {
} else { defines += [ "TARGET_OS_WINDOWS" ]
print("Unknown target_os: $target_os") } else {
assert(false) print("Unknown target_os: $target_os")
assert(false)
}
} }
} }
config("dart_arch_config") { config("dart_arch_config") {
defines = [] defines = []
if (dart_target_arch == "arm") { if (current_toolchain != dart_host_sdk_toolchain) {
defines += [ "TARGET_ARCH_ARM" ] if (dart_target_arch == "arm") {
} else if (dart_target_arch == "armv6") { defines += [ "TARGET_ARCH_ARM" ]
defines += [ "TARGET_ARCH_ARM" ] } else if (dart_target_arch == "armv6") {
defines += [ "TARGET_ARCH_ARM_6" ] defines += [ "TARGET_ARCH_ARM" ]
} else if (dart_target_arch == "armv5te") { defines += [ "TARGET_ARCH_ARM_6" ]
defines += [ "TARGET_ARCH_ARM" ] } else if (dart_target_arch == "armv5te") {
defines += [ "TARGET_ARCH_ARM_5TE" ] defines += [ "TARGET_ARCH_ARM" ]
} else if (dart_target_arch == "arm64") { defines += [ "TARGET_ARCH_ARM_5TE" ]
defines += [ "TARGET_ARCH_ARM64" ] } else if (dart_target_arch == "arm64") {
} else if (dart_target_arch == "x64") { defines += [ "TARGET_ARCH_ARM64" ]
defines += [ "TARGET_ARCH_X64" ] } else if (dart_target_arch == "x64") {
} else if (dart_target_arch == "ia32" || dart_target_arch == "x86") { defines += [ "TARGET_ARCH_X64" ]
defines += [ "TARGET_ARCH_IA32" ] } else if (dart_target_arch == "ia32" || dart_target_arch == "x86") {
} else if (dart_target_arch == "dbc") { defines += [ "TARGET_ARCH_IA32" ]
defines += [ "TARGET_ARCH_DBC" ] } else if (dart_target_arch == "dbc") {
defines += [ "USING_SIMULATOR" ] defines += [ "TARGET_ARCH_DBC" ]
} else { defines += [ "USING_SIMULATOR" ]
print("Invalid dart_target_arch: $dart_target_arch") } else {
assert(false) print("Invalid dart_target_arch: $dart_target_arch")
assert(false)
}
} }
} }
@ -179,10 +184,10 @@ template("libdart_library") {
} }
static_library(target_name) { static_library(target_name) {
configs += [ configs += [
":dart_arch_config", ":dart_arch_config",
":dart_config", ":dart_config",
":dart_os_config", ":dart_os_config",
] + extra_configs ] + extra_configs
if (is_fuchsia) { if (is_fuchsia) {
configs -= [ "//build/config:symbol_visibility_hidden" ] configs -= [ "//build/config:symbol_visibility_hidden" ]
} }

View file

@ -2,6 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
import("../../build/dart_host_sdk_toolchain.gni")
import("../../build/executable_suffix.gni") import("../../build/executable_suffix.gni")
import("../../build/prebuilt_dart_sdk.gni") import("../../build/prebuilt_dart_sdk.gni")
import("observatory_sources.gni") import("observatory_sources.gni")
@ -10,10 +11,10 @@ import("observatory_sources.gni")
pub_build_deps = [] pub_build_deps = []
pub_build_args = [] pub_build_args = []
if (!prebuilt_dart_exe_works) { if (!prebuilt_dart_exe_works) {
pub_build_deps += [ "../bin:dart_bootstrap($host_toolchain)" ] pub_build_deps += [ "../bin:dart_bootstrap($dart_host_toolchain)" ]
dart_out_dir = dart_out_dir = get_label_info("../bin:dart_bootstrap($dart_host_toolchain)",
get_label_info("../bin:dart_bootstrap($host_toolchain)", "root_out_dir") "root_out_dir")
dart_bootstrap = rebase_path("$dart_out_dir/dart_bootstrap$executable_suffix") dart_bootstrap = rebase_path("$dart_out_dir/dart_bootstrap$executable_suffix")
pub_build_args = [ pub_build_args = [

View file

@ -2,6 +2,7 @@
# for details. All rights reserved. Use of this source code is governed by a # for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file. # BSD-style license that can be found in the LICENSE file.
import("../build/dart_host_sdk_toolchain.gni")
import("../build/prebuilt_dart_sdk.gni") import("../build/prebuilt_dart_sdk.gni")
_dart_root = get_path_info("..", "abspath") _dart_root = get_path_info("..", "abspath")
@ -35,9 +36,9 @@ template("compile_platform") {
depfile = outputs[0] + ".d" depfile = outputs[0] + ".d"
if (!prebuilt_dart_exe_works) { if (!prebuilt_dart_exe_works) {
deps += [ "$_dart_root/runtime/bin:dart_bootstrap($host_toolchain)" ] deps += [ "$_dart_root/runtime/bin:dart_bootstrap($dart_host_toolchain)" ]
dart_out_dir = get_label_info( dart_out_dir = get_label_info(
"$_dart_root/runtime/bin:dart_bootstrap($host_toolchain)", "$_dart_root/runtime/bin:dart_bootstrap($dart_host_toolchain)",
"root_out_dir") "root_out_dir")
args += [ args += [
"--dart-executable", "--dart-executable",

View file

@ -3,6 +3,7 @@
# BSD-style license that can be found in the LICENSE file. # BSD-style license that can be found in the LICENSE file.
import("../../build/compiled_action.gni") import("../../build/compiled_action.gni")
import("../../build/dart_host_sdk_toolchain.gni")
import("../../build/prebuilt_dart_sdk.gni") import("../../build/prebuilt_dart_sdk.gni")
import("../../utils/compile_platform.gni") import("../../utils/compile_platform.gni")
import("../../utils/generate_patch_sdk.gni") import("../../utils/generate_patch_sdk.gni")
@ -84,7 +85,7 @@ generate_patched_sdk("patched_dart2js_sdk") {
deps = [ deps = [
# TODO(ahe): This is needed by ../../tools/patch_sdk.dart to compute # TODO(ahe): This is needed by ../../tools/patch_sdk.dart to compute
# dependencies. # dependencies.
"../../runtime/vm:kernel_platform_files($host_toolchain)", "../../runtime/vm:kernel_platform_files($dart_host_toolchain)",
] ]
input_patches_dir = "../../sdk/lib/_internal/js_runtime/lib" input_patches_dir = "../../sdk/lib/_internal/js_runtime/lib"
patched_sdk_dir = "patched_dart2js_sdk" patched_sdk_dir = "patched_dart2js_sdk"

View file

@ -2,6 +2,7 @@
# for details. All rights reserved. Use of this source code is governed by a # for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file. # BSD-style license that can be found in the LICENSE file.
import("../build/dart_host_sdk_toolchain.gni")
import("../build/prebuilt_dart_sdk.gni") import("../build/prebuilt_dart_sdk.gni")
_dart_root = get_path_info("..", "abspath") _dart_root = get_path_info("..", "abspath")
@ -28,7 +29,7 @@ template("generate_patched_sdk") {
} }
if (!prebuilt_dart_exe_works) { if (!prebuilt_dart_exe_works) {
deps += [ "$_dart_root/runtime/bin:dart_bootstrap($host_toolchain)" ] deps += [ "$_dart_root/runtime/bin:dart_bootstrap($dart_host_toolchain)" ]
} }
script = "$_dart_root/tools/patch_sdk.py" script = "$_dart_root/tools/patch_sdk.py"
@ -55,7 +56,7 @@ template("generate_patched_sdk") {
args = [ "--quiet" ] args = [ "--quiet" ]
if (!prebuilt_dart_exe_works) { if (!prebuilt_dart_exe_works) {
dart_out_dir = get_label_info( dart_out_dir = get_label_info(
"$_dart_root/runtime/bin:dart_bootstrap($host_toolchain)", "$_dart_root/runtime/bin:dart_bootstrap($dart_host_toolchain)",
"root_out_dir") "root_out_dir")
dart_bootstrap = dart_bootstrap =
rebase_path("$dart_out_dir/dart_bootstrap$executable_suffix") rebase_path("$dart_out_dir/dart_bootstrap$executable_suffix")

View file

@ -2,12 +2,13 @@
# for details. All rights reserved. Use of this source code is governed by a # for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file. # BSD-style license that can be found in the LICENSE file.
import("../../build/dart_host_sdk_toolchain.gni")
import("../application_snapshot.gni") import("../application_snapshot.gni")
application_snapshot("kernel-service") { application_snapshot("kernel-service") {
dfe_script = "kernel-service.dart" dfe_script = "kernel-service.dart"
deps = [ deps = [
"../../runtime/vm:kernel_platform_files($host_toolchain)", "../../runtime/vm:kernel_platform_files($dart_host_toolchain)",
] ]
main_dart = dfe_script main_dart = dfe_script
training_args = [ training_args = [