aboutsummaryrefslogtreecommitdiff
path: root/deprecated/automation/clients/helper/crosstool.py
diff options
context:
space:
mode:
authorTiancong Wang <tcwang@google.com>2020-02-13 21:08:49 +0000
committerTiancong Wang <tcwang@google.com>2020-02-13 21:08:49 +0000
commitb75f321fc8978b92ce3db6886ccb966768f0c7a8 (patch)
tree35fa0fbaeaaddd9cc2a126a05eee3527b51e83a8 /deprecated/automation/clients/helper/crosstool.py
parentcddd960b0ba2eb62c372c0d3176c75f0bd05d5e8 (diff)
parente617e3393dd24003aa976ece5050bb291070041c (diff)
downloadtoolchain-utils-b75f321fc8978b92ce3db6886ccb966768f0c7a8.tar.gz
Merging 18 commit(s) from Chromium's toolchain-utils am: 0ae38c8498 am: 2a19d36a82 am: e617e3393dr_aml_301500702android-mainline-12.0.0_r55android-mainline-11.0.0_r9android-mainline-11.0.0_r8android-mainline-11.0.0_r7android-mainline-11.0.0_r6android-mainline-11.0.0_r5android-mainline-11.0.0_r45android-mainline-11.0.0_r44android-mainline-11.0.0_r43android-mainline-11.0.0_r42android-mainline-11.0.0_r41android-mainline-11.0.0_r40android-mainline-11.0.0_r4android-mainline-11.0.0_r39android-mainline-11.0.0_r38android-mainline-11.0.0_r37android-mainline-11.0.0_r36android-mainline-11.0.0_r35android-mainline-11.0.0_r34android-mainline-11.0.0_r33android-mainline-11.0.0_r32android-mainline-11.0.0_r31android-mainline-11.0.0_r30android-mainline-11.0.0_r3android-mainline-11.0.0_r29android-mainline-11.0.0_r28android-mainline-11.0.0_r27android-mainline-11.0.0_r26android-mainline-11.0.0_r25android-mainline-11.0.0_r24android-mainline-11.0.0_r23android-mainline-11.0.0_r22android-mainline-11.0.0_r21android-mainline-11.0.0_r20android-mainline-11.0.0_r2android-mainline-11.0.0_r19android-mainline-11.0.0_r18android-mainline-11.0.0_r17android-mainline-11.0.0_r16android-mainline-11.0.0_r15android-mainline-11.0.0_r14android-mainline-11.0.0_r13android-mainline-11.0.0_r12android-mainline-11.0.0_r10android-mainline-11.0.0_r1android-11.0.0_r48android-11.0.0_r47android-11.0.0_r46android-11.0.0_r45android-11.0.0_r44android-11.0.0_r43android-11.0.0_r42android-11.0.0_r41android-11.0.0_r40android-11.0.0_r39android-11.0.0_r38android-11.0.0_r37android-11.0.0_r36android-11.0.0_r35android-11.0.0_r34android-11.0.0_r33android-11.0.0_r32android-11.0.0_r31android-11.0.0_r30android-11.0.0_r29android-11.0.0_r28android-11.0.0_r27android-11.0.0_r26android-11.0.0_r24android-11.0.0_r23android-11.0.0_r22android-11.0.0_r21android-11.0.0_r20android-11.0.0_r19android-11.0.0_r18android-11.0.0_r16android11-qpr3-s1-releaseandroid11-qpr3-releaseandroid11-qpr2-releaseandroid11-qpr1-s2-releaseandroid11-qpr1-s1-releaseandroid11-qpr1-releaseandroid11-qpr1-d-s1-releaseandroid11-qpr1-d-releaseandroid11-qpr1-c-releaseandroid11-mainline-tethering-releaseandroid11-mainline-sparse-2021-jan-releaseandroid11-mainline-sparse-2020-dec-releaseandroid11-mainline-releaseandroid11-mainline-permission-releaseandroid11-mainline-os-statsd-releaseandroid11-mainline-networkstack-releaseandroid11-mainline-media-swcodec-releaseandroid11-mainline-media-releaseandroid11-mainline-extservices-releaseandroid11-mainline-documentsui-releaseandroid11-mainline-conscrypt-releaseandroid11-mainline-cellbroadcast-releaseandroid11-mainline-captiveportallogin-releaseandroid11-devandroid11-d2-releaseandroid11-d1-b-release
Change-Id: I3f25c7ee034b2e20e37ed941b8eae24eec7043eb
Diffstat (limited to 'deprecated/automation/clients/helper/crosstool.py')
-rw-r--r--deprecated/automation/clients/helper/crosstool.py168
1 files changed, 168 insertions, 0 deletions
diff --git a/deprecated/automation/clients/helper/crosstool.py b/deprecated/automation/clients/helper/crosstool.py
new file mode 100644
index 00000000..80154b25
--- /dev/null
+++ b/deprecated/automation/clients/helper/crosstool.py
@@ -0,0 +1,168 @@
+# Copyright 2011 Google Inc. All Rights Reserved.
+
+__author__ = 'kbaclawski@google.com (Krystian Baclawski)'
+
+import os.path
+import time
+
+from automation.clients.helper import jobs
+from automation.clients.helper import perforce
+from automation.common import command as cmd
+from automation.common import job
+
+
+class JobsFactory(object):
+
+ def __init__(self):
+ self.commands = CommandsFactory()
+
+ def CheckoutCrosstool(self, target):
+ command = self.commands.CheckoutCrosstool()
+ new_job = jobs.CreateLinuxJob('CheckoutCrosstool(%s)' % target, command)
+ checkout_dir_dep = job.FolderDependency(new_job,
+ CommandsFactory.CHECKOUT_DIR)
+ manifests_dir_dep = job.FolderDependency(
+ new_job, os.path.join(self.commands.buildit_path, target), 'manifests')
+ return new_job, checkout_dir_dep, manifests_dir_dep
+
+ def BuildRelease(self, checkout_dir, target):
+ command = self.commands.BuildRelease(target)
+ new_job = jobs.CreateLinuxJob('BuildRelease(%s)' % target, command)
+ new_job.DependsOnFolder(checkout_dir)
+ build_tree_dep = job.FolderDependency(new_job,
+ self.commands.buildit_work_dir_path)
+ return new_job, build_tree_dep
+
+ def RunTests(self, checkout_dir, build_tree_dir, target, board, component):
+ command = self.commands.RunTests(target, board, component)
+ new_job = jobs.CreateLinuxJob('RunTests(%s, %s, %s)' %
+ (target, component, board), command)
+ new_job.DependsOnFolder(checkout_dir)
+ new_job.DependsOnFolder(build_tree_dir)
+ testrun_dir_dep = job.FolderDependency(
+ new_job, self.commands.dejagnu_output_path, board)
+ return new_job, testrun_dir_dep
+
+ def GenerateReport(self, testrun_dirs, manifests_dir, target, boards):
+ command = self.commands.GenerateReport(boards)
+ new_job = jobs.CreateLinuxJob('GenerateReport(%s)' % target, command)
+ new_job.DependsOnFolder(manifests_dir)
+ for testrun_dir in testrun_dirs:
+ new_job.DependsOnFolder(testrun_dir)
+ return new_job
+
+
+class CommandsFactory(object):
+ CHECKOUT_DIR = 'crosstool-checkout-dir'
+
+ def __init__(self):
+ self.buildit_path = os.path.join(self.CHECKOUT_DIR, 'gcctools', 'crosstool',
+ 'v15')
+
+ self.buildit_work_dir = 'buildit-tmp'
+ self.buildit_work_dir_path = os.path.join('$JOB_TMP', self.buildit_work_dir)
+ self.dejagnu_output_path = os.path.join(self.buildit_work_dir_path,
+ 'dejagnu-output')
+
+ paths = {
+ 'gcctools': [
+ 'crosstool/v15/...', 'scripts/...'
+ ],
+ 'gcctools/google_vendor_src_branch': [
+ 'binutils/binutils-2.21/...', 'gdb/gdb-7.2.x/...',
+ 'zlib/zlib-1.2.3/...'
+ ],
+ 'gcctools/vendor_src': [
+ 'gcc/google/gcc-4_6/...'
+ ]
+ }
+
+ p4view = perforce.View('depot2',
+ perforce.PathMapping.ListFromPathDict(paths))
+
+ self.p4client = perforce.CommandsFactory(self.CHECKOUT_DIR, p4view)
+
+ def CheckoutCrosstool(self):
+ p4client = self.p4client
+
+ return p4client.SetupAndDo(p4client.Sync(),
+ p4client.SaveCurrentCLNumber('CLNUM'),
+ p4client.Remove())
+
+ def BuildRelease(self, target):
+ clnum_path = os.path.join('$JOB_TMP', self.CHECKOUT_DIR, 'CLNUM')
+
+ toolchain_root = os.path.join('/google/data/rw/projects/toolchains', target,
+ 'unstable')
+ toolchain_path = os.path.join(toolchain_root, '${CLNUM}')
+
+ build_toolchain = cmd.Wrapper(
+ cmd.Chain(
+ cmd.MakeDir(toolchain_path),
+ cmd.Shell('buildit',
+ '--keep-work-dir',
+ '--build-type=release',
+ '--work-dir=%s' % self.buildit_work_dir_path,
+ '--results-dir=%s' % toolchain_path,
+ '--force-release=%s' % '${CLNUM}',
+ target,
+ path='.')),
+ cwd=self.buildit_path,
+ umask='0022',
+ env={'CLNUM': '$(< %s)' % clnum_path})
+
+ # remove all but 10 most recent directories
+ remove_old_toolchains_from_x20 = cmd.Wrapper(
+ cmd.Pipe(
+ cmd.Shell('ls', '-1', '-r'), cmd.Shell('sed', '-e', '1,10d'),
+ cmd.Shell('xargs', 'rm', '-r', '-f')),
+ cwd=toolchain_root)
+
+ return cmd.Chain(build_toolchain, remove_old_toolchains_from_x20)
+
+ def RunTests(self, target, board, component='gcc'):
+ dejagnu_flags = ['--outdir=%s' % self.dejagnu_output_path,
+ '--target_board=%s' % board]
+
+ # Look for {pandaboard,qemu}.exp files in
+ # //depot/google3/experimental/users/kbaclawski/dejagnu/boards
+
+ site_exp_file = os.path.join('/google/src/head/depot/google3',
+ 'experimental/users/kbaclawski',
+ 'dejagnu/site.exp')
+
+ build_dir_path = os.path.join(target, 'rpmbuild/BUILD/crosstool*-0.0',
+ 'build-%s' % component)
+
+ run_dejagnu = cmd.Wrapper(
+ cmd.Chain(
+ cmd.MakeDir(self.dejagnu_output_path),
+ cmd.Shell('make',
+ 'check',
+ '-k',
+ '-j $(grep -c processor /proc/cpuinfo)',
+ 'RUNTESTFLAGS="%s"' % ' '.join(dejagnu_flags),
+ 'DEJAGNU="%s"' % site_exp_file,
+ ignore_error=True)),
+ cwd=os.path.join(self.buildit_work_dir_path, build_dir_path),
+ env={'REMOTE_TMPDIR': 'job-$JOB_ID'})
+
+ save_results = cmd.Copy(self.dejagnu_output_path,
+ to_dir='$JOB_TMP/results',
+ recursive=True)
+
+ return cmd.Chain(run_dejagnu, save_results)
+
+ def GenerateReport(self, boards):
+ sumfiles = [os.path.join('$JOB_TMP', board, '*.sum') for board in boards]
+
+ return cmd.Wrapper(
+ cmd.Shell('dejagnu.sh',
+ 'report',
+ '-m',
+ '$JOB_TMP/manifests/*.xfail',
+ '-o',
+ '$JOB_TMP/results/report.html',
+ *sumfiles,
+ path='.'),
+ cwd='$HOME/automation/clients/report')