blob: 45ee0c70344b9f20e89fd456fb83eab835474930 [file] [log] [blame]
# Copyright 2022 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import("//build/config/win/visual_studio_version.gni")
import("//starboard/build/toolchain/win/variables.gni")
template("install_target") {
not_needed(invoker, [ "type" ])
installable_target_name = invoker.installable_target_name
should_run_mspdbcmf =
installable_target_name == "cobalt" && (is_qa || is_gold)
if (should_run_mspdbcmf) {
# This takes a long time to run and is only necessary for cobalt.
create_pdb_file_name = "${installable_target_name}_create_pdb_file"
action(create_pdb_file_name) {
forward_variables_from(invoker, [ "testonly" ])
script = "//starboard/build/run_bash.py"
sources = [ "$root_out_dir/${installable_target_name}.exe" ]
outputs = [ "$root_out_dir/${installable_target_name}.exe.pdb" ]
args = [
"$tool_base_path/mspdbcmf.exe",
rebase_path(outputs[0], root_build_dir),
]
deps = [ ":$installable_target_name" ]
}
}
if (is_internal_build) {
products = [ "youtube" ]
if (installable_target_name == "cobalt") {
products += [
"youtubetv",
"mainappbeta",
]
}
} else {
products = [ "cobalt" ]
}
foreach(product, products) {
if (product == "youtube" || product == "cobalt") {
target_base_name = target_name
appx_output_dir = "$root_out_dir/appx"
template_output_dir = "$root_out_dir/templates"
} else if (product == "youtubetv") {
not_needed([ "target_name" ])
target_base_name = product + "_install"
appx_output_dir = "$root_out_dir/youtubetv-appx"
template_output_dir = "$root_out_dir/youtubetv-templates"
} else if (product == "mainappbeta") {
not_needed([ "target_name" ])
target_base_name = product + "_install"
appx_output_dir = "$root_out_dir/mainappbeta-appx"
template_output_dir = "$root_out_dir/mainappbeta-templates"
} else {
assert(
false,
"|product| must be one of youtube, youtubetv, mainappbeta, or cobalt.")
}
appx_template_dir_src = "//starboard/xb1/templates"
application_section_output =
"$template_output_dir/ApplicationSection.$installable_target_name.xml"
application_template =
"$appx_template_dir_src/ApplicationSection.xml.template"
copy_application_name = "${target_base_name}_copy_exe"
copy(copy_application_name) {
forward_variables_from(invoker, [ "testonly" ])
sources = [ "$root_out_dir/${installable_target_name}.exe" ]
outputs = [ "${appx_output_dir}/${installable_target_name}.exe" ]
deps = [ ":$installable_target_name" ]
}
copy_winmd_name = "${target_base_name}_copy_winmd_for_appx"
action(copy_winmd_name) {
forward_variables_from(invoker, [ "testonly" ])
sources = [ rebase_path("$root_out_dir/${installable_target_name}.exe") ]
outputs = [ "${appx_output_dir}/${installable_target_name}.winmd" ]
script = "//starboard/build/copy_file.py"
args = [
rebase_path("$root_out_dir/${installable_target_name}.winmd"),
rebase_path(outputs[0], root_build_dir),
]
deps = [ ":$installable_target_name" ]
}
generate_application_section_name =
"${target_base_name}_generate_application_section"
action(generate_application_section_name) {
forward_variables_from(invoker, [ "testonly" ])
script = "//starboard/xb1/tools/application_section_generator.py"
inputs = [ application_template ]
outputs = [ application_section_output ]
args = [
"--config",
build_type,
"--application_template",
rebase_path(application_template, root_build_dir),
"--application_name",
installable_target_name,
"--product",
product,
"--output",
rebase_path(outputs[0], root_build_dir),
]
deps = [ ":$installable_target_name" ]
}
appx_run_name = "${target_base_name}_appx_run"
action(appx_run_name) {
forward_variables_from(invoker, [ "testonly" ])
script = "//starboard/xb1/tools/appx.py"
appx_manifest_template =
"$appx_template_dir_src/AppxManifest.xml.template"
inputs = [
appx_manifest_template,
application_section_output,
]
outputs = [ "$template_output_dir/${installable_target_name}.should_not_exist.always_run" ]
args = [
"--config",
build_type,
"--appx_template",
rebase_path(appx_manifest_template, root_build_dir),
"--template_directory",
rebase_path(template_output_dir, root_build_dir),
"--manifest_out",
rebase_path("$appx_output_dir/AppxManifest.xml", root_out_dir),
"--product",
product,
]
deps = [ ":$generate_application_section_name" ]
}
group(target_base_name) {
forward_variables_from(invoker, [ "testonly" ])
deps = invoker.deps + [
":$appx_run_name",
":$copy_application_name",
":$copy_winmd_name",
":$generate_application_section_name",
":$installable_target_name",
"//starboard/xb1/install_target:${product}_copy_assets",
]
if (is_debug || is_devel) {
deps += [ "//starboard/xb1/install_target:${product}_copy_ucrt_dll" ]
}
if (should_run_mspdbcmf) {
deps += [ ":$create_pdb_file_name" ]
}
}
}
}