Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Unified Diff: tools/gn/functions_target.cc

Issue 1752033002: Add "create_bundle" target in order to support bundle with gn. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gn-bundle-data
Patch Set: Add unit tests, address comments, update docs and format with clang-format Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gn/functions.cc ('k') | tools/gn/gn.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/functions_target.cc
diff --git a/tools/gn/functions_target.cc b/tools/gn/functions_target.cc
index 7a293c7c406f0642734ed802760a74d893510622..7ec5a50dd2675d81102bf3f6500d39841231aa2f 100644
--- a/tools/gn/functions_target.cc
+++ b/tools/gn/functions_target.cc
@@ -247,13 +247,57 @@ Value RunActionForEach(Scope* scope,
const char kBundleData[] = "bundle_data";
const char kBundleData_HelpShort[] =
- "bundle_data: Declare a target without output.";
+ "bundle_data: [iOS/OS X] Declare a target without output.";
const char kBundleData_Help[] =
- "bundle_data: Declare a target without output.\n"
+ "bundle_data: [iOS/OS X] Declare a target without output.\n"
"\n"
" This target type allows to declare data that is required at runtime.\n"
" It is used to inform \"create_bundle\" targets of the files to copy\n"
- " into generated bundle, see \"gn help create_bundle\" for help.\n";
+ " into generated bundle, see \"gn help create_bundle\" for help.\n"
+ "\n"
+ " The target must define a list of files as \"sources\" and a single\n"
+ " \"outputs\". If there are multiple files, source expansions must be\n"
+ " used to express the output. The output must reference a file inside\n"
+ " of {{bundle_root_dir}}.\n"
+ "\n"
+ " This target can be used on all platforms though it is designed only to\n"
+ " generate iOS/OS X bundle. In cross-platform projects, it is advised to\n"
+ " put it behind iOS/Mac conditionals.\n"
+ "\n"
+ " See \"gn help create_bundle\" for more information.\n"
+ "\n"
+ "Variables\n"
+ "\n"
+ " sources*, outputs*, deps, data_deps, public_deps, visibility\n"
+ " * = required\n"
+ "\n"
+ "Examples\n"
+ "\n"
+ " bundle_data(\"icudata\") {\n"
+ " sources = [ \"sources/data/in/icudtl.dat\" ]\n"
+ " outputs = [ \"{{bundle_resources_dir}}/{{source_file_part}}\" ]\n"
+ " }\n"
+ "\n"
+ " bundle_data(\"base_unittests_bundle_data]\") {\n"
+ " sources = [ \"test/data\" ]\n"
+ " outputs = [\n"
+ " \"{{bundle_resources_dir}}/{{source_root_relative_dir}}/\" +\n"
+ " \"{{source_file_part}}\"\n"
+ " ]\n"
+ " }\n"
+ "\n"
+ " bundle_data(\"material_typography_bundle_data\") {\n"
+ " sources = [\n"
+ " \"src/MaterialTypography.bundle/Roboto-Bold.ttf\",\n"
+ " \"src/MaterialTypography.bundle/Roboto-Italic.ttf\",\n"
+ " \"src/MaterialTypography.bundle/Roboto-Regular.ttf\",\n"
+ " \"src/MaterialTypography.bundle/Roboto-Thin.ttf\",\n"
+ " ]\n"
+ " outputs = [\n"
+ " \"{{bundle_resources_dir}}/MaterialTypography.bundle/\"\n"
+ " \"{{source_file_part}}\"\n"
+ " ]\n"
+ " }\n";
Value RunBundleData(Scope* scope,
const FunctionCallNode* function,
@@ -264,6 +308,109 @@ Value RunBundleData(Scope* scope,
block, err);
}
+// create_bundle ---------------------------------------------------------------
+
+const char kCreateBundle[] = "create_bundle";
+const char kCreateBundle_HelpShort[] =
+ "create_bundle: [iOS/OS X] Build an OS X / iOS bundle.";
+const char kCreateBundle_Help[] =
+ "create_bundle: [iOS/OS X] Build an OS X / iOS bundle.\n"
+ "\n"
+ " This target generates an iOS/OS X bundle (which is a directory with a\n"
+ " well-know structure). This target does not define any sources, instead\n"
+ " they are computed from all \"bundle_data\" target this one depends on\n"
+ " transitively (the recursion stops at \"create_bundle\" targets).\n"
+ "\n"
+ " The \"bundle_*_dir\" properties must be defined. They will be used for\n"
+ " the expansion of {{bundle_*_dir}} rules in \"bundle_data\" outputs.\n"
+ "\n"
+ " This target can be used on all platforms though it is designed only to\n"
+ " generate iOS/OS X bundle. In cross-platform projects, it is advised to\n"
+ " put it behind iOS/Mac conditionals.\n"
+ "\n"
+ "Variables\n"
+ "\n"
+ " bundle_root_dir*, bundle_resources_dir*, bundle_executable_dir*,\n"
+ " bundle_plugins_dir*, deps, data_deps, public_deps, visibility\n"
+ " * = required\n"
+ "\n"
+ "Example\n"
+ "\n"
+ " # Defines a template to create an application. On most platform, this\n"
+ " # is just an alias for an \"executable\" target, but on iOS/OS X, it\n"
+ " # builds an application bundle.\n"
+ " template(\"app\") {\n"
+ " if (!is_ios && !is_mac) {\n"
+ " executable(target_name) {\n"
+ " forward_variables_from(invoker, \"*\")\n"
+ " }\n"
+ " } else {\n"
+ " app_name = target_name\n"
+ " gen_path = target_gen_dir\n"
+ "\n"
+ " action(\"${app_name}_generate_info_plist\") {\n"
+ " script = [ \"//build/ios/ios_gen_plist.py\" ]\n"
+ " sources = [ \"templates/Info.plist\" ]\n"
+ " outputs = [ \"$gen_path/Info.plist\" ]\n"
+ " args = rebase_path(sources, root_build_dir) +\n"
+ " rebase_path(outputs, root_build_dir)\n"
+ " }\n"
+ "\n"
+ " bundle_data(\"${app_name}_bundle_info_plist\") {\n"
+ " deps = [ \":${app_name}_generate_info_plist\" ]\n"
+ " sources = [ \"$gen_path/Info.plist\" ]\n"
+ " outputs = [ \"{{bundle_root_dir}}/Info.plist\" ]\n"
+ " }\n"
+ "\n"
+ " executable(\"${app_name}_generate_executable\") {\n"
+ " forward_variables_from(invoker, \"*\", [\n"
+ " \"output_name\",\n"
+ " \"visibility\",\n"
+ " ])\n"
+ " output_name =\n"
+ " rebase_path(\"$gen_path/$app_name\", root_build_dir)\n"
+ " }\n"
+ "\n"
+ " bundle_data(\"${app_name}_bundle_executable\") {\n"
+ " deps = [ \":${app_name}_generate_executable\" ]\n"
+ " sources = [ \"$gen_path/$app_name\" ]\n"
+ " outputs = [ \"{{bundle_executable_dir}}/$app_name\" ]\n"
+ " }\n"
+ "\n"
+ " create_bundle(\"${app_name}.app\") {\n"
+ " deps = [\n"
+ " \":${app_name}_bundle_executable\",\n"
+ " \":${app_name}_bundle_info_plist\",\n"
+ " ]\n"
+ " if (is_ios) {\n"
+ " bundle_root_dir = \"${root_build_dir}/$target_name\"\n"
+ " bundle_resources_dir = bundle_root_dir\n"
+ " bundle_executable_dir = bundle_root_dir\n"
+ " bundle_plugins_dir = bundle_root_dir + \"/Plugins\"\n"
+ " } else {\n"
+ " bundle_root_dir = \"${root_build_dir}/target_name/Contents\"\n"
+ " bundle_resources_dir = bundle_root_dir + \"/Resources\"\n"
+ " bundle_executable_dir = bundle_root_dir + \"/MacOS\"\n"
+ " bundle_plugins_dir = bundle_root_dir + \"/Plugins\"\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " group(target_name) {\n"
+ " forward_variables_from(invoker, [\"visibility\"])\n"
+ " deps = [ \":${app_name}.app\" ]\n"
+ " }\n"
+ " }\n"
+ " }\n";
+
+Value RunCreateBundle(Scope* scope,
+ const FunctionCallNode* function,
+ const std::vector<Value>& args,
+ BlockNode* block,
+ Err* err) {
+ return ExecuteGenericTarget(functions::kCreateBundle, scope, function, args,
+ block, err);
+}
+
// copy ------------------------------------------------------------------------
const char kCopy[] = "copy";
« no previous file with comments | « tools/gn/functions.cc ('k') | tools/gn/gn.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698