blob: b3d3d8bc40ecdabdb3f0f1e884aa0ba474cb13b9 [file] [log] [blame]
# Copyright (c) 2020 Project CHIP Authors
#
# 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_overrides/build.gni")
import("//build_overrides/chip.gni")
import("//build_overrides/tizen.gni")
import("${build_root}/config/tizen/config.gni")
tizen_dev_certificate = get_path_info("tizen_dev_certificate.py", "abspath")
tizen_manifest_parser = get_path_info("tizen_manifest_parser.py", "abspath")
# Run Tizen Studio CLI as a project builder.
#
# Parameters:
# project_build_dir: Directory to build the project in.
# project_app_name: Name of the application within the project.
# args: List of arguments to pass to the CLI.
# outputs: List of created output files.
# deps: List of dependencies.
template("tizen_sdk") {
forward_variables_from(invoker,
[
"project_build_dir",
"project_app_name",
])
if (!defined(project_app_name)) {
project_app_name = "tizen-app"
}
# Create a dummy project definition file, so the Tizen Studio CLI
# will recognize our build directory as a Tizen project.
write_file("${project_build_dir}/project_def.prop",
[
"# Generated by the GN script. DO NOT EDIT!",
"APPNAME = " + project_app_name,
"type = app",
])
# Create a dummy project file, so the Tizen Studio CLI will not
# complain about invalid XPath (this file is not used anyway...)
write_file("${project_build_dir}/.project",
[
"<!-- Generated by the build script. DO NOT EDIT! -->",
"<projectDescription></projectDescription>",
])
action(target_name) {
forward_variables_from(invoker,
[
"deps",
"outputs",
])
script = "${build_root}/gn_run_binary.py"
args = [ "${tizen_sdk_root}/tools/ide/bin/tizen" ] + invoker.args
}
}
# Generate author certificate and security profile.
#
# Parameters:
# author_certificate_name: Author certificate name field.
# author_certificate_email: Author certificate email field.
# author_certificate_password: Password for the author certificate.
# sign_security_profile: Name of the security profile to add.
template("tizen_sdk_certificate") {
assert(defined(invoker.author_certificate_password),
"It is required to specify `author_certificate_password`.")
assert(defined(invoker.sign_security_profile),
"It is required to specify a `sign_security_profile` which " +
"should be added to Tizen security profiles.")
stamp_file = "${root_build_dir}/.tizen_sdk_dev_certificate_stamp"
action(target_name) {
forward_variables_from(invoker, [ "deps" ])
script = tizen_dev_certificate
args = [
"--author-certificate-name=" + invoker.author_certificate_name,
"--author-certificate-email=" + invoker.author_certificate_email,
"--author-certificate-password=" + invoker.author_certificate_password,
"--sign-security-profile=" + invoker.sign_security_profile,
"--stamp-file=" + stamp_file,
]
outputs = [ stamp_file ]
}
}
# Package Tizen application as a TPK bundle.
#
# Parameters:
# manifest: The path to Tizen XML manifest file to use.
# sign_security_profile: Name of the security profile to use for signing.
# deps: List of dependencies.
template("tizen_sdk_package") {
assert(defined(invoker.manifest),
"It is required to specify Tizen `manifest` XML file.")
assert(defined(invoker.sign_security_profile),
"It is required to specify a `sign_security_profile` which " +
"should be used for signing TPK package.")
# Output directory where packaging will occur. We need a separate directory
# for this, because Tizen Studio CLI scans "res" (resources), "shared" and
# "lib" directories for items to pack. In our case it could include in the
# TPK package libraries available in ${root_out_dir}/lib directory.
tizen_package_dir = "${root_build_dir}/package"
tizen_package_out_dir = "${tizen_package_dir}/out"
# Extract data from Tizen XML manifest.
manifest = exec_script(tizen_manifest_parser,
[ rebase_path(invoker.manifest, root_build_dir) ],
"json")
manifest_package = manifest["package"]
manifest_apps = manifest["apps"]
# Copy Tizen manifest from the source directory.
copy("${target_name}:manifest") {
sources = [ invoker.manifest ]
outputs = [ "${tizen_package_dir}/{{source_file_part}}" ]
deps = invoker.deps
}
# List of dependencies for Tizen Studio CLI packager.
dependencies = [ ":${target_name}:manifest" ]
# Copy executable(s) to temporary output directory. This action is required,
# because Tizen Studio CLI expects particular directory layout - it is not
# possible to specify input files manually.
if (manifest_apps["service"] != "") {
dependencies += [ ":${target_name}:app:service" ]
copy("${target_name}:app:service") {
sources = [ root_out_dir + "/" + manifest_apps["service"] ]
outputs = [ "${tizen_package_out_dir}/{{source_file_part}}" ]
deps = invoker.deps
}
}
tpk = manifest_package["name"] + "-" + manifest_package["version"] + ".tpk"
tizen_sdk(target_name) {
deps = invoker.deps + dependencies
outputs = [ "${tizen_package_out_dir}/" + tpk ]
project_build_dir = tizen_package_dir
args = [
"package",
"--type",
"tpk",
"--sign",
invoker.sign_security_profile,
"--",
tizen_package_out_dir,
]
}
}