blob: e6aea95c79616abde1925c88193b90980fed02ee [file] [log] [blame]
# Copyright 2014 The Chromium Authors. 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/config/chrome_build.gni")
import("//build/config/features.gni")
import("//build/toolchain/toolchain.gni")
import("//components/policy/resources/policy_templates.gni")
import("//third_party/protobuf/proto_library.gni")
import("//tools/grit/grit_rule.gni")
assert(!is_ios, "Policy should not be referenced on iOS")
# To test policy generation for platforms different than your OS, override and
# enable these flags (but don't check that in!).
gen_policy_templates_common = true
gen_policy_templates_win = is_win
gen_policy_templates_linux = is_linux
gen_policy_templates_android = is_android
gen_policy_templates_mac = is_mac
if (is_mac) {
import("//build/util/branding.gni")
} else if (gen_policy_templates_mac) {
chrome_mac_bundle_id = "DUMMY_MAC_BUNDLE_ID"
}
if (is_component_build) {
# External code should depend on either //components/policy/core/browser or
# .../common depending on what code it needs.
component("policy") {
output_name = "policy_component"
visibility = [
"//components/policy/core/browser",
"//components/policy/core/common",
]
public_deps = [
"//components/policy/core/browser:internal",
"//components/policy/core/common:internal",
]
}
}
# Used by targets that compile into the implementation.
config("component_implementation") {
defines = [ "POLICY_COMPONENT_IMPLEMENTATION" ]
}
# This protobuf is equivalent to chrome_settings.proto but shares messages
# for policies of the same type, so that less classes have to be generated
# and compiled.
cloud_policy_proto_path = "$target_gen_dir/proto/cloud_policy.proto"
cloud_policy_full_runtime_proto_path =
"$target_gen_dir/proto/cloud_policy_full_runtime.proto"
# This is the "full" protobuf, which defines one protobuf message per
# policy. It is also the format currently used by the server.
chrome_settings_proto_path = "$target_gen_dir/proto/chrome_settings.proto"
constants_header_path = "$target_gen_dir/policy_constants.h"
constants_source_path = "$target_gen_dir/policy_constants.cc"
protobuf_decoder_path = "$target_gen_dir/cloud_policy_generated.cc"
app_restrictions_path = "$target_gen_dir/app_restrictions.xml"
risk_tag_header_path = "$target_gen_dir/risk_tag.h"
action("cloud_policy_code_generate") {
script = "tools/generate_policy_source.py"
chrome_version_abspath = "//chrome/VERSION"
chrome_version_path = rebase_path(chrome_version_abspath, root_build_dir)
if (is_chromeos) {
chromeos_flag = "1"
} else {
chromeos_flag = "0"
}
inputs = [
chrome_version_abspath,
"resources/policy_templates.json",
]
outputs = [
constants_header_path,
constants_source_path,
protobuf_decoder_path,
chrome_settings_proto_path,
cloud_policy_proto_path,
cloud_policy_full_runtime_proto_path,
app_restrictions_path,
risk_tag_header_path,
]
if (target_os != "android") {
outputs -= [ app_restrictions_path ]
}
args = [
"--policy-constants-header=" +
rebase_path(constants_header_path, root_build_dir),
"--policy-constants-source=" +
rebase_path(constants_source_path, root_build_dir),
"--chrome-settings-protobuf=" +
rebase_path(chrome_settings_proto_path, root_build_dir),
"--cloud-policy-protobuf=" +
rebase_path(cloud_policy_proto_path, root_build_dir),
"--cloud-policy-full-runtime-protobuf=" +
rebase_path(cloud_policy_full_runtime_proto_path, root_build_dir),
"--cloud-policy-decoder=" +
rebase_path(protobuf_decoder_path, root_build_dir),
"--app-restrictions-definition=" +
rebase_path(app_restrictions_path, root_build_dir),
"--risk-tag-header=" + rebase_path(risk_tag_header_path, root_build_dir),
chrome_version_path,
target_os,
chromeos_flag,
rebase_path("resources/policy_templates.json", root_build_dir),
]
}
policy_templates_grd_file = "resources/policy_templates.grd"
grit("grit_policy_templates") {
source = policy_templates_grd_file
use_qualified_include = true
output_dir = "$root_gen_dir/chrome"
outputs = []
defines = []
if (gen_policy_templates_common) {
outputs += policy_templates_doc_outputs
defines += [ "gen_policy_templates_common" ]
}
if (gen_policy_templates_android) {
outputs += policy_templates_android_outputs
defines += [ "gen_policy_templates_android" ]
}
if (gen_policy_templates_linux) {
outputs += policy_templates_linux_outputs
defines += [ "gen_policy_templates_linux" ]
}
if (gen_policy_templates_mac) {
outputs += policy_templates_mac_outputs
defines += [
"mac_bundle_id=$chrome_mac_bundle_id",
"gen_policy_templates_mac",
]
}
if (gen_policy_templates_win) {
outputs += policy_templates_windows_outputs
defines += [ "gen_policy_templates_win" ]
}
}
if (gen_policy_templates_win && is_chrome_branded) {
# Creates google.admx and google.adml files that define a common 'Google'
# category used for Chrome, Chrome OS and possibly external tools, see
# crbug.com/665400.
action("create_google_admx") {
script = "tools/create_google_admx.py"
inputs = [
policy_templates_grd_file,
grit_info_script,
] + policy_templates_windows_outputs
outputs = policy_templates_windows_google_outputs
deps = [
":grit_policy_templates",
]
# Don't pass in outputs directly, it would exceed a limit on Windows!
args = [
"--basedir",
rebase_path(policy_templates_base_dir, root_build_dir),
"--grd_strip_path_prefix",
"app/policy/",
"--grd_input",
rebase_path(policy_templates_grd_file, root_build_dir),
"--grit_info",
rebase_path(grit_info_script, root_build_dir),
"-D",
"gen_policy_templates_win",
] + grit_defines
}
}
group("policy_templates") {
public_deps = [
":grit_policy_templates",
]
if (gen_policy_templates_win && is_chrome_branded) {
public_deps += [ ":create_google_admx" ]
}
}
# Run the proto compiler over the generated file and make it a component.
component("cloud_policy_proto_generated_compile") {
public_deps = [
":cloud_policy_proto_generated_compile_proto",
]
}
proto_library("cloud_policy_proto_generated_compile_proto") {
visibility = [ ":cloud_policy_proto_generated_compile" ]
sources = [
cloud_policy_proto_path,
]
proto_out_dir = "components/policy/proto"
cc_generator_options = "dllexport_decl=POLICY_PROTO_EXPORT:"
cc_include = "components/policy/proto/policy_proto_export.h"
component_build_force_source_set = true
defines = [ "POLICY_PROTO_COMPILATION" ]
deps = [
":cloud_policy_code_generate",
]
}
# This target builds the "full" protobuf, used for tests only.
proto_library("chrome_settings_proto") {
testonly = true
sources = [
chrome_settings_proto_path,
]
proto_out_dir = "components/policy/proto"
deps = [
":cloud_policy_code_generate",
":cloud_policy_proto_generated_compile",
]
}
static_library("generated") {
sources = [
constants_header_path,
constants_source_path,
protobuf_decoder_path,
risk_tag_header_path,
]
defines = [ "POLICY_COMPONENT_IMPLEMENTATION" ]
public_deps = [
":cloud_policy_code_generate",
":cloud_policy_proto_generated_compile",
"//base",
"//third_party/protobuf:protobuf_lite",
]
}
if (gen_policy_templates_android && is_android) {
import("//build/config/android/rules.gni")
_generated_resources_dir = "$root_gen_dir/chrome/app/policy/android"
copy("app_restrictions_resources_copy") {
sources = [
app_restrictions_path,
]
outputs = [
"$_generated_resources_dir/xml-v21/app_restrictions.xml",
]
deps = [
":cloud_policy_code_generate",
":policy_templates",
]
}
android_resources("app_restrictions_resources") {
resource_dirs = []
generated_resource_dirs = [
"$policy_templates_base_dir/android",
_generated_resources_dir,
]
generated_resource_files =
policy_templates_android_outputs +
[ "$_generated_resources_dir/xml-v21/app_restrictions.xml" ]
deps = [
":app_restrictions_resources_copy",
":grit_policy_templates",
]
}
} else if (gen_policy_templates_mac && is_mac) {
action("convert_mcx_plist") {
script = "//build/config/mac/xcrun.py"
sources = [
"$policy_templates_base_dir/mac/app-Manifest.plist",
]
inputs = [
script,
]
outputs = [
"$target_gen_dir/$chrome_mac_bundle_id.manifest",
]
if (use_system_xcode) {
args = []
} else {
args = [
"--developer_dir",
hermetic_xcode_path,
]
}
args += [
"plutil",
"-convert",
"xml1",
] + rebase_path(sources, root_out_dir) + [ "-o" ] +
rebase_path(outputs, root_out_dir)
deps = [
":policy_templates",
]
}
bundle_data("manifest_bundle_data") {
sources = get_target_outputs(":convert_mcx_plist")
outputs = [
"{{bundle_resources_dir}}/{{source_file_part}}",
]
public_deps = [
":convert_mcx_plist",
]
}
# The reason we are not enumerating all the locales is that
# the translations would eat up 3.5MB disk space in the
# application bundle.
bundle_data("manifest_strings_bundle_data") {
sources = [
"$policy_templates_base_dir/mac/strings/en.lproj/Localizable.strings",
]
outputs = [
"{{bundle_resources_dir}}/en.lproj/{{source_file_part}}",
]
public_deps = [
":policy_templates",
]
}
create_bundle("chrome_manifest_bundle") {
bundle_root_dir = "$root_out_dir/$chrome_mac_bundle_id.manifest/Contents"
bundle_resources_dir = "$bundle_root_dir/Resources"
deps = [
":manifest_bundle_data",
":manifest_strings_bundle_data",
]
}
}
if (gen_policy_templates_common && gen_policy_templates_win) {
version_file = "VERSION"
version_path = "$policy_templates_base_dir/$version_file"
copy("add_version") {
sources = [
"//chrome/VERSION",
]
outputs = [
version_path,
]
}
action("pack_policy_templates") {
output_zip_file = "$root_out_dir/policy_templates.zip"
script = "tools/make_policy_zip.py"
inputs = [
version_path,
policy_templates_grd_file,
grit_info_script,
] + policy_templates_windows_outputs + policy_templates_doc_outputs
outputs = [
output_zip_file,
]
args = [
"--output",
rebase_path(output_zip_file, root_build_dir),
"--basedir",
rebase_path(policy_templates_base_dir, root_build_dir),
"--grd_input",
rebase_path(policy_templates_grd_file, root_build_dir),
"--grd_strip_path_prefix",
"app/policy",
"--extra_input",
version_file,
"--grit_info",
rebase_path(grit_info_script, root_build_dir),
"-D",
"gen_policy_templates_common",
"-D",
"gen_policy_templates_win",
] + grit_defines
if (is_chrome_branded) {
args += [ "--include_google_admx" ]
}
deps = [
":add_version",
":policy_templates",
]
}
}