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

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

Issue 10539082: Add DSC files for the various examples. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 6 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
Index: native_client_sdk/src/build_tools/generate_make.py
===================================================================
--- native_client_sdk/src/build_tools/generate_make.py (revision 141376)
+++ native_client_sdk/src/build_tools/generate_make.py (working copy)
@@ -50,7 +50,7 @@
line = varname + '+='
if len(line) + len(value) > 78:
out += line[:-1] + '\n'
- line = ''
+ line = '%s+=%s ' % (varname, value)
else:
line += value + ' '
@@ -76,14 +76,15 @@
# Generate target settings
tools = desc['TOOLS']
- prelaunch = ''
- prerun = ''
+ prerun = desc.get('PRE', '')
+ postlaunch = desc.get('POST', '')
settings = SetVar('VALID_TOOLCHAINS', tools)
settings+= 'TOOLCHAIN?=%s\n\n' % tools[0]
rules = ''
targets = []
+ remaps = ''
for target in desc['TARGETS']:
name = target['NAME']
macro = name.upper()
@@ -125,10 +126,12 @@
targets.append(target_name)
rules += '%s : %s\n' % (target_name, ' '.join(object_sets))
rules += '\t$(NACL_LINK) -o $@ $^ -m%s $(%s_LDFLAGS)\n\n' % (arch, macro)
+ if target['TYPE'] == 'so':
+ remaps += ' -n %s,%s.so' % (target_name, name)
nmf = desc['NAME'] + '.nmf'
nmfs = '%s : %s\n' % (nmf, ' '.join(targets))
- nmfs +='\t$(NMF) $(NMF_ARGS) -o $@ $(NMF_PATHS) $^\n'
+ nmfs +='\t$(NMF) $(NMF_ARGS) -o $@ $(NMF_PATHS) $^%s\n' % remaps
targets = 'all : '+ ' '.join(targets + [nmf])
return {
@@ -137,8 +140,8 @@
'__PROJECT_RULES__' : rules,
'__PROJECT_NMFS__' : nmfs,
'__PROJECT_PRELAUNCH__' : prelaunch,
- '__PROJECT_PRERUN__' : prerun
-
+ '__PROJECT_PRERUN__' : prerun,
+ '__PROJECT_POSTLAUNCH__' : postlaunch
}
@@ -238,17 +241,40 @@
return not failed
-def ProcessProject(options, filename):
- print 'Processing %s...' % filename
+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)
+
+ fp = open(os.path.join(makepath, 'make.bat'), 'wb')
+ outpath = os.path.join(relpath, 'make.exe')
+
+ # Since make.bat is only used by Windows, for Windows path style
+ outpath = outpath.replace(os.path.sep, '\\')
+ fp.write('@%s %%*\n' % outpath)
+ fp.close()
+
+
+def ProcessProject(dstroot, template, filename):
+ print '\n\nProcessing %s...' % filename
# Default src directory is the directory the description was found in
src_dir = os.path.dirname(os.path.abspath(filename))
desc = open(filename, 'rb').read()
desc = eval(desc, {}, {})
if not ValidateFormat(desc, DSC_FORMAT):
- return False
+ return (None, None)
name = desc['NAME']
- out_dir = os.path.join(options.dstroot, desc['DEST'], name)
+ out_dir = os.path.join(dstroot, desc['DEST'], name)
buildbot_common.MakeDir(out_dir)
# Copy sources to example directory
@@ -261,23 +287,76 @@
# Add Makefile
repdict = GenerateReplacements(desc)
make_path = os.path.join(out_dir, 'Makefile')
- WriteMakefile(options.template, make_path, repdict)
- return True
+ WriteMakefile(template, make_path, repdict)
+ outdir = os.path.dirname(os.path.abspath(make_path))
+ pepperdir = os.path.dirname(os.path.dirname(outdir))
+ AddMakeBat(pepperdir, outdir)
+ return (name, desc['DEST'])
+
+def GenerateExamplesMakefile(in_path, out_path, examples):
+ """Generate a Makefile that includes only the examples supported by this
+ SDK."""
+ # Line wrap the PROJECTS variable
+ wrap_width = 80
+ projects_text = ''
+ projects_line = 'PROJECTS:='
binji 2012/06/11 20:22:29 Can you use SetVar() to wrap this?
noelallen1 2012/06/11 20:34:38 Done.
+ for example in examples:
+ if len(projects_line + example + ' ') > wrap_width:
+ projects_text += projects_line + '\n'
+ projects_line = 'PROJECTS+='
+ projects_line += example + ' '
+
+ # Add the last unwrapped line
+ projects_text += projects_line + '\n'
+
+ out_makefile_text = ''
+ wrote_projects_text = False
+ snipping = False
+ for line in open(in_path, 'r'):
+ if line.startswith('# =SNIP='):
+ snipping = not snipping
+ continue
+
+ if snipping:
+ if not wrote_projects_text:
+ out_makefile_text += projects_text
+ wrote_projects_text = True
+ else:
+ out_makefile_text += line
+ open(out_path, 'w').write(out_makefile_text)
+
+ outdir = os.path.dirname(os.path.abspath(out_path))
+ pepperdir = os.path.dirname(outdir)
+ AddMakeBat(pepperdir, outdir)
+
+
def main(argv):
parser = optparse.OptionParser()
parser.add_option('--dstroot', help='Set root for destination.',
dest='dstroot', default=OUT_DIR)
parser.add_option('--template', help='Set the makefile template.',
dest='template', default=os.path.join(SCRIPT_DIR, 'template.mk'))
+ parser.add_option('--master', help='Create master Makefile.',
+ action='store_true', dest='master', default=False)
+ examples = []
options, args = parser.parse_args(argv)
for filename in args:
- if not ProcessProject(options, filename):
+ name, dest = ProcessProject(options.dstroot, options.template, filename)
+ if not name:
print '\n*** Failed to process project: %s ***' % filename
return 1
+ if dest == 'examples':
+ examples.append(name)
+
+ if options.master:
+ master_in = os.path.join(SDK_EXAMPLE_DIR, 'Makefile')
+ master_out = os.path.join(options.dstroot, 'examples', 'Makefile')
+ GenerateExamplesMakefile(master_in, master_out, examples)
+
return 0

Powered by Google App Engine
This is Rietveld 408576698