Support LTO and ThinLTO build in Fuchsia and Magenta recipes
The ThinLTO build also uses a per-bot shared ThinLTO cache.
Change-Id: Iff227aacfded6de3ec4f2b22e084f7287348cb20
diff --git a/README.recipes.md b/README.recipes.md
index a22dfcc..47d6948 100644
--- a/README.recipes.md
+++ b/README.recipes.md
@@ -410,7 +410,7 @@
Recipe for building Fuchsia and running tests.
-— **def [BuildFuchsia](/recipes/fuchsia.py#102)(api, release_build, target, gn_target, fuchsia_build_dir, modules, boot_module, tests, use_goma, gn_args):**
+— **def [BuildFuchsia](/recipes/fuchsia.py#102)(api, build_type, target, gn_target, fuchsia_build_dir, modules, boot_module, tests, use_goma, gn_args):**
— **def [BuildMagenta](/recipes/fuchsia.py#83)(api, target):**
@@ -418,11 +418,11 @@
  **@contextmanager**<br>— **def [GomaContext](/recipes/fuchsia.py#93)(api, use_goma):**
-— **def [RunSteps](/recipes/fuchsia.py#227)(api, category, patch_gerrit_url, patch_project, patch_ref, patch_storage, patch_repository_url, manifest, remote, target, build_type, modules, boot_module, tests, use_goma, gn_args):**
+— **def [RunSteps](/recipes/fuchsia.py#234)(api, category, patch_gerrit_url, patch_project, patch_ref, patch_storage, patch_repository_url, manifest, remote, target, build_type, modules, boot_module, tests, use_goma, gn_args):**
-— **def [RunTests](/recipes/fuchsia.py#143)(api, target, fuchsia_build_dir, tests):**
+— **def [RunTests](/recipes/fuchsia.py#150)(api, target, fuchsia_build_dir, tests):**
-— **def [UploadArchive](/recipes/fuchsia.py#209)(api, target, magenta_build_dir, fuchsia_build_dir):**
+— **def [UploadArchive](/recipes/fuchsia.py#216)(api, target, magenta_build_dir, fuchsia_build_dir):**
### *recipes* / [git:examples/full](/recipe_modules/git/examples/full.py)
[DEPS](/recipe_modules/git/examples/full.py#5): [git](#recipe_modules-git), [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/platform][recipe_engine/recipe_modules/platform], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step]
@@ -475,9 +475,9 @@
Recipe for building Magenta.
-— **def [RunSteps](/recipes/magenta.py#91)(api, category, patch_gerrit_url, patch_project, patch_ref, patch_storage, patch_repository_url, manifest, remote, target, toolchain, run_tests):**
+— **def [RunSteps](/recipes/magenta.py#93)(api, category, patch_gerrit_url, patch_project, patch_ref, patch_storage, patch_repository_url, manifest, remote, target, toolchain, run_tests):**
-— **def [RunTests](/recipes/magenta.py#70)(api, name, \*args, \*\*kwargs):**
+— **def [RunTests](/recipes/magenta.py#72)(api, name, \*args, \*\*kwargs):**
### *recipes* / [modules](/recipes/modules.py)
[DEPS](/recipes/modules.py#11): [goma](#recipe_modules-goma), [jiri](#recipe_modules-jiri), [recipe\_engine/context][recipe_engine/recipe_modules/context], [recipe\_engine/path][recipe_engine/recipe_modules/path], [recipe\_engine/properties][recipe_engine/recipe_modules/properties], [recipe\_engine/raw\_io][recipe_engine/recipe_modules/raw_io], [recipe\_engine/step][recipe_engine/recipe_modules/step]
diff --git a/recipes/fuchsia.expected/lto.json b/recipes/fuchsia.expected/lto.json
new file mode 100644
index 0000000..a04da8c
--- /dev/null
+++ b/recipes/fuchsia.expected/lto.json
@@ -0,0 +1,389 @@
+[
+ {
+ "cmd": [],
+ "name": "ensure_jiri"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/jiri",
+ "-ensure-file",
+ "fuchsia/tools/jiri/linux-amd64 stable",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_jiri.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-stable----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/jiri/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "ensure_gsutil"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/gsutil",
+ "-ensure-file",
+ "infra/tools/gsutil latest",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_gsutil.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/tools/gsutil\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "ensure_goma"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/goma",
+ "-ensure-file",
+ "infra_internal/goma/client/linux-amd64 release",
+ "-json-output",
+ "/path/to/tmp/json",
+ "-service-account-json",
+ "/creds/service_accounts/service-account-goma-client.json"
+ ],
+ "infra_step": true,
+ "name": "ensure_goma.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-release---------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra_internal/goma/client/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "init",
+ "-cache",
+ "[CACHE]/git",
+ "-shared"
+ ],
+ "infra_step": true,
+ "name": "jiri init"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "import",
+ "-overwrite=true",
+ "fuchsia",
+ "https://fuchsia.googlesource.com/manifest"
+ ],
+ "infra_step": true,
+ "name": "jiri import"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "project",
+ "-clean-all"
+ ],
+ "infra_step": true,
+ "name": "jiri project clean"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "update",
+ "-autoupdate=false",
+ "-gc=true"
+ ],
+ "infra_step": true,
+ "name": "jiri update"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "snapshot",
+ "[TMP_BASE]/jiri.snapshot"
+ ],
+ "infra_step": true,
+ "name": "jiri snapshot"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-spec",
+ "RECIPE_MODULE[infra::gsutil]/resources/gsutil.vpython",
+ "-u",
+ "[START_DIR]/cipd/gsutil/gsutil",
+ "-o",
+ "GSUtil:software_update_check_period=0",
+ "cp",
+ "[TMP_BASE]/jiri.snapshot",
+ "gs://fuchsia/jiri/snapshots/8ac5404b688b34f2d34d1c8a648413aca30b7a97"
+ ],
+ "infra_step": true,
+ "name": "upload jiri.snapshot",
+ "~followup_annotations": [
+ "@@@STEP_LINK@jiri.snapshot@https://storage.googleapis.com/fuchsia/jiri/snapshots/8ac5404b688b34f2d34d1c8a648413aca30b7a97@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/scripts/build-magenta.sh",
+ "-c",
+ "-t",
+ "x86_64"
+ ],
+ "name": "build magenta"
+ },
+ {
+ "cmd": [],
+ "name": "build fuchsia"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "[START_DIR]/cipd/goma/goma_ctl.py",
+ "restart"
+ ],
+ "env": {
+ "GOMA_CACHE_DIR": "[CACHE]/goma",
+ "GOMA_DEPS_CACHE_FILE": "goma_deps_cache",
+ "GOMA_SERVICE_ACCOUNT_JSON_FILE": "/creds/service_accounts/service-account-goma-client.json"
+ },
+ "infra_step": true,
+ "name": "build fuchsia.start_goma",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/packages/gn/gen.py",
+ "--target_cpu=x86-64",
+ "--modules=default",
+ "--with-dart-analysis",
+ "--goma=[START_DIR]/cipd/goma",
+ "--release",
+ "--lto=full"
+ ],
+ "name": "build fuchsia.gen",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport multiprocessing\nimport sys\n\njob_limit = 200\nif sys.platform.startswith('linux'):\n # Use 80 for linux not to load goma backend.\n job_limit = 80\n\ntry:\n jobs = min(job_limit, multiprocessing.cpu_count() * 10)\nexcept NotImplementedError:\n jobs = 50\n\nprint jobs\n"
+ ],
+ "name": "build fuchsia.calculate the number of recommended jobs",
+ "stdout": "/path/to/tmp/",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import multiprocessing@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@job_limit = 200@@@",
+ "@@@STEP_LOG_LINE@python.inline@if sys.platform.startswith('linux'):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ # Use 80 for linux not to load goma backend.@@@",
+ "@@@STEP_LOG_LINE@python.inline@ job_limit = 80@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@try:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ jobs = min(job_limit, multiprocessing.cpu_count() * 10)@@@",
+ "@@@STEP_LOG_LINE@python.inline@except NotImplementedError:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ jobs = 50@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@print jobs@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/buildtools/ninja",
+ "-C",
+ "[START_DIR]/out/release-x86-64",
+ "-j",
+ "50"
+ ],
+ "name": "build fuchsia.ninja",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "[START_DIR]/cipd/goma/goma_ctl.py",
+ "jsonstatus",
+ "[START_DIR]/cipd/goma/jsonstatus"
+ ],
+ "env": {
+ "GOMA_CACHE_DIR": "[CACHE]/goma",
+ "GOMA_DEPS_CACHE_FILE": "goma_deps_cache",
+ "GOMA_SERVICE_ACCOUNT_JSON_FILE": "/creds/service_accounts/service-account-goma-client.json"
+ },
+ "name": "build fuchsia.goma_jsonstatus",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "[START_DIR]/cipd/goma/goma_ctl.py",
+ "stat"
+ ],
+ "env": {
+ "GOMA_CACHE_DIR": "[CACHE]/goma",
+ "GOMA_DEPS_CACHE_FILE": "goma_deps_cache",
+ "GOMA_SERVICE_ACCOUNT_JSON_FILE": "/creds/service_accounts/service-account-goma-client.json"
+ },
+ "name": "build fuchsia.goma_stat",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "[START_DIR]/cipd/goma/goma_ctl.py",
+ "stop"
+ ],
+ "env": {
+ "GOMA_CACHE_DIR": "[CACHE]/goma",
+ "GOMA_DEPS_CACHE_FILE": "goma_deps_cache",
+ "GOMA_SERVICE_ACCOUNT_JSON_FILE": "/creds/service_accounts/service-account-goma-client.json"
+ },
+ "name": "build fuchsia.stop_goma",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "ensure bsdtar"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd",
+ "-ensure-file",
+ "fuchsia/tools/bsdtar/linux-amd64 latest",
+ "-json-output",
+ "/path/to/tmp/json",
+ "-service-account-json",
+ "/creds/service_accounts/service-account-goma-client.json"
+ ],
+ "infra_step": true,
+ "name": "ensure bsdtar.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/bsdtar/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/bsdtar",
+ "-cf",
+ "[TMP_BASE]/fuchsia.tar.gz",
+ "-z",
+ "-C",
+ "[START_DIR]/out/build-magenta/build-magenta-pc-x86-64",
+ "bootdata.bin",
+ "magenta.elf",
+ "magenta.bin",
+ "bootloader/bootx64.efi",
+ "-C",
+ "[START_DIR]/out/release-x86-64",
+ "user.bootfs"
+ ],
+ "name": "tar fuchsia"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[infra::hash]/resources/hashutil.py",
+ "-a",
+ "sha1",
+ "[TMP_BASE]/fuchsia.tar.gz"
+ ],
+ "infra_step": true,
+ "name": "hash archive",
+ "stdout": "/path/to/tmp/"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-spec",
+ "RECIPE_MODULE[infra::gsutil]/resources/gsutil.vpython",
+ "-u",
+ "[START_DIR]/cipd/gsutil/gsutil",
+ "-o",
+ "GSUtil:software_update_check_period=0",
+ "cp",
+ "[TMP_BASE]/fuchsia.tar.gz",
+ "gs://fuchsia-archive/cd963da3f17c3acc611a9b9c1b272fcd6ae39909"
+ ],
+ "infra_step": true,
+ "name": "upload fuchsia.tar.gz",
+ "~followup_annotations": [
+ "@@@STEP_LINK@fuchsia.tar.gz@https://storage.cloud.google.com/fuchsia-archive/cd963da3f17c3acc611a9b9c1b272fcd6ae39909@@@"
+ ]
+ },
+ {
+ "name": "$result",
+ "recipe_result": null,
+ "status_code": 0
+ }
+]
\ No newline at end of file
diff --git a/recipes/fuchsia.expected/thinlto.json b/recipes/fuchsia.expected/thinlto.json
new file mode 100644
index 0000000..872555a
--- /dev/null
+++ b/recipes/fuchsia.expected/thinlto.json
@@ -0,0 +1,391 @@
+[
+ {
+ "cmd": [],
+ "name": "ensure_jiri"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/jiri",
+ "-ensure-file",
+ "fuchsia/tools/jiri/linux-amd64 stable",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_jiri.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-stable----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/jiri/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "ensure_gsutil"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/gsutil",
+ "-ensure-file",
+ "infra/tools/gsutil latest",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_gsutil.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra/tools/gsutil\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "ensure_goma"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/goma",
+ "-ensure-file",
+ "infra_internal/goma/client/linux-amd64 release",
+ "-json-output",
+ "/path/to/tmp/json",
+ "-service-account-json",
+ "/creds/service_accounts/service-account-goma-client.json"
+ ],
+ "infra_step": true,
+ "name": "ensure_goma.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-release---------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"infra_internal/goma/client/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "init",
+ "-cache",
+ "[CACHE]/git",
+ "-shared"
+ ],
+ "infra_step": true,
+ "name": "jiri init"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "import",
+ "-overwrite=true",
+ "fuchsia",
+ "https://fuchsia.googlesource.com/manifest"
+ ],
+ "infra_step": true,
+ "name": "jiri import"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "project",
+ "-clean-all"
+ ],
+ "infra_step": true,
+ "name": "jiri project clean"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "update",
+ "-autoupdate=false",
+ "-gc=true"
+ ],
+ "infra_step": true,
+ "name": "jiri update"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "snapshot",
+ "[TMP_BASE]/jiri.snapshot"
+ ],
+ "infra_step": true,
+ "name": "jiri snapshot"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-spec",
+ "RECIPE_MODULE[infra::gsutil]/resources/gsutil.vpython",
+ "-u",
+ "[START_DIR]/cipd/gsutil/gsutil",
+ "-o",
+ "GSUtil:software_update_check_period=0",
+ "cp",
+ "[TMP_BASE]/jiri.snapshot",
+ "gs://fuchsia/jiri/snapshots/8ac5404b688b34f2d34d1c8a648413aca30b7a97"
+ ],
+ "infra_step": true,
+ "name": "upload jiri.snapshot",
+ "~followup_annotations": [
+ "@@@STEP_LINK@jiri.snapshot@https://storage.googleapis.com/fuchsia/jiri/snapshots/8ac5404b688b34f2d34d1c8a648413aca30b7a97@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/scripts/build-magenta.sh",
+ "-c",
+ "-t",
+ "x86_64"
+ ],
+ "name": "build magenta"
+ },
+ {
+ "cmd": [],
+ "name": "build fuchsia"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "[START_DIR]/cipd/goma/goma_ctl.py",
+ "restart"
+ ],
+ "env": {
+ "GOMA_CACHE_DIR": "[CACHE]/goma",
+ "GOMA_DEPS_CACHE_FILE": "goma_deps_cache",
+ "GOMA_SERVICE_ACCOUNT_JSON_FILE": "/creds/service_accounts/service-account-goma-client.json"
+ },
+ "infra_step": true,
+ "name": "build fuchsia.start_goma",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/packages/gn/gen.py",
+ "--target_cpu=x86-64",
+ "--modules=default",
+ "--with-dart-analysis",
+ "--goma=[START_DIR]/cipd/goma",
+ "--release",
+ "--lto=thin",
+ "--args",
+ "thinlto_cache_dir=\"[CACHE]/thinlto\""
+ ],
+ "name": "build fuchsia.gen",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "\nimport multiprocessing\nimport sys\n\njob_limit = 200\nif sys.platform.startswith('linux'):\n # Use 80 for linux not to load goma backend.\n job_limit = 80\n\ntry:\n jobs = min(job_limit, multiprocessing.cpu_count() * 10)\nexcept NotImplementedError:\n jobs = 50\n\nprint jobs\n"
+ ],
+ "name": "build fuchsia.calculate the number of recommended jobs",
+ "stdout": "/path/to/tmp/",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@import multiprocessing@@@",
+ "@@@STEP_LOG_LINE@python.inline@import sys@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@job_limit = 200@@@",
+ "@@@STEP_LOG_LINE@python.inline@if sys.platform.startswith('linux'):@@@",
+ "@@@STEP_LOG_LINE@python.inline@ # Use 80 for linux not to load goma backend.@@@",
+ "@@@STEP_LOG_LINE@python.inline@ job_limit = 80@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@try:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ jobs = min(job_limit, multiprocessing.cpu_count() * 10)@@@",
+ "@@@STEP_LOG_LINE@python.inline@except NotImplementedError:@@@",
+ "@@@STEP_LOG_LINE@python.inline@ jobs = 50@@@",
+ "@@@STEP_LOG_LINE@python.inline@@@@",
+ "@@@STEP_LOG_LINE@python.inline@print jobs@@@",
+ "@@@STEP_LOG_END@python.inline@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/buildtools/ninja",
+ "-C",
+ "[START_DIR]/out/release-x86-64",
+ "-j",
+ "50"
+ ],
+ "name": "build fuchsia.ninja",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "[START_DIR]/cipd/goma/goma_ctl.py",
+ "jsonstatus",
+ "[START_DIR]/cipd/goma/jsonstatus"
+ ],
+ "env": {
+ "GOMA_CACHE_DIR": "[CACHE]/goma",
+ "GOMA_DEPS_CACHE_FILE": "goma_deps_cache",
+ "GOMA_SERVICE_ACCOUNT_JSON_FILE": "/creds/service_accounts/service-account-goma-client.json"
+ },
+ "name": "build fuchsia.goma_jsonstatus",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "[START_DIR]/cipd/goma/goma_ctl.py",
+ "stat"
+ ],
+ "env": {
+ "GOMA_CACHE_DIR": "[CACHE]/goma",
+ "GOMA_DEPS_CACHE_FILE": "goma_deps_cache",
+ "GOMA_SERVICE_ACCOUNT_JSON_FILE": "/creds/service_accounts/service-account-goma-client.json"
+ },
+ "name": "build fuchsia.goma_stat",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "[START_DIR]/cipd/goma/goma_ctl.py",
+ "stop"
+ ],
+ "env": {
+ "GOMA_CACHE_DIR": "[CACHE]/goma",
+ "GOMA_DEPS_CACHE_FILE": "goma_deps_cache",
+ "GOMA_SERVICE_ACCOUNT_JSON_FILE": "/creds/service_accounts/service-account-goma-client.json"
+ },
+ "name": "build fuchsia.stop_goma",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@"
+ ]
+ },
+ {
+ "cmd": [],
+ "name": "ensure bsdtar"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd",
+ "-ensure-file",
+ "fuchsia/tools/bsdtar/linux-amd64 latest",
+ "-json-output",
+ "/path/to/tmp/json",
+ "-service-account-json",
+ "/creds/service_accounts/service-account-goma-client.json"
+ ],
+ "infra_step": true,
+ "name": "ensure bsdtar.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/bsdtar/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/bsdtar",
+ "-cf",
+ "[TMP_BASE]/fuchsia.tar.gz",
+ "-z",
+ "-C",
+ "[START_DIR]/out/build-magenta/build-magenta-pc-x86-64",
+ "bootdata.bin",
+ "magenta.elf",
+ "magenta.bin",
+ "bootloader/bootx64.efi",
+ "-C",
+ "[START_DIR]/out/release-x86-64",
+ "user.bootfs"
+ ],
+ "name": "tar fuchsia"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[infra::hash]/resources/hashutil.py",
+ "-a",
+ "sha1",
+ "[TMP_BASE]/fuchsia.tar.gz"
+ ],
+ "infra_step": true,
+ "name": "hash archive",
+ "stdout": "/path/to/tmp/"
+ },
+ {
+ "cmd": [
+ "vpython",
+ "-spec",
+ "RECIPE_MODULE[infra::gsutil]/resources/gsutil.vpython",
+ "-u",
+ "[START_DIR]/cipd/gsutil/gsutil",
+ "-o",
+ "GSUtil:software_update_check_period=0",
+ "cp",
+ "[TMP_BASE]/fuchsia.tar.gz",
+ "gs://fuchsia-archive/cd963da3f17c3acc611a9b9c1b272fcd6ae39909"
+ ],
+ "infra_step": true,
+ "name": "upload fuchsia.tar.gz",
+ "~followup_annotations": [
+ "@@@STEP_LINK@fuchsia.tar.gz@https://storage.cloud.google.com/fuchsia-archive/cd963da3f17c3acc611a9b9c1b272fcd6ae39909@@@"
+ ]
+ },
+ {
+ "name": "$result",
+ "recipe_result": null,
+ "status_code": 0
+ }
+]
\ No newline at end of file
diff --git a/recipes/fuchsia.py b/recipes/fuchsia.py
index cb371a7..cc7287e 100644
--- a/recipes/fuchsia.py
+++ b/recipes/fuchsia.py
@@ -41,8 +41,8 @@
'manifest': Property(kind=str, help='Jiri manifest to use'),
'remote': Property(kind=str, help='Remote manifest repository'),
'target': Property(kind=Enum(*TARGETS), help='Target to build'),
- 'build_type': Property(kind=Enum('debug', 'release'), help='The build type',
- default='debug'),
+ 'build_type': Property(kind=Enum('debug', 'release', 'thinlto', 'lto'),
+ help='The build type', default='debug'),
'modules': Property(kind=List(basestring), help='Packages to build',
default=['default']),
'boot_module': Property(kind=str,
@@ -99,7 +99,7 @@
yield
-def BuildFuchsia(api, release_build, target, gn_target, fuchsia_build_dir,
+def BuildFuchsia(api, build_type, target, gn_target, fuchsia_build_dir,
modules, boot_module, tests, use_goma, gn_args):
if tests and not boot_module:
boot_module = 'boot_test_runner'
@@ -118,9 +118,16 @@
if use_goma:
gen_cmd.append('--goma=%s' % api.goma.goma_dir)
- if release_build:
+ if build_type in ['release', 'lto', 'thinlto']:
gen_cmd.append('--release')
+ if build_type == 'lto':
+ gen_cmd.append('--lto=full')
+ elif build_type == 'thinlto':
+ gen_cmd.append('--lto=thin')
+ gn_args.append('thinlto_cache_dir=\"%s\"' %
+ str(api.path['cache'].join('thinlto')))
+
for arg in gn_args:
gen_cmd.append('--args')
gen_cmd.append(arg)
@@ -231,10 +238,13 @@
if target == 'arm64':
tests = None
- release_build = (build_type == 'release')
gn_target = {'arm64': 'aarch64', 'x86-64': 'x86-64'}[target]
fuchsia_out_dir = api.path['start_dir'].join('out')
- fuchsia_build_dir = fuchsia_out_dir.join('%s-%s' % (build_type, gn_target))
+ if build_type in ['release', 'lto', 'thinlto']:
+ build_dir = 'release'
+ else:
+ build_dir = 'debug'
+ fuchsia_build_dir = fuchsia_out_dir.join('%s-%s' % (build_dir, gn_target))
magenta_target = {
'arm64': 'magenta-qemu-arm64',
@@ -251,7 +261,7 @@
Checkout(api, patch_project, patch_ref, patch_gerrit_url, manifest, remote)
BuildMagenta(api, target)
- BuildFuchsia(api, release_build, target, gn_target, fuchsia_build_dir,
+ BuildFuchsia(api, build_type, target, gn_target, fuchsia_build_dir,
modules, boot_module, tests, use_goma, gn_args)
if tests:
@@ -311,6 +321,18 @@
target='x86-64',
build_type='release'
)
+ yield api.test('lto') + api.properties(
+ manifest='fuchsia',
+ remote='https://fuchsia.googlesource.com/manifest',
+ target='x86-64',
+ build_type='lto'
+ )
+ yield api.test('thinlto') + api.properties(
+ manifest='fuchsia',
+ remote='https://fuchsia.googlesource.com/manifest',
+ target='x86-64',
+ build_type='thinlto'
+ )
yield api.test('cq') + api.properties.tryserver(
gerrit_project='fuchsia',
patch_gerrit_url='fuchsia-review.googlesource.com',
diff --git a/recipes/magenta.expected/lto.json b/recipes/magenta.expected/lto.json
new file mode 100644
index 0000000..944a79b
--- /dev/null
+++ b/recipes/magenta.expected/lto.json
@@ -0,0 +1,236 @@
+[
+ {
+ "cmd": [],
+ "name": "ensure_jiri"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/jiri",
+ "-ensure-file",
+ "fuchsia/tools/jiri/linux-amd64 stable",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_jiri.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-stable----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/jiri/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "init",
+ "-cache",
+ "[CACHE]/git",
+ "-shared"
+ ],
+ "infra_step": true,
+ "name": "jiri init"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "import",
+ "magenta",
+ "https://fuchsia.googlesource.com/manifest"
+ ],
+ "infra_step": true,
+ "name": "jiri import"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "project",
+ "-clean"
+ ],
+ "infra_step": true,
+ "name": "jiri project clean"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "update",
+ "-autoupdate=false"
+ ],
+ "infra_step": true,
+ "name": "jiri update"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "project",
+ "-json-output",
+ "/path/to/tmp/json",
+ "magenta"
+ ],
+ "infra_step": true,
+ "name": "jiri project",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@[@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"branches\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"(HEAD detached at c22471f)\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"master\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ ], @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_branch\": \"\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"name\": \"magenta\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"path\": \"/path/to/repo\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"remote\": \"https://fuchsia.googlesource.com/repo\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"c22471f4e3f842ae18dd9adec82ed9eb78ed1127\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@]@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"c22471f4e3f842ae18dd9adec82ed9eb78ed1127\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[TMP_BASE]/magenta_tmp"
+ ],
+ "infra_step": true,
+ "name": "makedirs tmp"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "msleep 500\nruntests",
+ "[TMP_BASE]/magenta_tmp/autorun"
+ ],
+ "infra_step": true,
+ "name": "write autorun",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@autorun.sh@msleep 500@@@",
+ "@@@STEP_LOG_LINE@autorun.sh@runtests@@@",
+ "@@@STEP_LOG_END@autorun.sh@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "make",
+ "-j2",
+ "magenta-pc-x86-64",
+ "USE_LTO=true",
+ "USE_THINLTO=false"
+ ],
+ "cwd": "[START_DIR]/magenta",
+ "env": {
+ "USER_AUTORUN": "[TMP_BASE]/magenta_tmp/autorun"
+ },
+ "name": "build"
+ },
+ {
+ "cmd": [],
+ "name": "ensure_qemu"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/qemu",
+ "-ensure-file",
+ "fuchsia/tools/qemu/linux-amd64 latest",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_qemu.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/qemu/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "RECIPE_MODULE[infra::qemu]/resources/qemu.py",
+ "run",
+ "--executable",
+ "[START_DIR]/cipd/qemu/bin/qemu-system-x86_64",
+ "--memory",
+ "2048",
+ "--smp",
+ "4",
+ "--arch",
+ "x86_64",
+ "--initrd",
+ "[START_DIR]/magenta/build-magenta-pc-x86-64-lto/bootdata.bin",
+ "--cmdline",
+ "userboot=bin/core-tests",
+ "--shutdown_pattern",
+ "CASES: +(\\d+) +SUCCESS: +(\\d+) +FAILED: +(?P<failed>\\d+)",
+ "[START_DIR]/magenta/build-magenta-pc-x86-64-lto/magenta.bin"
+ ],
+ "name": "run core tests",
+ "stdout": "/path/to/tmp/",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@qemu.stdout@CASES: 1 SUCCESS: 1 FAILED: 0@@@",
+ "@@@STEP_LOG_END@qemu.stdout@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "RECIPE_MODULE[infra::qemu]/resources/qemu.py",
+ "run",
+ "--executable",
+ "[START_DIR]/cipd/qemu/bin/qemu-system-x86_64",
+ "--memory",
+ "2048",
+ "--smp",
+ "4",
+ "--arch",
+ "x86_64",
+ "--initrd",
+ "[START_DIR]/magenta/build-magenta-pc-x86-64-lto/bootdata.bin",
+ "--shutdown_pattern",
+ "SUMMARY: Ran (\\d+) tests: (?P<failed>\\d+) failed",
+ "[START_DIR]/magenta/build-magenta-pc-x86-64-lto/magenta.bin"
+ ],
+ "name": "run booted tests",
+ "stdout": "/path/to/tmp/",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@qemu.stdout@SUMMARY: Ran 2 tests: 0 failed@@@",
+ "@@@STEP_LOG_END@qemu.stdout@@@"
+ ]
+ },
+ {
+ "name": "$result",
+ "recipe_result": {
+ "got_revision": "c22471f4e3f842ae18dd9adec82ed9eb78ed1127"
+ },
+ "status_code": 0
+ }
+]
\ No newline at end of file
diff --git a/recipes/magenta.expected/thinlto.json b/recipes/magenta.expected/thinlto.json
new file mode 100644
index 0000000..37f8083
--- /dev/null
+++ b/recipes/magenta.expected/thinlto.json
@@ -0,0 +1,237 @@
+[
+ {
+ "cmd": [],
+ "name": "ensure_jiri"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/jiri",
+ "-ensure-file",
+ "fuchsia/tools/jiri/linux-amd64 stable",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_jiri.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-stable----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/jiri/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "init",
+ "-cache",
+ "[CACHE]/git",
+ "-shared"
+ ],
+ "infra_step": true,
+ "name": "jiri init"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "import",
+ "magenta",
+ "https://fuchsia.googlesource.com/manifest"
+ ],
+ "infra_step": true,
+ "name": "jiri import"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "project",
+ "-clean"
+ ],
+ "infra_step": true,
+ "name": "jiri project clean"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "update",
+ "-autoupdate=false"
+ ],
+ "infra_step": true,
+ "name": "jiri update"
+ },
+ {
+ "cmd": [
+ "[START_DIR]/cipd/jiri/jiri",
+ "project",
+ "-json-output",
+ "/path/to/tmp/json",
+ "magenta"
+ ],
+ "infra_step": true,
+ "name": "jiri project",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@json.output@[@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"branches\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"(HEAD detached at c22471f)\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"master\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ ], @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"current_branch\": \"\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"name\": \"magenta\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"path\": \"/path/to/repo\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"remote\": \"https://fuchsia.googlesource.com/repo\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"revision\": \"c22471f4e3f842ae18dd9adec82ed9eb78ed1127\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@]@@@",
+ "@@@STEP_LOG_END@json.output@@@",
+ "@@@SET_BUILD_PROPERTY@got_revision@\"c22471f4e3f842ae18dd9adec82ed9eb78ed1127\"@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "ensure-directory",
+ "--mode",
+ "0777",
+ "[TMP_BASE]/magenta_tmp"
+ ],
+ "infra_step": true,
+ "name": "makedirs tmp"
+ },
+ {
+ "cmd": [
+ "python",
+ "-u",
+ "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
+ "--json-output",
+ "/path/to/tmp/json",
+ "copy",
+ "msleep 500\nruntests",
+ "[TMP_BASE]/magenta_tmp/autorun"
+ ],
+ "infra_step": true,
+ "name": "write autorun",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@autorun.sh@msleep 500@@@",
+ "@@@STEP_LOG_LINE@autorun.sh@runtests@@@",
+ "@@@STEP_LOG_END@autorun.sh@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "make",
+ "-j2",
+ "magenta-pc-x86-64",
+ "USE_LTO=true",
+ "USE_THINLTO=true",
+ "THINLTO_CACHE_DIR=[CACHE]/thinlto"
+ ],
+ "cwd": "[START_DIR]/magenta",
+ "env": {
+ "USER_AUTORUN": "[TMP_BASE]/magenta_tmp/autorun"
+ },
+ "name": "build"
+ },
+ {
+ "cmd": [],
+ "name": "ensure_qemu"
+ },
+ {
+ "cmd": [
+ "cipd",
+ "ensure",
+ "-root",
+ "[START_DIR]/cipd/qemu",
+ "-ensure-file",
+ "fuchsia/tools/qemu/linux-amd64 latest",
+ "-json-output",
+ "/path/to/tmp/json"
+ ],
+ "infra_step": true,
+ "name": "ensure_qemu.ensure_installed",
+ "~followup_annotations": [
+ "@@@STEP_NEST_LEVEL@1@@@",
+ "@@@STEP_LOG_LINE@json.output@{@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"result\": [@@@",
+ "@@@STEP_LOG_LINE@json.output@ {@@@",
+ "@@@STEP_LOG_LINE@json.output@ \"instance_id\": \"resolved-instance_id-of-latest----------\", @@@",
+ "@@@STEP_LOG_LINE@json.output@ \"package\": \"fuchsia/tools/qemu/linux-amd64\"@@@",
+ "@@@STEP_LOG_LINE@json.output@ }@@@",
+ "@@@STEP_LOG_LINE@json.output@ ]@@@",
+ "@@@STEP_LOG_LINE@json.output@}@@@",
+ "@@@STEP_LOG_END@json.output@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "RECIPE_MODULE[infra::qemu]/resources/qemu.py",
+ "run",
+ "--executable",
+ "[START_DIR]/cipd/qemu/bin/qemu-system-x86_64",
+ "--memory",
+ "2048",
+ "--smp",
+ "4",
+ "--arch",
+ "x86_64",
+ "--initrd",
+ "[START_DIR]/magenta/build-magenta-pc-x86-64-thinlto/bootdata.bin",
+ "--cmdline",
+ "userboot=bin/core-tests",
+ "--shutdown_pattern",
+ "CASES: +(\\d+) +SUCCESS: +(\\d+) +FAILED: +(?P<failed>\\d+)",
+ "[START_DIR]/magenta/build-magenta-pc-x86-64-thinlto/magenta.bin"
+ ],
+ "name": "run core tests",
+ "stdout": "/path/to/tmp/",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@qemu.stdout@CASES: 1 SUCCESS: 1 FAILED: 0@@@",
+ "@@@STEP_LOG_END@qemu.stdout@@@"
+ ]
+ },
+ {
+ "cmd": [
+ "RECIPE_MODULE[infra::qemu]/resources/qemu.py",
+ "run",
+ "--executable",
+ "[START_DIR]/cipd/qemu/bin/qemu-system-x86_64",
+ "--memory",
+ "2048",
+ "--smp",
+ "4",
+ "--arch",
+ "x86_64",
+ "--initrd",
+ "[START_DIR]/magenta/build-magenta-pc-x86-64-thinlto/bootdata.bin",
+ "--shutdown_pattern",
+ "SUMMARY: Ran (\\d+) tests: (?P<failed>\\d+) failed",
+ "[START_DIR]/magenta/build-magenta-pc-x86-64-thinlto/magenta.bin"
+ ],
+ "name": "run booted tests",
+ "stdout": "/path/to/tmp/",
+ "~followup_annotations": [
+ "@@@STEP_LOG_LINE@qemu.stdout@SUMMARY: Ran 2 tests: 0 failed@@@",
+ "@@@STEP_LOG_END@qemu.stdout@@@"
+ ]
+ },
+ {
+ "name": "$result",
+ "recipe_result": {
+ "got_revision": "c22471f4e3f842ae18dd9adec82ed9eb78ed1127"
+ },
+ "status_code": 0
+ }
+]
\ No newline at end of file
diff --git a/recipes/magenta.py b/recipes/magenta.py
index 0a576f1..7043220 100644
--- a/recipes/magenta.py
+++ b/recipes/magenta.py
@@ -38,6 +38,8 @@
'gcc': ([], ''),
'clang': (['USE_CLANG=true'], '-clang'),
'asan': (['USE_ASAN=true'], '-asan'),
+ 'lto': (['USE_LTO=true', 'USE_THINLTO=false'], '-lto'),
+ 'thinlto': (['USE_LTO=true', 'USE_THINLTO=true'], '-thinlto'),
}
# Test summary from the core tests, which run directly from userboot.
@@ -118,6 +120,10 @@
target
] + tc_args
+ if toolchain == 'thinlto':
+ build_args.append('THINLTO_CACHE_DIR=' +
+ str(api.path['cache'].join('thinlto')))
+
with api.context(cwd=api.path['start_dir'].join('magenta'),
env={'USER_AUTORUN': path}):
api.step('build', build_args)
@@ -175,6 +181,20 @@
toolchain='asan') +
api.step_data('run booted tests',
api.raw_io.stream_output('SUMMARY: Ran 2 tests: 0 failed')))
+ yield (api.test('lto') +
+ api.properties(manifest='magenta',
+ remote='https://fuchsia.googlesource.com/manifest',
+ target='magenta-pc-x86-64',
+ toolchain='lto') +
+ api.step_data('run booted tests',
+ api.raw_io.stream_output('SUMMARY: Ran 2 tests: 0 failed')))
+ yield (api.test('thinlto') +
+ api.properties(manifest='magenta',
+ remote='https://fuchsia.googlesource.com/manifest',
+ target='magenta-pc-x86-64',
+ toolchain='thinlto') +
+ api.step_data('run booted tests',
+ api.raw_io.stream_output('SUMMARY: Ran 2 tests: 0 failed')))
yield (api.test('cq_try') +
api.properties.tryserver(
gerrit_project='magenta',