611 lines
20 KiB
Plaintext
611 lines
20 KiB
Plaintext
# Copyright (c) 2021 Huawei Device Co., Ltd.
|
|
# 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/python.gni")
|
|
import("//build/ohos_var.gni")
|
|
import("//build/templates/metadata/module_info.gni")
|
|
|
|
if (is_ohos) {
|
|
import("//build/config/ohos/abi.gni")
|
|
}
|
|
|
|
template("merge_profile") {
|
|
forward_variables_from(invoker, [ "testonly" ])
|
|
assert(defined(invoker.hap_profile),
|
|
"hap_profile must be defined for compile_resources")
|
|
action(target_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"meta_data",
|
|
"hap_profile",
|
|
"generated_profile",
|
|
"deps",
|
|
])
|
|
script = "//build/scripts/merge_profile.py"
|
|
depfile = "$target_gen_dir/$target_name.d"
|
|
|
|
_rebased_metadata = rebase_path(meta_data, root_build_dir)
|
|
inputs = [
|
|
meta_data,
|
|
hap_profile,
|
|
]
|
|
args = [
|
|
"--resources-dir=@FileArg($_rebased_metadata:root:resources)",
|
|
"--depfile",
|
|
rebase_path(depfile, root_build_dir),
|
|
"--app-profile=@FileArg($_rebased_metadata:root:app_profile)",
|
|
"--hap-profile",
|
|
rebase_path(hap_profile, root_build_dir),
|
|
"--generated-profile",
|
|
rebase_path(generated_profile, root_build_dir),
|
|
"--release-type",
|
|
release_type,
|
|
]
|
|
outputs = [ generated_profile ]
|
|
}
|
|
}
|
|
|
|
template("compile_resources") {
|
|
forward_variables_from(invoker, [ "testonly" ])
|
|
assert(defined(invoker.hap_profile),
|
|
"hap_profile must be defined for compile_resources")
|
|
assert(
|
|
defined(invoker.packaged_resources) ||
|
|
defined(invoker.generated_header_dir),
|
|
"hap_profile or generated_header_dir must be defined for compile_resources")
|
|
_generate_resource = defined(invoker.packaged_resources)
|
|
if (_generate_resource) {
|
|
_packaged_resources = invoker.packaged_resources
|
|
}
|
|
_generate_header = defined(invoker.generated_header_dir)
|
|
if (_generate_header) {
|
|
_generated_header_file = invoker.generated_header_dir + "/ResourceTable.h"
|
|
}
|
|
action_with_pydeps(target_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"meta_data",
|
|
"hap_profile",
|
|
"deps",
|
|
])
|
|
script = "//build/scripts/compile_resources.py"
|
|
depfile = "$target_gen_dir/$target_name.d"
|
|
if (defined(deps)) {
|
|
deps += [
|
|
"//developtools/global_resource_tool:restool($host_toolchain)",
|
|
"//developtools/global_resource_tool:restool_id_defined($host_toolchain)",
|
|
]
|
|
} else {
|
|
deps = [
|
|
"//developtools/global_resource_tool:restool($host_toolchain)",
|
|
"//developtools/global_resource_tool:restool_id_defined($host_toolchain)",
|
|
]
|
|
}
|
|
restool_path =
|
|
get_label_info(
|
|
"//developtools/global_resource_tool:restool($host_toolchain)",
|
|
"root_out_dir") + "/developtools/global_resource_tool/restool"
|
|
_rebased_metadata = rebase_path(meta_data, root_build_dir)
|
|
inputs = [
|
|
meta_data,
|
|
restool_path,
|
|
hap_profile,
|
|
]
|
|
args = [
|
|
"--resources-dir=@FileArg($_rebased_metadata:root:resources)",
|
|
"--depfile",
|
|
rebase_path(depfile, root_build_dir),
|
|
"--restool-path",
|
|
rebase_path(restool_path, root_build_dir),
|
|
"--hap-profile=@FileArg($_rebased_metadata:root:hap_profile)",
|
|
"--app-profile=@FileArg($_rebased_metadata:root:app_profile)",
|
|
]
|
|
outputs = []
|
|
if (_generate_resource) {
|
|
outputs += [ _packaged_resources ]
|
|
args += [
|
|
"--output-resources-zipfile",
|
|
rebase_path(_packaged_resources, root_build_dir),
|
|
]
|
|
}
|
|
if (_generate_header) {
|
|
outputs += [ _generated_header_file ]
|
|
args += [
|
|
"--output-header-file",
|
|
rebase_path(_generated_header_file, root_build_dir),
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
template("package_app") {
|
|
forward_variables_from(invoker, [ "testonly" ])
|
|
assert(defined(invoker.hap_profile),
|
|
"hap_profile must be defined for $target_name")
|
|
assert(defined(invoker.hap_path), "hap_path must be defined for $target_name")
|
|
action_with_pydeps(target_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"deps",
|
|
"shared_libraries",
|
|
"hap_profile",
|
|
"hap_path",
|
|
"packaged_resources",
|
|
"packaged_js_assets",
|
|
"meta_data",
|
|
"private_key_path",
|
|
"signature_algorithm",
|
|
"certificate_profile",
|
|
"keystore_path",
|
|
"keystore_password",
|
|
"key_alias",
|
|
"certificate_file",
|
|
"install_module_info",
|
|
"enable_ark",
|
|
"build_mode",
|
|
"compatible_version",
|
|
])
|
|
script = "//build/scripts/hapbuilder.py"
|
|
depfile = "$target_gen_dir/$target_name.d"
|
|
_rebased_metadata = rebase_path(meta_data, root_build_dir)
|
|
outputs = [ hap_path ]
|
|
args = [
|
|
"--depfile",
|
|
rebase_path(depfile, root_build_dir),
|
|
"--hap-profile=@FileArg($_rebased_metadata:root:hap_profile)",
|
|
"--hapsigner",
|
|
rebase_path(hapsigner, root_build_dir),
|
|
"--hap-packing-tool",
|
|
rebase_path(hap_packing_tool, root_build_dir),
|
|
"--hap-path",
|
|
rebase_path(hap_path, root_build_dir),
|
|
"--packaged-resources",
|
|
rebase_path(packaged_resources, root_build_dir),
|
|
"--packaged-js-assets",
|
|
rebase_path(packaged_js_assets, root_build_dir),
|
|
"--assets=@FileArg($_rebased_metadata:root:assets)",
|
|
"--app-profile=@FileArg($_rebased_metadata:root:app_profile)",
|
|
"--build-mode",
|
|
build_mode,
|
|
]
|
|
|
|
inputs = [
|
|
hap_profile,
|
|
hapsigner,
|
|
hap_packing_tool,
|
|
packaged_js_assets,
|
|
packaged_resources,
|
|
meta_data,
|
|
]
|
|
|
|
_private_key_path = default_hap_private_key_path
|
|
if (defined(private_key_path)) {
|
|
_private_key_path = private_key_path
|
|
}
|
|
_signature_algorithm = default_signature_algorithm
|
|
if (defined(signature_algorithm)) {
|
|
_signature_algorithm = signature_algorithm
|
|
}
|
|
_key_alias = default_key_alias
|
|
if (defined(key_alias)) {
|
|
_key_alias = key_alias
|
|
}
|
|
_keystore_path = default_keystore_path
|
|
if (defined(keystore_path)) {
|
|
_keystore_path = keystore_path
|
|
}
|
|
_keystore_password = default_keystore_password
|
|
if (defined(keystore_password)) {
|
|
_keystore_password = keystore_password
|
|
}
|
|
_certificate_file = default_hap_certificate_file
|
|
if (defined(certificate_file)) {
|
|
_certificate_file = certificate_file
|
|
}
|
|
|
|
inputs += [
|
|
certificate_profile,
|
|
_keystore_path,
|
|
_certificate_file,
|
|
]
|
|
_sign_hap_py_path = "//build/scripts/app_sign.py"
|
|
if (defined(sign_hap_py_path)) {
|
|
_sign_hap_py_path = sign_hap_py_path
|
|
}
|
|
args += [
|
|
"--sign_hap_py_path",
|
|
rebase_path(_sign_hap_py_path),
|
|
]
|
|
if (defined(compatible_version)) {
|
|
_sign_compatible_version = compatible_version
|
|
print("INFO: Set para compatible_version for remote sign app, ",
|
|
target_name,
|
|
" value is ",
|
|
_sign_compatible_version)
|
|
args += [
|
|
"--sign_compatible_version",
|
|
_sign_compatible_version,
|
|
]
|
|
} else if (defined(sign_hap_py_path)) {
|
|
print(
|
|
"warning: Please set compatible_version for remote sign app!!! target_name: ",
|
|
target_name)
|
|
}
|
|
args += [
|
|
"--private-key-path",
|
|
_private_key_path,
|
|
"--sign-algo",
|
|
_signature_algorithm,
|
|
"--certificate-profile",
|
|
rebase_path(certificate_profile, root_build_dir),
|
|
"--keyalias",
|
|
_key_alias,
|
|
"--keystore-path",
|
|
rebase_path(_keystore_path, root_build_dir),
|
|
"--keystorepasswd",
|
|
_keystore_password,
|
|
"--certificate-file",
|
|
rebase_path(_certificate_file, root_build_dir),
|
|
]
|
|
|
|
if (defined(shared_libraries)) {
|
|
foreach(lib, shared_libraries) {
|
|
_module_info = get_label_info(lib, "target_out_dir") + "/" +
|
|
get_label_info(lib, "name") + "_module_info.json"
|
|
_rebased_module_info = rebase_path(_module_info, root_build_dir)
|
|
args += [ "--dso=@FileArg($_rebased_module_info:source)" ]
|
|
}
|
|
if (is_ohos) {
|
|
args += [
|
|
"--ohos-app-abi",
|
|
ohos_app_abi,
|
|
]
|
|
}
|
|
}
|
|
|
|
if (defined(install_module_info)) {
|
|
metadata = {
|
|
install_modules = [ install_module_info ]
|
|
}
|
|
}
|
|
if (defined(enable_ark) && enable_ark) {
|
|
_ark_deps = [
|
|
"//arkcompiler/ets_frontend/es2panda:es2abc_js_file($host_toolchain)",
|
|
"//arkcompiler/ets_frontend/es2panda:es2panda_build($host_toolchain)",
|
|
]
|
|
if (defined(deps)) {
|
|
deps += _ark_deps
|
|
} else {
|
|
deps = _ark_deps
|
|
}
|
|
_js2abc_js = get_label_info(
|
|
"//arkcompiler/ets_frontend/es2panda:es2abc_js_file($host_toolchain)",
|
|
"target_out_dir") + "/ts2abc.js"
|
|
args += [
|
|
"--nodejs-path",
|
|
rebase_path(nodejs, root_build_dir),
|
|
"--js2abc-js",
|
|
rebase_path(_js2abc_js, root_build_dir),
|
|
"--enable-ark",
|
|
]
|
|
inputs += [
|
|
nodejs,
|
|
_js2abc_js,
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
template("compile_js_assets") {
|
|
forward_variables_from(invoker, [ "testonly" ])
|
|
assert(defined(invoker.meta_data) && defined(invoker.packaged_js_assets),
|
|
"meta_data and packaged_js_assets must be for compile_js_assets")
|
|
|
|
_packaged_js_assets = invoker.packaged_js_assets
|
|
action_with_pydeps(target_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"deps",
|
|
"meta_data",
|
|
"hap_profile",
|
|
"build_mode",
|
|
"js2abc",
|
|
"ets2abc",
|
|
"main_target_name",
|
|
])
|
|
script = "//build/scripts/build_js_assets.py"
|
|
depfile = "$target_gen_dir/$target_name.d"
|
|
outputs = [ _packaged_js_assets ]
|
|
|
|
_rebased_metadata = rebase_path(meta_data, root_build_dir)
|
|
|
|
if (!defined(deps)) {
|
|
deps = []
|
|
}
|
|
deps += [
|
|
"//arkcompiler/ets_frontend/es2panda:build_es2abc_for_hap($host_toolchain)",
|
|
"//developtools/ace_ets2bundle:ets_loader_ark_hap",
|
|
"//developtools/ace_js2bundle:ace_loader_ark_hap",
|
|
"//third_party/weex-loader:weex_loader_ark_hap",
|
|
]
|
|
_ace_loader_home =
|
|
get_label_info("//developtools/ace_js2bundle:ace_loader_node_modules",
|
|
"target_out_dir") + "/ace_loader_ark"
|
|
_webpack_config_js = "${_ace_loader_home}/webpack.rich.config.js"
|
|
_ets_loader_home =
|
|
get_label_info("//developtools/ace_ets2bundle:ets_loader_node_modules",
|
|
"target_out_dir") + "/ets_loader_ark"
|
|
_webpack_config_ets = "${_ets_loader_home}/webpack.config.js"
|
|
_webpack_js = "${_ace_loader_home}/node_modules/webpack/bin/webpack.js"
|
|
_manifest_file_path = "${target_gen_dir}/manifest_file"
|
|
|
|
inputs = [
|
|
meta_data,
|
|
nodejs,
|
|
]
|
|
|
|
args = [
|
|
"--js-assets-dir=@FileArg($_rebased_metadata:root:js_assets)",
|
|
"--ets-assets-dir=@FileArg($_rebased_metadata:root:ets_assets)",
|
|
"--js-forms-dir=@FileArg($_rebased_metadata:root:js_forms)",
|
|
"--testrunner-dir=@FileArg($_rebased_metadata:root:testrunner)",
|
|
"--output",
|
|
rebase_path(_packaged_js_assets, root_build_dir),
|
|
"--depfile",
|
|
rebase_path(depfile, root_build_dir),
|
|
"--nodejs-path",
|
|
rebase_path(nodejs, root_build_dir),
|
|
"--webpack-js",
|
|
rebase_path(_webpack_js, root_build_dir),
|
|
"--webpack-config-js",
|
|
rebase_path(_webpack_config_js, root_build_dir),
|
|
"--webpack-config-ets",
|
|
rebase_path(_webpack_config_ets, root_build_dir),
|
|
"--build-mode",
|
|
build_mode,
|
|
"--ace-loader-home",
|
|
rebase_path(_ace_loader_home, root_build_dir),
|
|
"--ets-loader-home",
|
|
rebase_path(_ets_loader_home, root_build_dir),
|
|
"--hap-profile=@FileArg($_rebased_metadata:root:hap_profile)",
|
|
"--app-profile=@FileArg($_rebased_metadata:root:app_profile)",
|
|
"--manifest-file-path",
|
|
rebase_path(_manifest_file_path, root_build_dir),
|
|
]
|
|
if (defined(testonly) && testonly == true) {
|
|
_js_sources_file = target_gen_dir + "/$main_target_name.sources"
|
|
args += [
|
|
"--js-sources-file",
|
|
rebase_path(_js_sources_file, root_build_dir),
|
|
]
|
|
outputs += [ _js_sources_file ]
|
|
}
|
|
|
|
if (js2abc || ets2abc) {
|
|
_es2abc_dir = get_label_info(
|
|
"//arkcompiler/ets_frontend/es2panda:es2panda_build($host_toolchain)",
|
|
"target_out_dir")
|
|
if (ets2abc) {
|
|
args += [ "--ets2abc" ]
|
|
} else if (js2abc) {
|
|
args += [ "--js2abc" ]
|
|
}
|
|
args += [
|
|
"--ark-es2abc-dir",
|
|
rebase_path(_es2abc_dir, root_build_dir),
|
|
]
|
|
}
|
|
|
|
if (defined(hap_profile)) {
|
|
inputs += [ hap_profile ]
|
|
}
|
|
}
|
|
}
|
|
|
|
template("app_sign") {
|
|
forward_variables_from(invoker, [ "testonly" ])
|
|
action(target_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"deps",
|
|
"private_key_path",
|
|
"signature_algorithm",
|
|
"certificate_profile",
|
|
"keystore_password",
|
|
"key_alias",
|
|
"certificate_file",
|
|
"keystore_path",
|
|
"unsigned_hap_path_list",
|
|
"hap_out_dir",
|
|
"hap_name",
|
|
"install_module_info",
|
|
])
|
|
script = "//build/scripts/app_sign.py"
|
|
_private_key_path = default_hap_private_key_path
|
|
if (defined(private_key_path)) {
|
|
_private_key_path = private_key_path
|
|
}
|
|
_key_alias = default_key_alias
|
|
if (defined(key_alias)) {
|
|
_key_alias = key_alias
|
|
}
|
|
_signature_algorithm = default_signature_algorithm
|
|
if (defined(signature_algorithm)) {
|
|
_signature_algorithm = signature_algorithm
|
|
}
|
|
_keystore_path = default_keystore_path
|
|
if (defined(keystore_path)) {
|
|
_keystore_path = keystore_path
|
|
}
|
|
_certificate_file = default_hap_certificate_file
|
|
if (defined(certificate_file)) {
|
|
_certificate_file = certificate_file
|
|
}
|
|
_keystore_password = default_keystore_password
|
|
if (defined(keystore_password)) {
|
|
_keystore_password = keystore_password
|
|
}
|
|
if (defined(certificate_profile)) {
|
|
_certificate_profile = certificate_profile
|
|
}
|
|
|
|
inputs = [
|
|
hapsigner,
|
|
certificate_profile,
|
|
_keystore_path,
|
|
_certificate_file,
|
|
]
|
|
|
|
outputs = [ "${target_out_dir}/${target_name}.stamp" ]
|
|
|
|
args = [
|
|
"--keyPwd",
|
|
_private_key_path,
|
|
"--sign-algo",
|
|
_signature_algorithm,
|
|
"--profileFile",
|
|
rebase_path(_certificate_profile, root_build_dir),
|
|
"--keyalias",
|
|
_key_alias,
|
|
"--keystoreFile",
|
|
rebase_path(_keystore_path, root_build_dir),
|
|
"--keystorePwd",
|
|
_keystore_password,
|
|
"--certificate-file",
|
|
rebase_path(_certificate_file, root_build_dir),
|
|
"--hapsigner",
|
|
rebase_path(hapsigner, root_build_dir),
|
|
"--unsigned-hap-path-list",
|
|
rebase_path(unsigned_hap_path_list, root_build_dir),
|
|
"--hap-out-dir",
|
|
rebase_path(hap_out_dir, root_build_dir),
|
|
"--hap-name",
|
|
hap_name,
|
|
]
|
|
if (defined(install_module_info)) {
|
|
metadata = {
|
|
install_modules = [ install_module_info ]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
template("compile_app") {
|
|
forward_variables_from(invoker, [ "testonly" ])
|
|
nodejs_version = "v14.21.1"
|
|
if (host_os == "mac") {
|
|
_nodejs = "//prebuilts/build-tools/common/nodejs/node-${nodejs_version}-darwin-x64/bin/node"
|
|
} else {
|
|
_nodejs = "//prebuilts/build-tools/common/nodejs/node-${nodejs_version}-${host_os}-x64/bin/node"
|
|
}
|
|
action(target_name) {
|
|
forward_variables_from(invoker,
|
|
[
|
|
"deps",
|
|
"cwd",
|
|
"build_mode",
|
|
"build_profile",
|
|
"app_profile",
|
|
"hap_profile",
|
|
"build_level",
|
|
"assemble_type",
|
|
"sdk_home",
|
|
"unsigned_hap_path_list",
|
|
"system_lib_deps",
|
|
"hap_out_dir",
|
|
"hap_name",
|
|
"install_module_info",
|
|
"test_hap",
|
|
"test_module",
|
|
"module_libs_dir",
|
|
"sdk_type_name",
|
|
])
|
|
script = "//build/scripts/compile_app.py"
|
|
outputs = [ unsigned_hap_path_list ]
|
|
|
|
args = [
|
|
"--nodejs",
|
|
rebase_path(_nodejs, root_build_dir),
|
|
"--cwd",
|
|
rebase_path(cwd, root_build_dir),
|
|
"--build-profile",
|
|
rebase_path(build_profile, root_build_dir),
|
|
"--sdk-home",
|
|
rebase_path(sdk_home),
|
|
"--output-file",
|
|
rebase_path(unsigned_hap_path_list, root_build_dir),
|
|
"--ohpm-registry",
|
|
ohpm_registry,
|
|
]
|
|
|
|
if (defined(build_mode) && build_mode == "debug") {
|
|
args += [ "--enable-debug" ]
|
|
}
|
|
|
|
if (defined(test_hap) && test_hap) {
|
|
args += [ "--test-hap" ]
|
|
}
|
|
|
|
if (defined(test_module) && test_module != "") {
|
|
args += [
|
|
"--test-module",
|
|
test_module,
|
|
]
|
|
}
|
|
if (defined(module_libs_dir) && module_libs_dir != "") {
|
|
args += [
|
|
"--module-libs-dir",
|
|
module_libs_dir,
|
|
]
|
|
}
|
|
if (defined(build_level) && build_level != "") {
|
|
args += [
|
|
"--build-level",
|
|
build_level,
|
|
]
|
|
}
|
|
if (defined(assemble_type) && assemble_type != "") {
|
|
args += [
|
|
"--assemble-type",
|
|
assemble_type,
|
|
]
|
|
}
|
|
if (defined(system_lib_deps)) {
|
|
args += [ "--system-lib-module-info-list" ]
|
|
foreach(_lib_deps, system_lib_deps) {
|
|
_lib_out_name = get_label_info(_lib_deps, "name")
|
|
_lib_out_dir = get_label_info(_lib_deps, "target_out_dir")
|
|
args +=
|
|
[ rebase_path("${_lib_out_dir}/${_lib_out_name}_module_info.json",
|
|
root_build_dir) ]
|
|
}
|
|
|
|
if (is_ohos) {
|
|
args += [
|
|
"--ohos-app-abi",
|
|
ohos_app_abi,
|
|
]
|
|
}
|
|
}
|
|
if (defined(sdk_type_name) && sdk_type_name != []) {
|
|
args += [ "--sdk-type-name" ]
|
|
args += sdk_type_name
|
|
}
|
|
if (defined(install_module_info)) {
|
|
metadata = {
|
|
install_modules = [ install_module_info ]
|
|
}
|
|
}
|
|
}
|
|
}
|