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

Unified Diff: native_client_sdk/src/build_tools/build_sdk.py

Issue 10260032: Missing .exe in windows build. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 8 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: native_client_sdk/src/build_tools/build_sdk.py
===================================================================
--- native_client_sdk/src/build_tools/build_sdk.py (revision 134587)
+++ native_client_sdk/src/build_tools/build_sdk.py (working copy)
@@ -17,18 +17,15 @@
# std python includes
-import multiprocessing
import optparse
import os
import platform
-import subprocess
import sys
# local includes
import buildbot_common
import build_utils
import lastchange
-import manifest_util
# Create the various paths of interest
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
@@ -39,7 +36,6 @@
NACL_DIR = os.path.join(SRC_DIR, 'native_client')
OUT_DIR = os.path.join(SRC_DIR, 'out')
PPAPI_DIR = os.path.join(SRC_DIR, 'ppapi')
-SERVER_DIR = os.path.join(OUT_DIR, 'local_server')
# Add SDK make tools scripts to the python path.
@@ -55,76 +51,17 @@
CYGTAR = os.path.join(NACL_DIR, 'build', 'cygtar.py')
-def HTTPServerProcess(conn, serve_dir):
- """Run a local httpserver with a randomly-chosen port.
-
- This function assumes it is run as a child process using multiprocessing.
-
- Args:
- conn: A connection to the parent process. The child process sends
- the local port, and waits for a message from the parent to
- stop serving.
- serve_dir: The directory to serve. All files are accessible through
- http://localhost:<port>/path/to/filename.
- """
- import BaseHTTPServer
- import SimpleHTTPServer
-
- os.chdir(serve_dir)
- httpd = BaseHTTPServer.HTTPServer(('', 0),
- SimpleHTTPServer.SimpleHTTPRequestHandler)
- conn.send(httpd.server_address[1]) # the chosen port number
- httpd.timeout = 0.5 # seconds
- running = True
- while running:
- httpd.handle_request()
- if conn.poll():
- running = conn.recv()
- conn.close()
-
-
-class LocalHTTPServer(object):
- """Class to start a local HTTP server as a child process."""
-
- def __init__(self, serve_dir):
- parent_conn, child_conn = multiprocessing.Pipe()
- self.process = multiprocessing.Process(target=HTTPServerProcess,
- args=(child_conn, serve_dir))
- self.process.start()
- if parent_conn.poll(10): # wait 10 seconds
- self.port = parent_conn.recv()
- else:
- raise Exception('Unable to launch HTTP server.')
-
- self.conn = parent_conn
-
- def Shutdown(self):
- """Send a message to the child HTTP server process and wait for it to
- finish."""
- self.conn.send(False)
- self.process.join()
-
- def GetURL(self, rel_url):
- """Get the full url for a file on the local HTTP server.
-
- Args:
- rel_url: A URL fragment to convert to a full URL. For example,
- GetURL('foobar.baz') -> 'http://localhost:1234/foobar.baz'
- """
- return 'http://localhost:%d/%s' % (self.port, rel_url)
-
-
def AddMakeBat(pepperdir, makepath):
"""Create a simple batch file to execute Make.
-
+
Creates a simple batch file named make.bat for the Windows platform at the
given path, pointing to the Make executable in the SDK."""
-
+
makepath = os.path.abspath(makepath)
if not makepath.startswith(pepperdir):
buildbot_common.ErrorExit('Make.bat not relative to Pepper directory: ' +
makepath)
-
+
makeexe = os.path.abspath(os.path.join(pepperdir, 'tools'))
relpath = os.path.relpath(makeexe, makepath)
@@ -265,7 +202,7 @@
buildbot_common.CopyDir(os.path.join(PPAPI_DIR, 'c', 'dev', '*.h'),
os.path.join(ppapi, 'c', 'dev'))
- # Run the generator to overwrite IDL files
+ # Run the generator to overwrite IDL files
buildbot_common.Run([sys.executable, 'generator.py', '--wnone', '--cgen',
'--release=M' + pepper_ver, '--verbose', '--dstroot=%s/c' % ppapi],
cwd=os.path.join(PPAPI_DIR, 'generators'))
@@ -322,7 +259,7 @@
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')
@@ -333,7 +270,7 @@
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')
@@ -412,7 +349,7 @@
'fullscreen_tumbler',
'gamepad',
'geturl',
- 'hello_world_interactive',
+ 'hello_world_interactive',
'hello_world_newlib',
'input_events',
'load_progress',
@@ -521,17 +458,17 @@
parser = optparse.OptionParser()
parser.add_option('--pnacl', help='Enable pnacl build.',
action='store_true', dest='pnacl', default=False)
- parser.add_option('--examples', help='Only build the examples.',
- action='store_true', dest='only_examples', default=False)
- parser.add_option('--update', help='Only build the updater.',
- action='store_true', dest='only_updater', default=False)
+ parser.add_option('--examples', help='Rebuild the examples.',
+ action='store_true', dest='examples', default=False)
+ parser.add_option('--update', help='Rebuild the updater.',
+ action='store_true', dest='update', default=False)
parser.add_option('--skip-tar', help='Skip generating a tarball.',
action='store_true', dest='skip_tar', default=False)
parser.add_option('--archive', help='Force the archive step.',
action='store_true', dest='archive', default=False)
parser.add_option('--release', help='PPAPI release version.',
dest='release', default=None)
-
+
options, args = parser.parse_args(args[1:])
platform = getos.GetPlatform()
arch = 'x86'
@@ -545,19 +482,23 @@
else:
toolchains = ['newlib', 'glibc']
print 'Building: ' + ' '.join(toolchains)
- skip = options.only_examples or options.only_updater
+ skip = options.examples or options.update
- skip_examples = skip and not options.only_examples
- skip_update = skip and not options.only_updater
+ skip_examples = skip
+ skip_update = skip
skip_untar = skip
skip_build = skip
- skip_test_updater = skip
skip_tar = skip or options.skip_tar
- if options.archive and (options.only_examples or options.skip_tar):
+
+ if options.examples: skip_examples = False
+ skip_update = not options.update
+
+ if options.archive and (options.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 = lastchange.FetchVersionInfo(None).revision
if options.release:
pepper_ver = options.release
@@ -568,20 +509,19 @@
buildbot_common.Run(['gclient', 'runhooks'],
cwd=SRC_DIR, shell=(platform=='win'))
- pepperdir = os.path.join(SRC_DIR, 'out', 'pepper_' + pepper_ver)
+ 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.BuildStep('Clean Pepper Dir')
buildbot_common.RemoveDir(pepperdir)
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', 'README']
- files = [os.path.join(SDK_SRC_DIR, filename) for filename in files]
- oshelpers.Copy(['-v'] + files + [pepperdir])
+ buildbot_common.BuildStep('Add Text Files')
+ files = ['AUTHORS', 'COPYING', 'LICENSE', 'NOTICE', 'README']
+ files = [os.path.join(SDK_SRC_DIR, filename) for filename in files]
+ oshelpers.Copy(['-v'] + files + [pepperdir])
# Clean out the temporary toolchain untar directory
@@ -591,85 +531,41 @@
if not skip_build:
BuildToolchains(pepperdir, platform, arch, pepper_ver, toolchains)
- 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'))
+ 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'))
+ # Add missing extention to Windows apps
+ rename_list = ['ncval_x86_32', 'ncval_x86_64',
+ 'sel_ldr_x86_32', 'sel_ldr_x86_64']
binji 2012/05/01 17:24:18 remove tabs
+ tools = os.path.join(pepperdir, 'tools')
+ for name in rename_list:
+ buildbot_common.Move(os.path.join(tools, name),
+ os.path.join(tools, name + '.exe'))
binji 2012/05/01 17:24:18 remove tabs
+
if not skip_examples:
CopyExamples(pepperdir, toolchains)
- tarname = 'naclsdk_' + platform + '.bz2'
- if 'pnacl' in toolchains:
- tarname = 'p' + tarname
- tarfile = os.path.join(OUT_DIR, tarname)
-
if not skip_tar:
buildbot_common.BuildStep('Tar Pepper Bundle')
+ tarname = 'naclsdk_' + platform + '.bz2'
+ if 'pnacl' in toolchains:
+ tarname = 'p' + tarname
+ tarfile = os.path.join(OUT_DIR, tarname)
buildbot_common.Run([sys.executable, CYGTAR, '-C', OUT_DIR, '-cjf', tarfile,
'pepper_' + pepper_ver], cwd=NACL_DIR)
- # build sdk update
- if not skip_update:
- BuildUpdater()
+ # Archive on non-trybots.
+ if options.archive or '-sdk' in os.environ.get('BUILDBOT_BUILDERNAME', ''):
+ buildbot_common.BuildStep('Archive build')
+ buildbot_common.Archive(tarname,
+ 'nativeclient-mirror/nacl/nacl_sdk/%s' % build_utils.ChromeVersion(),
+ OUT_DIR)
- # start local server sharing a manifest + the new bundle
- if not skip_test_updater:
- 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 = 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': clnumber,
- 'repath': 'pepper_' + pepper_ver,
- 'version': 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')
- updater_py = os.path.join(OUT_DIR, 'nacl_sdk', 'sdk_tools',
- 'sdk_update.py')
- buildbot_common.Run([sys.executable, updater_py, '-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.
if not skip_examples:
buildbot_common.BuildStep('Test Build Examples')
filelist = os.listdir(os.path.join(pepperdir, 'examples'))
@@ -681,26 +577,10 @@
buildbot_common.Run(['make', 'all', '-j8'],
cwd=os.path.abspath(dirnode), shell=True)
- # Archive on non-trybots.
- if options.archive or '-sdk' in os.environ.get('BUILDBOT_BUILDERNAME', ''):
- 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))
+ # Build SDK Tools
+ if not skip_update:
+ BuildUpdater()
- # 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.ToJSON())
-
- buildbot_common.Archive(tarname + '.json', bucket_path, OUT_DIR,
- step_link=False)
-
return 0
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698