1*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2019 Google LLC. All rights reserved. 2*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 4*c8dee2aaSAndroid Build Coastguard Worker 5*c8dee2aaSAndroid Build Coastguard Worker# import("//gn/skia.gni") 6*c8dee2aaSAndroid Build Coastguard Worker 7*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() { 8*c8dee2aaSAndroid Build Coastguard Worker using_fuchsia_sdk = true 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker # Fuchsia SDK install dir. 11*c8dee2aaSAndroid Build Coastguard Worker fuchsia_sdk_path = "//fuchsia/sdk/$host_os" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker # Clang install dir. 14*c8dee2aaSAndroid Build Coastguard Worker fuchsia_toolchain_path = "//fuchsia/toolchain/$host_os" 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker # Path to GN-generated GN targets derived from parsing json file at 17*c8dee2aaSAndroid Build Coastguard Worker # |fuchsia_sdk_manifest_path|. The parsing logic can be found in sdk.gni. 18*c8dee2aaSAndroid Build Coastguard Worker fuchsia_sdk_root = "//build/fuchsia" 19*c8dee2aaSAndroid Build Coastguard Worker} 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() { 22*c8dee2aaSAndroid Build Coastguard Worker fuchsia_sdk_manifest_path = "${fuchsia_sdk_path}/meta/manifest.json" 23*c8dee2aaSAndroid Build Coastguard Worker} 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Workertemplate("_fuchsia_sysroot") { 26*c8dee2aaSAndroid Build Coastguard Worker assert(defined(invoker.meta), "The meta.json file path must be specified.") 27*c8dee2aaSAndroid Build Coastguard Worker assert(target_cpu == "x64" || target_cpu == "arm64", 28*c8dee2aaSAndroid Build Coastguard Worker "We currently only support 'x64' and 'arm64' targets for fuchsia.") 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker meta_json = read_file(invoker.meta, "json") 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker assert(meta_json.type == "sysroot") 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker meta_json_versions = meta_json.versions 35*c8dee2aaSAndroid Build Coastguard Worker if (target_cpu == "x64") { 36*c8dee2aaSAndroid Build Coastguard Worker defs = meta_json_versions.x64 37*c8dee2aaSAndroid Build Coastguard Worker } else { 38*c8dee2aaSAndroid Build Coastguard Worker defs = meta_json_versions.arm64 39*c8dee2aaSAndroid Build Coastguard Worker } 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker _libs = [] 42*c8dee2aaSAndroid Build Coastguard Worker _lib_dirs = [] 43*c8dee2aaSAndroid Build Coastguard Worker _include_dirs = [] 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker foreach(link_lib, defs.link_libs) { 46*c8dee2aaSAndroid Build Coastguard Worker if (link_lib != "arch/${target_cpu}/sysroot/lib/Scrt1.o") { 47*c8dee2aaSAndroid Build Coastguard Worker _libs += [ rebase_path("$fuchsia_sdk_path/$link_lib") ] 48*c8dee2aaSAndroid Build Coastguard Worker } 49*c8dee2aaSAndroid Build Coastguard Worker } 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker defs_include_dir = defs.include_dir 52*c8dee2aaSAndroid Build Coastguard Worker _include_dirs += [ rebase_path("$fuchsia_sdk_path/$defs_include_dir") ] 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Worker config_name = "config_$target_name" 55*c8dee2aaSAndroid Build Coastguard Worker config(config_name) { 56*c8dee2aaSAndroid Build Coastguard Worker lib_dirs = _lib_dirs 57*c8dee2aaSAndroid Build Coastguard Worker libs = _libs 58*c8dee2aaSAndroid Build Coastguard Worker include_dirs = _include_dirs 59*c8dee2aaSAndroid Build Coastguard Worker } 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker group(target_name) { 62*c8dee2aaSAndroid Build Coastguard Worker public_configs = [ ":$config_name" ] 63*c8dee2aaSAndroid Build Coastguard Worker } 64*c8dee2aaSAndroid Build Coastguard Worker} 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Workertemplate("_fuchsia_fidl_library") { 67*c8dee2aaSAndroid Build Coastguard Worker assert(defined(invoker.meta), "The meta.json file path must be specified.") 68*c8dee2aaSAndroid Build Coastguard Worker assert(target_cpu == "x64" || target_cpu == "arm64", 69*c8dee2aaSAndroid Build Coastguard Worker "We currently only support 'x64' and 'arm64' targets for fuchsia.") 70*c8dee2aaSAndroid Build Coastguard Worker 71*c8dee2aaSAndroid Build Coastguard Worker meta_json = read_file(invoker.meta, "json") 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker assert(meta_json.type == "fidl_library") 74*c8dee2aaSAndroid Build Coastguard Worker 75*c8dee2aaSAndroid Build Coastguard Worker _deps = [ "../pkg:fidl_cpp" ] 76*c8dee2aaSAndroid Build Coastguard Worker 77*c8dee2aaSAndroid Build Coastguard Worker library_name = meta_json.name 78*c8dee2aaSAndroid Build Coastguard Worker library_name_json = "$library_name.json" 79*c8dee2aaSAndroid Build Coastguard Worker 80*c8dee2aaSAndroid Build Coastguard Worker foreach(dep, meta_json.deps) { 81*c8dee2aaSAndroid Build Coastguard Worker _deps += [ ":$dep" ] 82*c8dee2aaSAndroid Build Coastguard Worker } 83*c8dee2aaSAndroid Build Coastguard Worker 84*c8dee2aaSAndroid Build Coastguard Worker config_name = "config_$target_name" 85*c8dee2aaSAndroid Build Coastguard Worker config(config_name) { 86*c8dee2aaSAndroid Build Coastguard Worker include_dirs = [ target_gen_dir ] 87*c8dee2aaSAndroid Build Coastguard Worker } 88*c8dee2aaSAndroid Build Coastguard Worker 89*c8dee2aaSAndroid Build Coastguard Worker fidl_gen_target_name = "fidlgen_$target_name" 90*c8dee2aaSAndroid Build Coastguard Worker action(fidl_gen_target_name) { 91*c8dee2aaSAndroid Build Coastguard Worker script = "//build/fuchsia/fidl_gen_cpp" 92*c8dee2aaSAndroid Build Coastguard Worker 93*c8dee2aaSAndroid Build Coastguard Worker library_name_slashes = string_replace(library_name, ".", "/") 94*c8dee2aaSAndroid Build Coastguard Worker 95*c8dee2aaSAndroid Build Coastguard Worker inputs = [ invoker.meta ] 96*c8dee2aaSAndroid Build Coastguard Worker 97*c8dee2aaSAndroid Build Coastguard Worker outputs = [ 98*c8dee2aaSAndroid Build Coastguard Worker "$target_gen_dir/$library_name_slashes/cpp/fidl.h", 99*c8dee2aaSAndroid Build Coastguard Worker "$target_gen_dir/$library_name_slashes/cpp/fidl.cc", 100*c8dee2aaSAndroid Build Coastguard Worker "$target_gen_dir/$library_name_slashes/cpp/tables.c", 101*c8dee2aaSAndroid Build Coastguard Worker ] 102*c8dee2aaSAndroid Build Coastguard Worker 103*c8dee2aaSAndroid Build Coastguard Worker args = [ 104*c8dee2aaSAndroid Build Coastguard Worker "--fidlc-bin", 105*c8dee2aaSAndroid Build Coastguard Worker rebase_path("$fuchsia_sdk_path/tools/fidlc"), 106*c8dee2aaSAndroid Build Coastguard Worker "--fidlgen-bin", 107*c8dee2aaSAndroid Build Coastguard Worker rebase_path("$fuchsia_sdk_path/tools/fidlgen"), 108*c8dee2aaSAndroid Build Coastguard Worker "--sdk-base", 109*c8dee2aaSAndroid Build Coastguard Worker rebase_path("$fuchsia_sdk_path"), 110*c8dee2aaSAndroid Build Coastguard Worker "--root", 111*c8dee2aaSAndroid Build Coastguard Worker rebase_path(invoker.meta), 112*c8dee2aaSAndroid Build Coastguard Worker "--json", 113*c8dee2aaSAndroid Build Coastguard Worker rebase_path("$target_gen_dir/$library_name_json"), 114*c8dee2aaSAndroid Build Coastguard Worker "--include-base", 115*c8dee2aaSAndroid Build Coastguard Worker rebase_path("$target_gen_dir"), 116*c8dee2aaSAndroid Build Coastguard Worker "--output-base-cc", 117*c8dee2aaSAndroid Build Coastguard Worker rebase_path("$target_gen_dir/$library_name_slashes/cpp/fidl"), 118*c8dee2aaSAndroid Build Coastguard Worker "--output-c-header", 119*c8dee2aaSAndroid Build Coastguard Worker rebase_path("$target_gen_dir/$library_name_slashes/c/fidl.h"), 120*c8dee2aaSAndroid Build Coastguard Worker ] 121*c8dee2aaSAndroid Build Coastguard Worker } 122*c8dee2aaSAndroid Build Coastguard Worker 123*c8dee2aaSAndroid Build Coastguard Worker source_set(target_name) { 124*c8dee2aaSAndroid Build Coastguard Worker public_configs = [ ":$config_name" ] 125*c8dee2aaSAndroid Build Coastguard Worker 126*c8dee2aaSAndroid Build Coastguard Worker sources = get_target_outputs(":$fidl_gen_target_name") 127*c8dee2aaSAndroid Build Coastguard Worker 128*c8dee2aaSAndroid Build Coastguard Worker deps = [ ":$fidl_gen_target_name" ] 129*c8dee2aaSAndroid Build Coastguard Worker 130*c8dee2aaSAndroid Build Coastguard Worker public_deps = _deps 131*c8dee2aaSAndroid Build Coastguard Worker } 132*c8dee2aaSAndroid Build Coastguard Worker} 133*c8dee2aaSAndroid Build Coastguard Worker 134*c8dee2aaSAndroid Build Coastguard Worker# 135*c8dee2aaSAndroid Build Coastguard Worker# Produce a cc source library from invoker's json file. 136*c8dee2aaSAndroid Build Coastguard Worker# Primary output is the source_set. 137*c8dee2aaSAndroid Build Coastguard Worker# 138*c8dee2aaSAndroid Build Coastguard Workertemplate("_fuchsia_cc_source_library") { 139*c8dee2aaSAndroid Build Coastguard Worker assert(defined(invoker.meta), "The meta.json file path must be specified.") 140*c8dee2aaSAndroid Build Coastguard Worker 141*c8dee2aaSAndroid Build Coastguard Worker meta_json = read_file(invoker.meta, "json") 142*c8dee2aaSAndroid Build Coastguard Worker 143*c8dee2aaSAndroid Build Coastguard Worker assert(meta_json.type == "cc_source_library") 144*c8dee2aaSAndroid Build Coastguard Worker 145*c8dee2aaSAndroid Build Coastguard Worker _output_name = meta_json.name 146*c8dee2aaSAndroid Build Coastguard Worker _include_dirs = [] 147*c8dee2aaSAndroid Build Coastguard Worker _public_headers = [] 148*c8dee2aaSAndroid Build Coastguard Worker _sources = [] 149*c8dee2aaSAndroid Build Coastguard Worker _deps = [] 150*c8dee2aaSAndroid Build Coastguard Worker 151*c8dee2aaSAndroid Build Coastguard Worker meta_json_include_dir = meta_json.include_dir 152*c8dee2aaSAndroid Build Coastguard Worker _include_dirs += [ rebase_path("$fuchsia_sdk_path/$meta_json_include_dir") ] 153*c8dee2aaSAndroid Build Coastguard Worker 154*c8dee2aaSAndroid Build Coastguard Worker foreach(header, meta_json.headers) { 155*c8dee2aaSAndroid Build Coastguard Worker rebased_header = [] 156*c8dee2aaSAndroid Build Coastguard Worker rebased_header = [ rebase_path("$fuchsia_sdk_path/$header") ] 157*c8dee2aaSAndroid Build Coastguard Worker _public_headers += rebased_header 158*c8dee2aaSAndroid Build Coastguard Worker _sources += rebased_header 159*c8dee2aaSAndroid Build Coastguard Worker } 160*c8dee2aaSAndroid Build Coastguard Worker 161*c8dee2aaSAndroid Build Coastguard Worker foreach(source, meta_json.sources) { 162*c8dee2aaSAndroid Build Coastguard Worker _sources += [ "$fuchsia_sdk_path/$source" ] 163*c8dee2aaSAndroid Build Coastguard Worker } 164*c8dee2aaSAndroid Build Coastguard Worker 165*c8dee2aaSAndroid Build Coastguard Worker config_name = "config_$target_name" 166*c8dee2aaSAndroid Build Coastguard Worker config(config_name) { 167*c8dee2aaSAndroid Build Coastguard Worker include_dirs = _include_dirs 168*c8dee2aaSAndroid Build Coastguard Worker } 169*c8dee2aaSAndroid Build Coastguard Worker 170*c8dee2aaSAndroid Build Coastguard Worker foreach(dep, meta_json.deps) { 171*c8dee2aaSAndroid Build Coastguard Worker _deps += [ "../pkg:$dep" ] 172*c8dee2aaSAndroid Build Coastguard Worker } 173*c8dee2aaSAndroid Build Coastguard Worker 174*c8dee2aaSAndroid Build Coastguard Worker foreach(dep, meta_json.fidl_deps) { 175*c8dee2aaSAndroid Build Coastguard Worker _deps += [ "../fidl:$dep" ] 176*c8dee2aaSAndroid Build Coastguard Worker } 177*c8dee2aaSAndroid Build Coastguard Worker 178*c8dee2aaSAndroid Build Coastguard Worker source_set(target_name) { 179*c8dee2aaSAndroid Build Coastguard Worker output_name = _output_name 180*c8dee2aaSAndroid Build Coastguard Worker public = _public_headers 181*c8dee2aaSAndroid Build Coastguard Worker sources = _sources 182*c8dee2aaSAndroid Build Coastguard Worker public_configs = [ ":$config_name" ] 183*c8dee2aaSAndroid Build Coastguard Worker public_deps = _deps 184*c8dee2aaSAndroid Build Coastguard Worker } 185*c8dee2aaSAndroid Build Coastguard Worker} 186*c8dee2aaSAndroid Build Coastguard Worker 187*c8dee2aaSAndroid Build Coastguard Workertemplate("_fuchsia_cc_prebuilt_library") { 188*c8dee2aaSAndroid Build Coastguard Worker assert(defined(invoker.meta), "The meta.json file path must be specified.") 189*c8dee2aaSAndroid Build Coastguard Worker meta_json = read_file(invoker.meta, "json") 190*c8dee2aaSAndroid Build Coastguard Worker 191*c8dee2aaSAndroid Build Coastguard Worker _include_dirs = [] 192*c8dee2aaSAndroid Build Coastguard Worker _deps = [] 193*c8dee2aaSAndroid Build Coastguard Worker _libs = [] 194*c8dee2aaSAndroid Build Coastguard Worker 195*c8dee2aaSAndroid Build Coastguard Worker meta_json_include_dir = meta_json.include_dir 196*c8dee2aaSAndroid Build Coastguard Worker _include_dirs += [ "$fuchsia_sdk_path/$meta_json_include_dir" ] 197*c8dee2aaSAndroid Build Coastguard Worker 198*c8dee2aaSAndroid Build Coastguard Worker foreach(dep, meta_json.deps) { 199*c8dee2aaSAndroid Build Coastguard Worker _deps += [ ":$dep" ] 200*c8dee2aaSAndroid Build Coastguard Worker } 201*c8dee2aaSAndroid Build Coastguard Worker 202*c8dee2aaSAndroid Build Coastguard Worker meta_json_binaries = meta_json.binaries 203*c8dee2aaSAndroid Build Coastguard Worker if (target_cpu == "x64") { 204*c8dee2aaSAndroid Build Coastguard Worker meta_json_binaries_arch = meta_json_binaries.x64 205*c8dee2aaSAndroid Build Coastguard Worker } else { 206*c8dee2aaSAndroid Build Coastguard Worker meta_json_binaries_arch = meta_json_binaries.arm64 207*c8dee2aaSAndroid Build Coastguard Worker } 208*c8dee2aaSAndroid Build Coastguard Worker prebuilt_lib = meta_json_binaries_arch.link 209*c8dee2aaSAndroid Build Coastguard Worker _libs = [ "$fuchsia_sdk_path/$prebuilt_lib" ] 210*c8dee2aaSAndroid Build Coastguard Worker 211*c8dee2aaSAndroid Build Coastguard Worker config_name = "config_$target_name" 212*c8dee2aaSAndroid Build Coastguard Worker config(config_name) { 213*c8dee2aaSAndroid Build Coastguard Worker include_dirs = _include_dirs 214*c8dee2aaSAndroid Build Coastguard Worker libs = _libs 215*c8dee2aaSAndroid Build Coastguard Worker } 216*c8dee2aaSAndroid Build Coastguard Worker 217*c8dee2aaSAndroid Build Coastguard Worker group(target_name) { 218*c8dee2aaSAndroid Build Coastguard Worker public_configs = [ ":$config_name" ] 219*c8dee2aaSAndroid Build Coastguard Worker public_deps = _deps 220*c8dee2aaSAndroid Build Coastguard Worker } 221*c8dee2aaSAndroid Build Coastguard Worker} 222*c8dee2aaSAndroid Build Coastguard Worker 223*c8dee2aaSAndroid Build Coastguard Worker# 224*c8dee2aaSAndroid Build Coastguard Worker# Read SDK manifest json file and produce gn build targets for all 225*c8dee2aaSAndroid Build Coastguard Worker# "enabled_parts" as specified by the template invoker. 226*c8dee2aaSAndroid Build Coastguard Worker# 227*c8dee2aaSAndroid Build Coastguard Worker# Fuchsia SDK manifest is primarily a "parts" array. 228*c8dee2aaSAndroid Build Coastguard Worker# 229*c8dee2aaSAndroid Build Coastguard Workertemplate("fuchsia_sdk") { 230*c8dee2aaSAndroid Build Coastguard Worker assert(defined(invoker.meta), "The meta.json file path must be specified.") 231*c8dee2aaSAndroid Build Coastguard Worker assert(defined(invoker.enabled_parts), 232*c8dee2aaSAndroid Build Coastguard Worker "A list containing the parts of the SDK to generate targets for.") 233*c8dee2aaSAndroid Build Coastguard Worker 234*c8dee2aaSAndroid Build Coastguard Worker meta_json = read_file(invoker.meta, "json") 235*c8dee2aaSAndroid Build Coastguard Worker 236*c8dee2aaSAndroid Build Coastguard Worker foreach(part, meta_json.parts) { 237*c8dee2aaSAndroid Build Coastguard Worker part_meta_json = { 238*c8dee2aaSAndroid Build Coastguard Worker } 239*c8dee2aaSAndroid Build Coastguard Worker 240*c8dee2aaSAndroid Build Coastguard Worker part_meta = part.meta 241*c8dee2aaSAndroid Build Coastguard Worker part_meta_rebased = "$fuchsia_sdk_path/$part_meta" 242*c8dee2aaSAndroid Build Coastguard Worker 243*c8dee2aaSAndroid Build Coastguard Worker part_meta_json = read_file(part_meta_rebased, "json") 244*c8dee2aaSAndroid Build Coastguard Worker subtarget_name = part_meta_json.name 245*c8dee2aaSAndroid Build Coastguard Worker 246*c8dee2aaSAndroid Build Coastguard Worker foreach(enabled_part, invoker.enabled_parts) { 247*c8dee2aaSAndroid Build Coastguard Worker if (part.type == "cc_source_library") { 248*c8dee2aaSAndroid Build Coastguard Worker if (part.type == enabled_part) { 249*c8dee2aaSAndroid Build Coastguard Worker _fuchsia_cc_source_library(subtarget_name) { 250*c8dee2aaSAndroid Build Coastguard Worker meta = part_meta_rebased 251*c8dee2aaSAndroid Build Coastguard Worker } 252*c8dee2aaSAndroid Build Coastguard Worker } 253*c8dee2aaSAndroid Build Coastguard Worker } else if (part.type == "sysroot") { 254*c8dee2aaSAndroid Build Coastguard Worker if (part.type == enabled_part) { 255*c8dee2aaSAndroid Build Coastguard Worker _fuchsia_sysroot(subtarget_name) { 256*c8dee2aaSAndroid Build Coastguard Worker meta = part_meta_rebased 257*c8dee2aaSAndroid Build Coastguard Worker } 258*c8dee2aaSAndroid Build Coastguard Worker } 259*c8dee2aaSAndroid Build Coastguard Worker } else if (part.type == "fidl_library") { 260*c8dee2aaSAndroid Build Coastguard Worker if (part.type == enabled_part) { 261*c8dee2aaSAndroid Build Coastguard Worker _fuchsia_fidl_library(subtarget_name) { 262*c8dee2aaSAndroid Build Coastguard Worker meta = part_meta_rebased 263*c8dee2aaSAndroid Build Coastguard Worker } 264*c8dee2aaSAndroid Build Coastguard Worker } 265*c8dee2aaSAndroid Build Coastguard Worker } else if (part.type == "cc_prebuilt_library") { 266*c8dee2aaSAndroid Build Coastguard Worker if (part.type == enabled_part) { 267*c8dee2aaSAndroid Build Coastguard Worker _fuchsia_cc_prebuilt_library(subtarget_name) { 268*c8dee2aaSAndroid Build Coastguard Worker meta = part_meta_rebased 269*c8dee2aaSAndroid Build Coastguard Worker } 270*c8dee2aaSAndroid Build Coastguard Worker } 271*c8dee2aaSAndroid Build Coastguard Worker } 272*c8dee2aaSAndroid Build Coastguard Worker } 273*c8dee2aaSAndroid Build Coastguard Worker } 274*c8dee2aaSAndroid Build Coastguard Worker 275*c8dee2aaSAndroid Build Coastguard Worker group(target_name) { 276*c8dee2aaSAndroid Build Coastguard Worker } 277*c8dee2aaSAndroid Build Coastguard Worker} 278*c8dee2aaSAndroid Build Coastguard Worker 279*c8dee2aaSAndroid Build Coastguard Worker# 280*c8dee2aaSAndroid Build Coastguard Worker# Create package in 'gen' directory. 281*c8dee2aaSAndroid Build Coastguard Worker# 282*c8dee2aaSAndroid Build Coastguard Workertemplate("fuchsia_package") { 283*c8dee2aaSAndroid Build Coastguard Worker assert(defined(invoker.name), "The name of the package must be specified.") 284*c8dee2aaSAndroid Build Coastguard Worker assert(defined(invoker.version), "The package version must be specified.") 285*c8dee2aaSAndroid Build Coastguard Worker 286*c8dee2aaSAndroid Build Coastguard Worker pkg_dir = target_gen_dir 287*c8dee2aaSAndroid Build Coastguard Worker pkg_name = invoker.name 288*c8dee2aaSAndroid Build Coastguard Worker pkg_version = invoker.version 289*c8dee2aaSAndroid Build Coastguard Worker pkg_manifest = invoker.pkg_manifest 290*c8dee2aaSAndroid Build Coastguard Worker 291*c8dee2aaSAndroid Build Coastguard Worker pkg_id_path = "${pkg_dir}/meta/package" 292*c8dee2aaSAndroid Build Coastguard Worker gen_far_target_name = "gen_far_${target_name}" 293*c8dee2aaSAndroid Build Coastguard Worker pkg_archive = "${pkg_dir}/${pkg_name}-${pkg_version}.far" 294*c8dee2aaSAndroid Build Coastguard Worker 295*c8dee2aaSAndroid Build Coastguard Worker action(gen_far_target_name) { 296*c8dee2aaSAndroid Build Coastguard Worker script = "//build/fuchsia/gen_package" 297*c8dee2aaSAndroid Build Coastguard Worker 298*c8dee2aaSAndroid Build Coastguard Worker pm_binary = rebase_path("$fuchsia_sdk_path/tools/pm") 299*c8dee2aaSAndroid Build Coastguard Worker 300*c8dee2aaSAndroid Build Coastguard Worker inputs = [ pm_binary ] 301*c8dee2aaSAndroid Build Coastguard Worker 302*c8dee2aaSAndroid Build Coastguard Worker outputs = [ 303*c8dee2aaSAndroid Build Coastguard Worker pkg_id_path, 304*c8dee2aaSAndroid Build Coastguard Worker pkg_archive, 305*c8dee2aaSAndroid Build Coastguard Worker ] 306*c8dee2aaSAndroid Build Coastguard Worker 307*c8dee2aaSAndroid Build Coastguard Worker args = [ 308*c8dee2aaSAndroid Build Coastguard Worker "--pm-bin", 309*c8dee2aaSAndroid Build Coastguard Worker pm_binary, 310*c8dee2aaSAndroid Build Coastguard Worker "--pkg-dir", 311*c8dee2aaSAndroid Build Coastguard Worker rebase_path(pkg_dir), 312*c8dee2aaSAndroid Build Coastguard Worker "--pkg-name", 313*c8dee2aaSAndroid Build Coastguard Worker pkg_name, 314*c8dee2aaSAndroid Build Coastguard Worker "--pkg-version", 315*c8dee2aaSAndroid Build Coastguard Worker "$pkg_version", 316*c8dee2aaSAndroid Build Coastguard Worker "--pkg-manifest", 317*c8dee2aaSAndroid Build Coastguard Worker rebase_path(pkg_manifest), 318*c8dee2aaSAndroid Build Coastguard Worker ] 319*c8dee2aaSAndroid Build Coastguard Worker 320*c8dee2aaSAndroid Build Coastguard Worker if (defined(invoker.deps)) { 321*c8dee2aaSAndroid Build Coastguard Worker deps = invoker.deps 322*c8dee2aaSAndroid Build Coastguard Worker } 323*c8dee2aaSAndroid Build Coastguard Worker if (defined(invoker.testonly)) { 324*c8dee2aaSAndroid Build Coastguard Worker testonly = invoker.testonly 325*c8dee2aaSAndroid Build Coastguard Worker } 326*c8dee2aaSAndroid Build Coastguard Worker } 327*c8dee2aaSAndroid Build Coastguard Worker 328*c8dee2aaSAndroid Build Coastguard Worker copy(target_name) { 329*c8dee2aaSAndroid Build Coastguard Worker if (defined(invoker.testonly)) { 330*c8dee2aaSAndroid Build Coastguard Worker testonly = invoker.testonly 331*c8dee2aaSAndroid Build Coastguard Worker } 332*c8dee2aaSAndroid Build Coastguard Worker 333*c8dee2aaSAndroid Build Coastguard Worker sources = [ pkg_archive ] 334*c8dee2aaSAndroid Build Coastguard Worker 335*c8dee2aaSAndroid Build Coastguard Worker output_name = "${root_out_dir}/far/${pkg_name}.far" 336*c8dee2aaSAndroid Build Coastguard Worker outputs = [ output_name ] 337*c8dee2aaSAndroid Build Coastguard Worker 338*c8dee2aaSAndroid Build Coastguard Worker deps = [ ":$gen_far_target_name" ] 339*c8dee2aaSAndroid Build Coastguard Worker } 340*c8dee2aaSAndroid Build Coastguard Worker} 341*c8dee2aaSAndroid Build Coastguard Worker 342*c8dee2aaSAndroid Build Coastguard Worker# 343*c8dee2aaSAndroid Build Coastguard Worker# Places repo in output ('obj') directory. 344*c8dee2aaSAndroid Build Coastguard Worker# 345*c8dee2aaSAndroid Build Coastguard Workertemplate("fuchsia_repo") { 346*c8dee2aaSAndroid Build Coastguard Worker assert(defined(invoker.archives), 347*c8dee2aaSAndroid Build Coastguard Worker "The list of archives to publish must be specified.") 348*c8dee2aaSAndroid Build Coastguard Worker assert(defined(invoker.repo), "The location of the repo should be specified.") 349*c8dee2aaSAndroid Build Coastguard Worker 350*c8dee2aaSAndroid Build Coastguard Worker action(target_name) { 351*c8dee2aaSAndroid Build Coastguard Worker if (defined(invoker.testonly)) { 352*c8dee2aaSAndroid Build Coastguard Worker testonly = invoker.testonly 353*c8dee2aaSAndroid Build Coastguard Worker } 354*c8dee2aaSAndroid Build Coastguard Worker script = "//build/fuchsia/gen_repo" 355*c8dee2aaSAndroid Build Coastguard Worker 356*c8dee2aaSAndroid Build Coastguard Worker pm_binary = rebase_path("$fuchsia_sdk_path/tools/pm") 357*c8dee2aaSAndroid Build Coastguard Worker repo_directory = invoker.repo 358*c8dee2aaSAndroid Build Coastguard Worker 359*c8dee2aaSAndroid Build Coastguard Worker inputs = [ pm_binary ] 360*c8dee2aaSAndroid Build Coastguard Worker 361*c8dee2aaSAndroid Build Coastguard Worker archive_flags = [] 362*c8dee2aaSAndroid Build Coastguard Worker 363*c8dee2aaSAndroid Build Coastguard Worker foreach(archive, invoker.archives) { 364*c8dee2aaSAndroid Build Coastguard Worker assert(get_path_info(archive, "extension") == "far", 365*c8dee2aaSAndroid Build Coastguard Worker "Archive '$archive' does not have the .far extension.") 366*c8dee2aaSAndroid Build Coastguard Worker inputs += [ archive ] 367*c8dee2aaSAndroid Build Coastguard Worker archive_flags += [ 368*c8dee2aaSAndroid Build Coastguard Worker "--archive", 369*c8dee2aaSAndroid Build Coastguard Worker rebase_path(archive), 370*c8dee2aaSAndroid Build Coastguard Worker ] 371*c8dee2aaSAndroid Build Coastguard Worker } 372*c8dee2aaSAndroid Build Coastguard Worker 373*c8dee2aaSAndroid Build Coastguard Worker outputs = [ repo_directory ] 374*c8dee2aaSAndroid Build Coastguard Worker 375*c8dee2aaSAndroid Build Coastguard Worker args = [ 376*c8dee2aaSAndroid Build Coastguard Worker "--pm-bin", 377*c8dee2aaSAndroid Build Coastguard Worker pm_binary, 378*c8dee2aaSAndroid Build Coastguard Worker "--repo-dir", 379*c8dee2aaSAndroid Build Coastguard Worker rebase_path(repo_directory), 380*c8dee2aaSAndroid Build Coastguard Worker ] + archive_flags 381*c8dee2aaSAndroid Build Coastguard Worker 382*c8dee2aaSAndroid Build Coastguard Worker if (defined(invoker.deps)) { 383*c8dee2aaSAndroid Build Coastguard Worker deps = invoker.deps 384*c8dee2aaSAndroid Build Coastguard Worker } 385*c8dee2aaSAndroid Build Coastguard Worker } 386*c8dee2aaSAndroid Build Coastguard Worker} 387