summaryrefslogtreecommitdiffstats
path: root/native_client_sdk/src
diff options
context:
space:
mode:
authorbinji@chromium.org <binji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-24 22:47:00 +0000
committerbinji@chromium.org <binji@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-24 22:47:00 +0000
commit21853d03e094cc1c1c9fe1cdc4f5f5780a216fbc (patch)
tree0fbea275469e852d352985a73b289089f8e4f406 /native_client_sdk/src
parenta52c73182eeb280d3409130d1094fc65d377f45c (diff)
downloadchromium_src-21853d03e094cc1c1c9fe1cdc4f5f5780a216fbc.zip
chromium_src-21853d03e094cc1c1c9fe1cdc4f5f5780a216fbc.tar.gz
chromium_src-21853d03e094cc1c1c9fe1cdc4f5f5780a216fbc.tar.bz2
[NaCl SDK] Clean up build_sdk.py
BUG=none TEST=none R=noelallen@chromium.org NOTRY=true Review URL: https://chromiumcodereview.appspot.com/10808103 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148233 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'native_client_sdk/src')
-rwxr-xr-xnative_client_sdk/src/build_tools/build_sdk.py585
1 files changed, 310 insertions, 275 deletions
diff --git a/native_client_sdk/src/build_tools/build_sdk.py b/native_client_sdk/src/build_tools/build_sdk.py
index a376162..6a00e6b 100755
--- a/native_client_sdk/src/build_tools/build_sdk.py
+++ b/native_client_sdk/src/build_tools/build_sdk.py
@@ -116,11 +116,13 @@ def GetToolchainNaClLib(tcname, tcpath, arch, xarch):
return os.path.join(tcpath, 'x86_64-nacl', 'lib')
buildbot_common.ErrorExit('Unknown architecture.')
+
def GetPNaClNativeLib(tcpath, arch):
if arch not in ['arm', 'x86-32', 'x86-64']:
buildbot_common.ErrorExit('Unknown architecture %s.' % arch)
return os.path.join(tcpath, 'lib-' + arch)
+
def GetBuildArgs(tcname, tcpath, outdir, arch, xarch=None):
"""Return list of scons build arguments to generate user libraries."""
scons = GetScons()
@@ -141,6 +143,92 @@ def GetBuildArgs(tcname, tcpath, outdir, arch, xarch=None):
return args
+def BuildStepBuildToolsTests():
+ buildbot_common.BuildStep('Run build_tools tests')
+ buildbot_common.Run([sys.executable,
+ os.path.join(SDK_SRC_DIR, 'build_tools', 'tests', 'test_all.py')])
+
+
+def BuildStepDownloadToolchains(platform):
+ buildbot_common.BuildStep('Rerun hooks to get toolchains')
+ buildbot_common.Run(['gclient', 'runhooks'],
+ cwd=SRC_DIR, shell=(platform=='win'))
+
+
+def BuildStepCleanPepperDirs(pepperdir, pepperdir_old):
+ buildbot_common.BuildStep('Clean Pepper Dirs')
+ buildbot_common.RemoveDir(pepperdir_old)
+ buildbot_common.RemoveDir(pepperdir)
+ buildbot_common.MakeDir(pepperdir)
+
+
+def BuildStepMakePepperDirs(pepperdir, subdirs):
+ for subdir in subdirs:
+ buildbot_common.MakeDir(os.path.join(pepperdir, subdir))
+
+
+def BuildStepCopyTextFiles(pepperdir, pepper_ver, revision):
+ buildbot_common.BuildStep('Add Text Files')
+ files = ['AUTHORS', 'COPYING', 'LICENSE', 'NOTICE']
+ files = [os.path.join(SDK_SRC_DIR, filename) for filename in files]
+ oshelpers.Copy(['-v'] + files + [pepperdir])
+
+ # Replace a few placeholders in README
+ readme_text = open(os.path.join(SDK_SRC_DIR, 'README'), 'rt').read()
+ readme_text = readme_text.replace('${VERSION}', pepper_ver)
+ readme_text = readme_text.replace('${REVISION}', revision)
+
+ # Year/Month/Day Hour:Minute:Second
+ time_format = '%Y/%m/%d %H:%M:%S'
+ readme_text = readme_text.replace('${DATE}',
+ datetime.datetime.now().strftime(time_format))
+
+ open(os.path.join(pepperdir, 'README'), 'wt').write(readme_text)
+
+
+def BuildStepUntarToolchains(pepperdir, platform, arch, toolchains):
+ buildbot_common.BuildStep('Untar Toolchains')
+ tcname = platform + '_' + arch
+ tmpdir = os.path.join(SRC_DIR, 'out', 'tc_temp')
+ buildbot_common.RemoveDir(tmpdir)
+ buildbot_common.MakeDir(tmpdir)
+
+ if 'newlib' in toolchains:
+ # Untar the newlib toolchains
+ tarfile = GetNewlibToolchain(platform, arch)
+ buildbot_common.Run([sys.executable, CYGTAR, '-C', tmpdir, '-xf', tarfile],
+ cwd=NACL_DIR)
+
+ # Then rename/move it to the pepper toolchain directory
+ srcdir = os.path.join(tmpdir, 'sdk', 'nacl-sdk')
+ newlibdir = os.path.join(pepperdir, 'toolchain', tcname + '_newlib')
+ buildbot_common.Move(srcdir, newlibdir)
+
+ if 'glibc' in toolchains:
+ # Untar the glibc toolchains
+ tarfile = GetGlibcToolchain(platform, arch)
+ buildbot_common.Run([sys.executable, CYGTAR, '-C', tmpdir, '-xf', tarfile],
+ cwd=NACL_DIR)
+
+ # Then rename/move it to the pepper toolchain directory
+ srcdir = os.path.join(tmpdir, 'toolchain', tcname)
+ glibcdir = os.path.join(pepperdir, 'toolchain', tcname + '_glibc')
+ buildbot_common.Move(srcdir, glibcdir)
+
+ # Untar the pnacl toolchains
+ if 'pnacl' in toolchains:
+ tmpdir = os.path.join(tmpdir, 'pnacl')
+ buildbot_common.RemoveDir(tmpdir)
+ buildbot_common.MakeDir(tmpdir)
+ tarfile = GetPNaClToolchain(platform, arch)
+ buildbot_common.Run([sys.executable, CYGTAR, '-C', tmpdir, '-xf', tarfile],
+ cwd=NACL_DIR)
+
+ # Then rename/move it to the pepper toolchain directory
+ pnacldir = os.path.join(pepperdir, 'toolchain', tcname + '_pnacl')
+ buildbot_common.Move(tmpdir, pnacldir)
+
+
HEADER_MAP = {
'newlib': {
'pthread.h': 'src/untrusted/pthread/pthread.h',
@@ -248,50 +336,7 @@ def InstallHeaders(tc_dst_inc, pepper_ver, tc_name):
os.path.join(tc_dst_inc, 'ppapi'))
-def UntarToolchains(pepperdir, platform, arch, toolchains):
- buildbot_common.BuildStep('Untar Toolchains')
- tcname = platform + '_' + arch
- tmpdir = os.path.join(SRC_DIR, 'out', 'tc_temp')
- buildbot_common.RemoveDir(tmpdir)
- buildbot_common.MakeDir(tmpdir)
-
- if 'newlib' in toolchains:
- # Untar the newlib toolchains
- tarfile = GetNewlibToolchain(platform, arch)
- buildbot_common.Run([sys.executable, CYGTAR, '-C', tmpdir, '-xf', tarfile],
- cwd=NACL_DIR)
-
- # Then rename/move it to the pepper toolchain directory
- srcdir = os.path.join(tmpdir, 'sdk', 'nacl-sdk')
- newlibdir = os.path.join(pepperdir, 'toolchain', tcname + '_newlib')
- buildbot_common.Move(srcdir, newlibdir)
-
- if 'glibc' in toolchains:
- # Untar the glibc toolchains
- tarfile = GetGlibcToolchain(platform, arch)
- buildbot_common.Run([sys.executable, CYGTAR, '-C', tmpdir, '-xf', tarfile],
- cwd=NACL_DIR)
-
- # Then rename/move it to the pepper toolchain directory
- srcdir = os.path.join(tmpdir, 'toolchain', tcname)
- glibcdir = os.path.join(pepperdir, 'toolchain', tcname + '_glibc')
- buildbot_common.Move(srcdir, glibcdir)
-
- # Untar the pnacl toolchains
- if 'pnacl' in toolchains:
- tmpdir = os.path.join(tmpdir, 'pnacl')
- buildbot_common.RemoveDir(tmpdir)
- buildbot_common.MakeDir(tmpdir)
- tarfile = GetPNaClToolchain(platform, arch)
- buildbot_common.Run([sys.executable, CYGTAR, '-C', tmpdir, '-xf', tarfile],
- cwd=NACL_DIR)
-
- # Then rename/move it to the pepper toolchain directory
- pnacldir = os.path.join(pepperdir, 'toolchain', tcname + '_pnacl')
- buildbot_common.Move(tmpdir, pnacldir)
-
-
-def BuildToolchains(pepperdir, platform, arch, pepper_ver, toolchains):
+def BuildStepBuildToolchains(pepperdir, platform, arch, pepper_ver, toolchains):
buildbot_common.BuildStep('SDK Items')
tcname = platform + '_' + arch
@@ -342,6 +387,24 @@ def BuildToolchains(pepperdir, platform, arch, pepper_ver, toolchains):
else:
buildbot_common.ErrorExit('Missing arch %s' % arch)
+
+def BuildStepCopyBuildHelpers(pepperdir, platform):
+ buildbot_common.BuildStep('Copy build helpers')
+ buildbot_common.CopyDir(os.path.join(SDK_SRC_DIR, 'tools', '*.py'),
+ os.path.join(pepperdir, 'tools'))
+ if platform == 'win':
+ buildbot_common.BuildStep('Add MAKE')
+ http_download.HttpDownload(GSTORE + MAKE,
+ os.path.join(pepperdir, 'tools' ,'make.exe'))
+ rename_list = ['ncval_x86_32', 'ncval_x86_64',
+ 'sel_ldr_x86_32', 'sel_ldr_x86_64']
+ tools = os.path.join(pepperdir, 'tools')
+ for name in rename_list:
+ src = os.path.join(pepperdir, 'tools', name)
+ dst = os.path.join(pepperdir, 'tools', name + '.exe')
+ buildbot_common.Move(src, dst)
+
+
EXAMPLE_LIST = [
'debugging',
'file_histogram',
@@ -377,7 +440,7 @@ LIB_DICT = {
'win': ['x86_32']
}
-def CopyExamples(pepperdir, toolchains):
+def BuildStepCopyExamples(pepperdir, toolchains):
buildbot_common.BuildStep('Copy examples')
if not os.path.exists(os.path.join(pepperdir, 'tools')):
@@ -465,6 +528,165 @@ def GetWindowsEnvironment():
return dict(line.split('=') for line in stdout.split('\r\n')[:-1])
+def BuildStepBuildLibraries(pepperdir, platform):
+ buildbot_common.BuildStep('Build Libraries')
+ src_dir = os.path.join(pepperdir, 'src')
+ makefile = os.path.join(src_dir, 'Makefile')
+ if os.path.isfile(makefile):
+ print "\n\nMake: " + src_dir
+ if platform == 'win':
+ # We need to modify the environment to build host on Windows.
+ env = GetWindowsEnvironment()
+ else:
+ env = os.environ
+
+ buildbot_common.Run(['make', '-j8'],
+ cwd=os.path.abspath(src_dir), shell=True, env=env)
+ # Clean to remove temporary files but keep the built libraries.
+ buildbot_common.Run(['make', '-j8', 'clean'],
+ cwd=os.path.abspath(src_dir), shell=True)
+
+
+def BuildStepTarBundle(pepper_ver, tarfile):
+ buildbot_common.BuildStep('Tar Pepper Bundle')
+ buildbot_common.MakeDir(os.path.dirname(tarfile))
+ buildbot_common.Run([sys.executable, CYGTAR, '-C', OUT_DIR, '-cjf', tarfile,
+ 'pepper_' + pepper_ver], cwd=NACL_DIR)
+
+
+def GetManifestBundle(pepper_ver, revision, tarfile, archive_url):
+ with open(tarfile, 'rb') as tarfile_stream:
+ archive_sha1, archive_size = manifest_util.DownloadAndComputeHash(
+ tarfile_stream)
+
+ archive = manifest_util.Archive(manifest_util.GetHostOS())
+ archive.url = archive_url
+ archive.size = archive_size
+ archive.checksum = archive_sha1
+
+ bundle = manifest_util.Bundle('pepper_' + pepper_ver)
+ bundle.revision = int(revision)
+ bundle.repath = 'pepper_' + pepper_ver
+ bundle.version = int(pepper_ver)
+ bundle.description = 'Chrome %s bundle, revision %s' % (
+ pepper_ver, revision),
+ bundle.stability = 'dev'
+ bundle.recommended = 'no'
+ bundle.archives = [archive]
+ return bundle
+
+
+def BuildStepTestUpdater(platform, pepper_ver, revision, tarfile):
+ tarname = os.path.basename(tarfile)
+ server = None
+ try:
+ buildbot_common.BuildStep('Run local server')
+ server = test_server.LocalHTTPServer(SERVER_DIR)
+
+ buildbot_common.BuildStep('Generate manifest')
+ bundle = GetManifestBundle(pepper_ver, revision, tarfile,
+ server.GetURL(tarname))
+
+ manifest = manifest_util.SDKManifest()
+ manifest.SetBundle(bundle)
+ manifest_name = 'naclsdk_manifest2.json'
+ with open(os.path.join(SERVER_DIR, manifest_name), 'wb') as \
+ manifest_stream:
+ manifest_stream.write(manifest.GetDataAsString())
+
+ # use newly built sdk updater to pull this bundle
+ buildbot_common.BuildStep('Update from local server')
+ naclsdk_sh = os.path.join(OUT_DIR, 'nacl_sdk', 'naclsdk')
+ if platform == 'win':
+ naclsdk_sh += '.bat'
+ buildbot_common.Run([naclsdk_sh, '-U',
+ server.GetURL(manifest_name), 'update', 'pepper_' + pepper_ver])
+
+ # Return the new pepper directory as the one inside the downloaded SDK.
+ return os.path.join(OUT_DIR, 'nacl_sdk', 'pepper_' + pepper_ver)
+
+ # kill server
+ finally:
+ if server:
+ server.Shutdown()
+
+
+def BuildStepBuildExamples(pepperdir, platform):
+ buildbot_common.BuildStep('Build Examples')
+ example_dir = os.path.join(pepperdir, 'examples')
+ makefile = os.path.join(example_dir, 'Makefile')
+ if os.path.isfile(makefile):
+ print "\n\nMake: " + example_dir
+ if platform == 'win':
+ # We need to modify the environment to build host on Windows.
+ env = GetWindowsEnvironment()
+ else:
+ env = os.environ
+
+ buildbot_common.Run(['make', '-j8'],
+ cwd=os.path.abspath(example_dir), shell=True, env=env)
+
+
+def BuildStepTestExamples(pepperdir, platform, pepper_ver):
+ buildbot_common.BuildStep('Test Examples')
+ env = copy.copy(os.environ)
+ env['PEPPER_VER'] = pepper_ver
+ env['NACL_SDK_ROOT'] = pepperdir
+
+ pyauto_script = os.path.join(SRC_DIR, 'chrome', 'test', 'functional',
+ 'nacl_sdk.py')
+ pyauto_script_args = ['nacl_sdk.NaClSDKTest.NaClSDKExamples']
+
+ if platform == 'linux' and buildbot_common.IsSDKBuilder():
+ # linux buildbots need to run the pyauto tests through xvfb. Running
+ # using runtest.py does this.
+ #env['PYTHON_PATH'] = '.:' + env.get('PYTHON_PATH', '.')
+ build_dir = os.path.dirname(SRC_DIR)
+ runtest_py = os.path.join(build_dir, '..', '..', '..', 'scripts', 'slave',
+ 'runtest.py')
+ buildbot_common.Run([sys.executable, runtest_py, '--target', 'Release',
+ '--build-dir', 'src/build', sys.executable,
+ pyauto_script] + pyauto_script_args,
+ cwd=build_dir, env=env)
+ else:
+ buildbot_common.Run([sys.executable, 'nacl_sdk.py',
+ 'nacl_sdk.NaClSDKTest.NaClSDKExamples'],
+ cwd=os.path.dirname(pyauto_script),
+ env=env)
+
+
+def BuildStepArchiveBundle(pepper_ver, revision, tarfile):
+ buildbot_common.BuildStep('Archive build')
+ bucket_path = 'nativeclient-mirror/nacl/nacl_sdk/%s' % (
+ build_utils.ChromeVersion(),)
+ tarname = os.path.basename(tarfile)
+ tarfile_dir = os.path.dirname(tarfile)
+ buildbot_common.Archive(tarname, bucket_path, tarfile_dir)
+
+ # generate "manifest snippet" for this archive.
+ archive_url = GSTORE + 'nacl_sdk/%s/%s' % (
+ build_utils.ChromeVersion(), tarname)
+ bundle = GetManifestBundle(pepper_ver, revision, tarfile, archive_url)
+
+ manifest_snippet_file = os.path.join(OUT_DIR, tarname + '.json')
+ with open(manifest_snippet_file, 'wb') as manifest_snippet_stream:
+ manifest_snippet_stream.write(bundle.GetDataAsString())
+
+ buildbot_common.Archive(tarname + '.json', bucket_path, OUT_DIR,
+ step_link=False)
+
+
+def BuildStepArchiveSDKTools():
+ # Only push up sdk_tools.tgz on the linux buildbot.
+ builder_name = os.getenv('BUILDBOT_BUILDERNAME','')
+ if builder_name == 'linux-sdk-multi':
+ buildbot_common.BuildStep('Archive SDK Tools')
+ bucket_path = 'nativeclient-mirror/nacl/nacl_sdk/%s' % (
+ build_utils.ChromeVersion(),)
+ buildbot_common.Archive('sdk_tools.tgz', bucket_path, OUT_DIR,
+ step_link=False)
+
+
def main(args):
parser = optparse.OptionParser()
parser.add_option('--pnacl', help='Enable pnacl build.',
@@ -507,249 +729,62 @@ def main(args):
else:
toolchains = ['newlib', 'glibc', 'host']
print 'Building: ' + ' '.join(toolchains)
- skip = options.only_examples or options.only_updater
-
- skip_examples = skip and not options.only_examples
- skip_update = skip and not options.only_updater
- skip_untar = skip
- skip_build = skip
- skip_test_updater = skip
- skip_test_examples = skip_examples or not options.test_examples
- skip_test_build_tools = skip
- skip_tar = skip or options.skip_tar
if options.archive and (options.only_examples or options.skip_tar):
parser.error('Incompatible arguments with archive.')
pepper_ver = str(int(build_utils.ChromeMajorVersion()))
pepper_old = str(int(build_utils.ChromeMajorVersion()) - 1)
- clnumber = build_utils.ChromeRevision()
- if options.release:
- pepper_ver = options.release
- print 'Building PEPPER %s at %s' % (pepper_ver, clnumber)
-
- if not skip_build:
- buildbot_common.BuildStep('Rerun hooks to get toolchains')
- buildbot_common.Run(['gclient', 'runhooks'],
- cwd=SRC_DIR, shell=(platform=='win'))
-
- buildbot_common.BuildStep('Clean Pepper Dirs')
pepperdir = os.path.join(SRC_DIR, 'out', 'pepper_' + pepper_ver)
- pepperold = os.path.join(SRC_DIR, 'out', 'pepper_' + pepper_old)
- buildbot_common.RemoveDir(pepperold)
- if not skip_untar:
- buildbot_common.RemoveDir(pepperdir)
- buildbot_common.MakeDir(os.path.join(pepperdir, 'include'))
- buildbot_common.MakeDir(os.path.join(pepperdir, 'toolchain'))
- buildbot_common.MakeDir(os.path.join(pepperdir, 'tools'))
- else:
- buildbot_common.MakeDir(pepperdir)
-
- if not skip_build:
- buildbot_common.BuildStep('Add Text Files')
- files = ['AUTHORS', 'COPYING', 'LICENSE', 'NOTICE']
- files = [os.path.join(SDK_SRC_DIR, filename) for filename in files]
- oshelpers.Copy(['-v'] + files + [pepperdir])
-
- # Replace a few placeholders in README
- readme_text = open(os.path.join(SDK_SRC_DIR, 'README'), 'rt').read()
- readme_text = readme_text.replace('${VERSION}', pepper_ver)
- readme_text = readme_text.replace('${REVISION}', clnumber)
-
- # Year/Month/Day Hour:Minute:Second
- time_format = '%Y/%m/%d %H:%M:%S'
- readme_text = readme_text.replace('${DATE}',
- datetime.datetime.now().strftime(time_format))
-
- open(os.path.join(pepperdir, 'README'), 'wt').write(readme_text)
-
- # Clean out the temporary toolchain untar directory
- if not skip_untar:
- UntarToolchains(pepperdir, platform, arch, toolchains)
-
- if not skip_build:
- BuildToolchains(pepperdir, platform, arch, pepper_ver, toolchains)
- InstallHeaders(os.path.join(pepperdir, 'include'), None, 'libs')
-
- if not skip_build:
- buildbot_common.BuildStep('Copy make OS helpers')
- buildbot_common.CopyDir(os.path.join(SDK_SRC_DIR, 'tools', '*.py'),
- os.path.join(pepperdir, 'tools'))
- if platform == 'win':
- buildbot_common.BuildStep('Add MAKE')
- http_download.HttpDownload(GSTORE + MAKE,
- os.path.join(pepperdir, 'tools' ,'make.exe'))
- rename_list = ['ncval_x86_32', 'ncval_x86_64',
- 'sel_ldr_x86_32', 'sel_ldr_x86_64']
- tools = os.path.join(pepperdir, 'tools')
- for name in rename_list:
- src = os.path.join(pepperdir, 'tools', name)
- dst = os.path.join(pepperdir, 'tools', name + '.exe')
- buildbot_common.Move(src, dst)
-
- if not skip_examples:
- CopyExamples(pepperdir, toolchains)
-
+ pepperdir_old = os.path.join(SRC_DIR, 'out', 'pepper_' + pepper_old)
+ clnumber = build_utils.ChromeRevision()
tarname = 'naclsdk_' + platform + '.tar.bz2'
if 'pnacl' in toolchains:
tarname = 'p' + tarname
- tarfile = os.path.join(OUT_DIR, tarname)
+ tarfile = os.path.join(SERVER_DIR, tarname)
- # Ship with libraries prebuilt, so run that first
- buildbot_common.BuildStep('Build Libraries')
- src_dir = os.path.join(pepperdir, 'src')
- makefile = os.path.join(src_dir, 'Makefile')
- if os.path.isfile(makefile):
- print "\n\nMake: " + src_dir
- if platform == 'win':
- # We need to modify the environment to build host on Windows.
- env = GetWindowsEnvironment()
- else:
- env = os.environ
-
- buildbot_common.Run(['make', '-j8'],
- cwd=os.path.abspath(src_dir), shell=True, env=env)
- buildbot_common.Run(['make', '-j8', 'clean'],
- cwd=os.path.abspath(src_dir), shell=True)
-
- if not skip_tar:
- buildbot_common.BuildStep('Tar Pepper Bundle')
- buildbot_common.Run([sys.executable, CYGTAR, '-C', OUT_DIR, '-cjf', tarfile,
- 'pepper_' + pepper_ver], cwd=NACL_DIR)
-
- # Run build tests
- if not skip_test_build_tools:
- buildbot_common.BuildStep('Run build_tools tests')
- buildbot_common.Run([sys.executable,
- os.path.join(SDK_SRC_DIR, 'build_tools', 'tests', 'test_all.py')])
+ if options.release:
+ pepper_ver = options.release
+ print 'Building PEPPER %s at %s' % (pepper_ver, clnumber)
- # build sdk update
- if not skip_update:
+ if options.only_examples:
+ BuildStepCopyExamples(pepperdir, toolchains)
+ BuildStepBuildExamples(pepperdir, platform)
+ if options.test_examples:
+ BuildStepTestExamples(pepperdir, platform, pepper_ver)
+ elif options.only_updater:
build_updater.BuildUpdater(OUT_DIR)
-
- # start local server sharing a manifest + the new bundle
- if not skip_test_updater and not skip_tar:
- buildbot_common.BuildStep('Move bundle to localserver dir')
- buildbot_common.MakeDir(SERVER_DIR)
- buildbot_common.Move(tarfile, SERVER_DIR)
- tarfile = os.path.join(SERVER_DIR, tarname)
-
- server = None
- try:
- buildbot_common.BuildStep('Run local server')
- server = test_server.LocalHTTPServer(SERVER_DIR)
-
- buildbot_common.BuildStep('Generate manifest')
- with open(tarfile, 'rb') as tarfile_stream:
- archive_sha1, archive_size = manifest_util.DownloadAndComputeHash(
- tarfile_stream)
- archive = manifest_util.Archive(manifest_util.GetHostOS())
- archive.CopyFrom({'url': server.GetURL(tarname),
- 'size': archive_size,
- 'checksum': {'sha1': archive_sha1}})
- bundle = manifest_util.Bundle('pepper_' + pepper_ver)
- bundle.CopyFrom({
- 'revision': int(clnumber),
- 'repath': 'pepper_' + pepper_ver,
- 'version': int(pepper_ver),
- 'description': 'Chrome %s bundle, revision %s' % (
- pepper_ver, clnumber),
- 'stability': 'dev',
- 'recommended': 'no',
- 'archives': [archive]})
- manifest = manifest_util.SDKManifest()
- manifest.SetBundle(bundle)
- manifest_name = 'naclsdk_manifest2.json'
- with open(os.path.join(SERVER_DIR, manifest_name), 'wb') as \
- manifest_stream:
- manifest_stream.write(manifest.GetDataAsString())
-
- # use newly built sdk updater to pull this bundle
- buildbot_common.BuildStep('Update from local server')
- naclsdk_sh = os.path.join(OUT_DIR, 'nacl_sdk', 'naclsdk')
- if platform == 'win':
- naclsdk_sh += '.bat'
- buildbot_common.Run([naclsdk_sh, '-U',
- server.GetURL(manifest_name), 'update', 'pepper_' + pepper_ver])
-
- # If we are testing examples, do it in the newly pulled directory.
- pepperdir = os.path.join(OUT_DIR, 'nacl_sdk', 'pepper_' + pepper_ver)
-
- # kill server
- finally:
- if server:
- server.Shutdown()
-
- # Build Examples (libraries built previously).
- if not skip_examples:
- buildbot_common.BuildStep('Build Examples')
- example_dir = os.path.join(pepperdir, 'examples')
- makefile = os.path.join(example_dir, 'Makefile')
- if os.path.isfile(makefile):
- print "\n\nMake: " + example_dir
- if platform == 'win':
- # We need to modify the environment to build host on Windows.
- env = GetWindowsEnvironment()
- else:
- env = os.environ
-
- buildbot_common.Run(['make', '-j8'],
- cwd=os.path.abspath(example_dir), shell=True, env=env)
-
- # Test examples.
- if not skip_examples and not skip_test_examples:
- buildbot_common.BuildStep('Test Examples')
- env = copy.copy(os.environ)
- env['PEPPER_VER'] = pepper_ver
- env['NACL_SDK_ROOT'] = pepperdir
-
- pyauto_script = os.path.join(SRC_DIR, 'chrome', 'test', 'functional',
- 'nacl_sdk.py')
- pyauto_script_args = ['nacl_sdk.NaClSDKTest.NaClSDKExamples']
-
- if platform == 'linux' and buildbot_common.IsSDKBuilder():
- # linux buildbots need to run the pyauto tests through xvfb. Running
- # using runtest.py does this.
- #env['PYTHON_PATH'] = '.:' + env.get('PYTHON_PATH', '.')
- build_dir = os.path.dirname(SRC_DIR)
- runtest_py = os.path.join(build_dir, '..', '..', '..', 'scripts', 'slave',
- 'runtest.py')
- buildbot_common.Run([sys.executable, runtest_py, '--target', 'Release',
- '--build-dir', 'src/build', sys.executable,
- pyauto_script] + pyauto_script_args,
- cwd=build_dir, env=env)
- else:
- buildbot_common.Run([sys.executable, 'nacl_sdk.py',
- 'nacl_sdk.NaClSDKTest.NaClSDKExamples'],
- cwd=os.path.dirname(pyauto_script),
- env=env)
-
- # Archive on non-trybots.
- if options.archive or buildbot_common.IsSDKBuilder():
- buildbot_common.BuildStep('Archive build')
- bucket_path = 'nativeclient-mirror/nacl/nacl_sdk/%s' % \
- build_utils.ChromeVersion()
- buildbot_common.Archive(tarname, bucket_path, os.path.dirname(tarfile))
-
- if not skip_update:
- # Only push up sdk_tools.tgz on the linux buildbot.
- if builder_name == 'linux-sdk-multi':
- sdk_tools = os.path.join(OUT_DIR, 'sdk_tools.tgz')
- buildbot_common.Archive('sdk_tools.tgz', bucket_path, OUT_DIR,
- step_link=False)
-
- # generate "manifest snippet" for this archive.
- if not skip_test_updater:
- archive = bundle.GetArchive(manifest_util.GetHostOS())
- archive.url = 'https://commondatastorage.googleapis.com/' \
- 'nativeclient-mirror/nacl/nacl_sdk/%s/%s' % (
- build_utils.ChromeVersion(), tarname)
- manifest_snippet_file = os.path.join(OUT_DIR, tarname + '.json')
- with open(manifest_snippet_file, 'wb') as manifest_snippet_stream:
- manifest_snippet_stream.write(bundle.GetDataAsString())
-
- buildbot_common.Archive(tarname + '.json', bucket_path, OUT_DIR,
- step_link=False)
+ else: # Build everything.
+ BuildStepBuildToolsTests()
+
+ BuildStepDownloadToolchains(platform)
+ BuildStepCleanPepperDirs(pepperdir, pepperdir_old)
+ BuildStepMakePepperDirs(pepperdir, ['include', 'toolchain', 'tools'])
+ BuildStepCopyTextFiles(pepperdir, pepper_ver, clnumber)
+ BuildStepUntarToolchains(pepperdir, platform, arch, toolchains)
+ BuildStepBuildToolchains(pepperdir, platform, arch, pepper_ver, toolchains)
+ InstallHeaders(os.path.join(pepperdir, 'include'), None, 'libs')
+ BuildStepCopyBuildHelpers(pepperdir, platform)
+ BuildStepCopyExamples(pepperdir, toolchains)
+
+ # Ship with libraries prebuilt, so run that first.
+ BuildStepBuildLibraries(pepperdir, platform)
+
+ if not options.skip_tar:
+ BuildStepTarBundle(pepper_ver, tarfile)
+ build_updater.BuildUpdater(OUT_DIR)
+
+ # BuildStepTestUpdater downloads the bundle to its own directory. Build
+ # the examples and test from this directory instead of the original.
+ pepperdir = BuildStepTestUpdater(platform, pepper_ver, clnumber, tarfile)
+ BuildStepBuildExamples(pepperdir, platform)
+ if options.test_examples:
+ BuildStepTestExamples(pepperdir, platform, pepper_ver)
+
+ # Archive on non-trybots.
+ if options.archive or buildbot_common.IsSDKBuilder():
+ BuildStepArchiveBundle(pepper_ver, clnumber, tarfile)
+ BuildStepArchiveSDKTools()
return 0