| # Copyright (c) 2014, 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. |
| |
| import("../../build/executable_suffix.gni") |
| import("../../build/prebuilt_dart_sdk.gni") |
| import("../../utils/generate_patch_sdk.gni") |
| import("gypi_contents.gni") |
| import("../runtime_args.gni") |
| |
| config("libdart_vm_config") { |
| if (is_fuchsia) { |
| libs = [ "magenta" ] |
| } else if (is_win) { |
| libs = [ |
| "advapi32.lib", |
| "shell32.lib", |
| "dbghelp.lib", |
| ] |
| } else { |
| libs = [ "dl" ] |
| if (!is_android) { |
| libs += [ "pthread" ] |
| } |
| if (is_linux) { |
| libs += [ "rt" ] |
| } |
| } |
| } |
| |
| template("build_libdart_platform") { |
| extra_configs = [] |
| if (defined(invoker.extra_configs)) { |
| extra_configs += invoker.extra_configs |
| } |
| static_library(target_name) { |
| configs += [ "..:dart_config" ] + extra_configs |
| if (is_fuchsia) { |
| configs -= [ "//build/config:symbol_visibility_hidden" ] |
| deps = [ |
| "//apps/tracing/lib/trace", |
| ] |
| } |
| public_configs = [ ":libdart_vm_config" ] |
| |
| sources = rebase_path(processed_gypis.platform_sources, ".", "../platform") |
| |
| include_dirs = [ ".." ] |
| } |
| } |
| |
| build_libdart_platform("libdart_platform") { |
| extra_configs = [ "..:dart_maybe_product_config" ] |
| } |
| |
| build_libdart_platform("libdart_platform_product") { |
| extra_configs = [ "..:dart_product_config" ] |
| } |
| |
| vm_sources_list = processed_gypis.vm_sources |
| |
| template("build_libdart_vm") { |
| extra_configs = [] |
| if (defined(invoker.extra_configs)) { |
| extra_configs += invoker.extra_configs |
| } |
| source_set(target_name) { |
| configs += [ "..:dart_config" ] + extra_configs |
| if (is_fuchsia) { |
| configs -= [ "//build/config:symbol_visibility_hidden" ] |
| deps = [ |
| "//apps/tracing/lib/trace", |
| ] |
| } |
| public_configs = [ ":libdart_vm_config" ] |
| set_sources_assignment_filter([ |
| "*_test.cc", |
| "*_test.h", |
| ]) |
| sources = vm_sources_list |
| include_dirs = [ ".." ] |
| } |
| } |
| |
| build_libdart_vm("libdart_vm_jit") { |
| extra_configs = [ "..:dart_maybe_product_config" ] |
| } |
| |
| build_libdart_vm("libdart_vm_jit_product") { |
| extra_configs = [ "..:dart_product_config" ] |
| } |
| |
| build_libdart_vm("libdart_vm_precompiled_runtime") { |
| extra_configs = [ |
| "..:dart_maybe_product_config", |
| "..:dart_precompiled_runtime_config", |
| ] |
| } |
| |
| build_libdart_vm("libdart_vm_precompiled_runtime_product") { |
| extra_configs = [ |
| "..:dart_product_config", |
| "..:dart_precompiled_runtime_config", |
| ] |
| } |
| |
| build_libdart_vm("libdart_vm_nosnapshot") { |
| extra_configs = [ |
| "..:dart_maybe_product_config", |
| "..:dart_no_snapshot_config", |
| ] |
| } |
| |
| build_libdart_vm("libdart_vm_nosnapshot_with_precompiler") { |
| extra_configs = [ |
| "..:dart_maybe_product_config", |
| "..:dart_precompiler_config", |
| "..:dart_no_snapshot_config", |
| ] |
| } |
| |
| build_libdart_vm("libdart_vm_nosnapshot_with_precompiler_product") { |
| extra_configs = [ |
| "..:dart_product_config", |
| "..:dart_precompiler_config", |
| "..:dart_no_snapshot_config", |
| ] |
| } |
| |
| build_libdart_vm("libdart_vm_with_precompiler") { |
| extra_configs = [ |
| "..:dart_maybe_product_config", |
| "..:dart_precompiler_config", |
| ] |
| } |
| |
| build_libdart_vm("libdart_vm_with_precompiler_product") { |
| extra_configs = [ |
| "..:dart_product_config", |
| "..:dart_precompiler_config", |
| ] |
| } |
| |
| template("process_library_source") { |
| assert(defined(invoker.libsources), "Need libsources in $target_name") |
| assert(defined(invoker.output), "Need output in $target_name") |
| action(target_name) { |
| visibility = [ ":*" ] # Only targets in this file can see this. |
| libsources = invoker.libsources |
| |
| script = invoker.script |
| inputs = invoker.inputs + libsources |
| outputs = [ |
| invoker.output, |
| ] |
| args = invoker.args + rebase_path(libsources, root_build_dir) |
| } |
| } |
| |
| template("generate_library_source") { |
| assert(defined(invoker.libname), "Need libname in $target_name") |
| assert(defined(invoker.libsources), "Need libsources in $target_name") |
| assert(defined(invoker.kind), "Need kind in $target_name") |
| assert(defined(invoker.output), "Need output in $target_name") |
| |
| process_library_source(target_name) { |
| libname = invoker.libname |
| libsources = invoker.libsources |
| kind = invoker.kind |
| script = "../tools/gen_library_src_paths.py" |
| inputs = [ |
| "../lib/libgen_in.cc", |
| ] |
| output = invoker.output |
| args = [ |
| "--output", |
| rebase_path(invoker.output, root_build_dir), |
| "--input_cc", |
| rebase_path("../lib/libgen_in.cc", root_build_dir), |
| "--include", |
| "vm/bootstrap.h", |
| "--var_name", |
| "dart::Bootstrap::${libname}_${kind}_paths_", |
| "--library_name", |
| "dart:${libname}", |
| ] |
| } |
| } |
| |
| template("build_libdart_lib") { |
| extra_configs = [] |
| if (defined(invoker.extra_configs)) { |
| extra_configs += invoker.extra_configs |
| } |
| extra_deps = [] |
| if (defined(invoker.extra_deps)) { |
| extra_deps += invoker.extra_deps |
| } |
| extra_sources = [] |
| if (defined(invoker.extra_sources)) { |
| extra_sources += invoker.extra_sources |
| } |
| source_set(target_name) { |
| configs += [ "..:dart_config" ] + extra_configs |
| if (is_fuchsia) { |
| configs -= [ "//build/config:symbol_visibility_hidden" ] |
| } |
| deps = extra_deps |
| sources = extra_sources |
| include_dirs = [ ".." ] |
| } |
| } |
| |
| # This templates expects invoker.sources to be a list of lists. |
| # The lists contain the following information about each library: |
| # library name (string) |
| # library sources (list of strings) |
| # library source base path (string) |
| # filename (string) |
| # do_patch (boolean) |
| # |
| # If do_patch is true, the lists additionally contains |
| # patch sources (list of strings) |
| # patch source base path (string) |
| # |
| # The template iterates over the list, and generates generate_library_source |
| # actions for each. After that, it generates targets to compile the generated |
| # sources to make libdart_lib_*. |
| template("generate_core_libraries") { |
| assert(defined(invoker.sources), "Need sources in $target_name") |
| assert(defined(invoker.allsources), "Need allsources in $target_name") |
| liboutputs = [] |
| libdeps = [] |
| foreach(lib, invoker.sources) { |
| libname = lib[0] |
| filename = lib[3] |
| do_patch = lib[4] |
| generate_library_source("generate_${filename}_cc_file") { |
| libname = libname |
| libsources = rebase_path(lib[1], ".", lib[2]) |
| kind = "source" |
| output = "$target_gen_dir/${filename}_gen.cc" |
| } |
| if (do_patch) { |
| generate_library_source("generate_${filename}_patch_cc_file") { |
| libname = libname |
| libsources = rebase_path(lib[5], ".", lib[6]) |
| kind = "patch" |
| output = "$target_gen_dir/${filename}_patch_gen.cc" |
| } |
| } |
| |
| liboutputs += [ "$target_gen_dir/${filename}_gen.cc" ] |
| libdeps += [ ":generate_${filename}_cc_file" ] |
| if (do_patch) { |
| liboutputs += [ "$target_gen_dir/${filename}_patch_gen.cc" ] |
| libdeps += [ ":generate_${filename}_patch_cc_file" ] |
| } |
| } |
| |
| all_libsources = rebase_path(invoker.allsources, ".", "../lib") |
| |
| build_libdart_lib("libdart_lib_nosnapshot_with_precompiler") { |
| extra_configs = [ |
| "..:dart_maybe_product_config", |
| "..:dart_precompiler_config", |
| ] |
| extra_deps = libdeps |
| extra_sources = all_libsources + [ "bootstrap.cc" ] + liboutputs |
| } |
| |
| build_libdart_lib("libdart_lib_nosnapshot_with_precompiler_product") { |
| extra_configs = [ |
| "..:dart_product_config", |
| "..:dart_precompiler_config", |
| ] |
| extra_deps = libdeps |
| extra_sources = all_libsources + [ "bootstrap.cc" ] + liboutputs |
| } |
| |
| build_libdart_lib("libdart_lib_with_precompiler") { |
| extra_configs = [ |
| "..:dart_maybe_product_config", |
| "..:dart_precompiler_config", |
| ] |
| extra_deps = libdeps |
| extra_sources = all_libsources + [ "bootstrap_nocore.cc" ] |
| } |
| |
| build_libdart_lib("libdart_lib_with_precompiler_product") { |
| extra_configs = [ |
| "..:dart_product_config", |
| "..:dart_precompiler_config", |
| ] |
| extra_deps = libdeps |
| extra_sources = all_libsources + [ "bootstrap_nocore.cc" ] |
| } |
| |
| build_libdart_lib("libdart_lib_jit") { |
| extra_configs = [ "..:dart_maybe_product_config" ] |
| extra_sources = all_libsources + [ "bootstrap_nocore.cc" ] |
| } |
| |
| build_libdart_lib("libdart_lib_jit_product") { |
| extra_configs = [ "..:dart_product_config" ] |
| extra_sources = all_libsources + [ "bootstrap_nocore.cc" ] |
| } |
| |
| build_libdart_lib("libdart_lib_precompiled_runtime") { |
| extra_configs = [ |
| "..:dart_maybe_product_config", |
| "..:dart_precompiled_runtime_config", |
| ] |
| extra_sources = all_libsources + [ "bootstrap_nocore.cc" ] |
| } |
| |
| build_libdart_lib("libdart_lib_precompiled_runtime_product") { |
| extra_configs = [ |
| "..:dart_product_config", |
| "..:dart_precompiled_runtime_config", |
| ] |
| extra_sources = all_libsources + [ "bootstrap_nocore.cc" ] |
| } |
| } |
| |
| generate_core_libraries("core_libraries") { |
| sources = [ |
| [ |
| "async", |
| processed_gypis.async_sdk_sources, |
| "../../sdk/lib/async", |
| "async", |
| true, |
| processed_gypis.async_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "core", |
| processed_gypis.core_sdk_sources, |
| "../../sdk/lib/core", |
| "core", |
| true, |
| processed_gypis.core_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "collection", |
| processed_gypis.collection_sdk_sources, |
| "../../sdk/lib/collection", |
| "collection", |
| true, |
| processed_gypis.collection_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "convert", |
| processed_gypis.convert_sdk_sources, |
| "../../sdk/lib/convert", |
| "convert", |
| true, |
| processed_gypis.convert_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "developer", |
| processed_gypis.developer_sdk_sources, |
| "../../sdk/lib/developer", |
| "developer", |
| true, |
| processed_gypis.developer_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "_internal", |
| processed_gypis.internal_sdk_sources, |
| "../../sdk/lib/internal", |
| "internal", |
| true, |
| processed_gypis.internal_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "isolate", |
| processed_gypis.isolate_sdk_sources, |
| "../../sdk/lib/isolate", |
| "isolate", |
| true, |
| processed_gypis.isolate_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "math", |
| processed_gypis.math_sdk_sources, |
| "../../sdk/lib/math", |
| "math", |
| true, |
| processed_gypis.math_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "mirrors", |
| processed_gypis.mirrors_sdk_sources, |
| "../../sdk/lib/mirrors", |
| "mirrors", |
| true, |
| processed_gypis.mirrors_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "profiler", |
| processed_gypis.profiler_sdk_sources, |
| "../../sdk/lib/profiler", |
| "profiler", |
| false, |
| ], |
| [ |
| "typed_data", |
| processed_gypis.typed_data_sdk_sources, |
| "../../sdk/lib/typed_data", |
| "typed_data", |
| true, |
| processed_gypis.typed_data_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "_vmservice", |
| processed_gypis.vmservice_sdk_sources, |
| "../../sdk/lib/vmservice", |
| "vmservice", |
| true, |
| processed_gypis.vmservice_runtime_sources, |
| "../lib", |
| ], |
| ] |
| allsources = processed_gypis.allsources |
| } |
| |
| template("concatenate_patch") { |
| assert(defined(invoker.libsources), "Need a sources in $target_name") |
| assert(defined(invoker.output), "Need an output in $target_name") |
| |
| process_library_source(target_name) { |
| libsources = invoker.libsources |
| inputs = [] |
| output = invoker.output |
| script = "../tools/concatenate_patches.py" |
| args = [ |
| "--output", |
| rebase_path(output, root_build_dir), |
| ] |
| } |
| } |
| |
| template("generate_vm_patched_sdk") { |
| assert(defined(invoker.libraries), "Need libraries in $target_name") |
| |
| concatenation_target_names = [] |
| |
| # Concatenate vm library patches. |
| foreach(library, invoker.libraries) { |
| name = library[0] |
| |
| target_output = "$target_gen_dir/patches/${name}_patch.dart" |
| concatenate_patch("concatenate_${name}_patch") { |
| libsources = rebase_path(library[1], ".", library[2]) |
| output = target_output |
| } |
| concatenation_target_names += [ ":concatenate_${name}_patch" ] |
| } |
| |
| # Build the patched sdk out of the concatenated patches and the special |
| # libraries. |
| generate_patched_sdk(target_name) { |
| mode = "vm" |
| deps = concatenation_target_names |
| input_patches_dir = "$target_gen_dir/patches" |
| patched_sdk_dir = "patched_sdk" |
| } |
| } |
| |
| generate_vm_patched_sdk("patched_sdk") { |
| libraries = [ |
| [ |
| "async", |
| processed_gypis.async_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "collection", |
| processed_gypis.collection_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "convert", |
| processed_gypis.convert_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "core", |
| processed_gypis.core_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "developer", |
| processed_gypis.developer_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "internal", |
| processed_gypis.internal_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "isolate", |
| processed_gypis.isolate_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "math", |
| processed_gypis.math_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "mirrors", |
| processed_gypis.mirrors_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "profiler", |
| processed_gypis.profiler_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "typed_data", |
| processed_gypis.typed_data_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "vmservice", |
| processed_gypis.vmservice_runtime_sources, |
| "../lib", |
| ], |
| [ |
| "io", |
| processed_gypis.bin_io_sources, |
| "../bin", |
| ], |
| ] |
| } |