Index: native_client_sdk/src/build_tools/generate_make.py |
diff --git a/native_client_sdk/src/build_tools/generate_make.py b/native_client_sdk/src/build_tools/generate_make.py |
index 9be8e0275d73424eb7115c402658df9328f6d28b..786a1e7d96c750d95d347d515699b68cdb2c8f75 100755 |
--- a/native_client_sdk/src/build_tools/generate_make.py |
+++ b/native_client_sdk/src/build_tools/generate_make.py |
@@ -93,7 +93,7 @@ def GenerateToolDefaults(tools): |
def GenerateSettings(desc, tools): |
settings = SetVar('VALID_TOOLCHAINS', tools) |
- settings += 'TOOLCHAIN?=%s\n\n' % tools[0] |
+ settings += 'TOOLCHAIN?=%s\n\n' % desc['TOOLS'][0] |
for target in desc['TARGETS']: |
project = target['NAME'] |
macro = project.upper() |
@@ -138,10 +138,17 @@ def GenerateRules(desc, tools): |
rules += SetVar('GLIBC_REMAP', glibc_rename) |
configs = desc.get('CONFIGS', ['Debug', 'Release']) |
- for tc in tools: |
+ for tc, enabled_arches in tools.iteritems(): |
+ print tc |
makeobj = MakeRules(tc) |
arches = makeobj.GetArches() |
rules += makeobj.BuildDirectoryRules(configs) |
+ |
+ if enabled_arches: |
+ # filter out all arches that don't match the list |
+ # of enabled arches |
+ arches = [a for a in arches if a.get('<arch>') in enabled_arches] |
+ |
for cfg in configs: |
makeobj.SetConfig(cfg) |
for target in desc['TARGETS']: |
@@ -172,7 +179,6 @@ def GenerateRules(desc, tools): |
return '', rules |
- |
def GenerateReplacements(desc, tools): |
# Generate target settings |
settings = GenerateSettings(desc, tools) |
@@ -198,7 +204,8 @@ def GenerateReplacements(desc, tools): |
# 'KEY' : ( <TYPE>, [Accepted Values], <Required?>) |
DSC_FORMAT = { |
- 'TOOLS' : (list, ['newlib', 'glibc', 'pnacl', 'win', 'linux'], True), |
+ 'TOOLS' : (list, ['newlib:arm', 'newlib:x64', 'newlib:x86', 'newlib', |
+ 'glibc', 'pnacl', 'win', 'linux'], True), |
'CONFIGS' : (list, ['Debug', 'Release'], False), |
'PREREQ' : (list, '', False), |
'TARGETS' : (list, { |
@@ -276,7 +283,7 @@ def ValidateFormat(src, dsc_format, ErrorMsg=ErrorMsgFunc): |
if exp_type is str: |
if type(exp_value) is list and exp_value: |
if value not in exp_value: |
- ErrorMsg('Value %s not expected for %s.' % (value, key)) |
+ ErrorMsg("Value '%s' not expected for %s." % (value, key)) |
failed = True |
continue |
@@ -394,7 +401,7 @@ def LoadProject(filename, toolchains): |
if it matches the set of requested toolchains. Return None if the |
project is filtered out.""" |
- print '\n\nProcessing %s...' % filename |
+ print 'Processing %s...' % filename |
# Default src directory is the directory the description was found in |
desc = open(filename, 'r').read() |
desc = eval(desc, {}, {}) |
@@ -473,11 +480,23 @@ def ProcessProject(srcroot, dstroot, desc, toolchains): |
else: |
template = os.path.join(SCRIPT_DIR, 'library.mk') |
- tools = [] |
+ tools = {} |
+ tool_list = [] |
for tool in desc['TOOLS']: |
- if tool in toolchains: |
- tools.append(tool) |
+ if ':' in tool: |
+ tool, arch = tool.split(':') |
+ else: |
+ arch = None |
+ # Ignore tools that are not enabled in this SDK build |
+ if tool not in toolchains: |
+ continue |
+ tools.setdefault(tool, []) |
+ if tool not in tool_list: |
+ tool_list.append(tool) |
+ if arch: |
+ tools[tool].append(arch) |
+ desc['TOOLS'] = tool_list |
# Add Makefile and make.bat |
repdict = GenerateReplacements(desc, tools) |
@@ -527,21 +546,22 @@ def GenerateMasterMakefile(in_path, out_path, projects): |
def main(argv): |
- parser = optparse.OptionParser() |
+ usage = "usage: generate_make [options] <dsc_file ..>" |
+ parser = optparse.OptionParser(usage=usage) |
parser.add_option('--dstroot', help='Set root for destination.', |
- dest='dstroot', default=os.path.join(OUT_DIR, 'pepper_canary')) |
+ default=os.path.join(OUT_DIR, 'pepper_canary')) |
parser.add_option('--master', help='Create master Makefile.', |
- action='store_true', dest='master', default=False) |
+ action='store_true', default=False) |
parser.add_option('--newlib', help='Create newlib examples.', |
- action='store_true', dest='newlib', default=False) |
+ action='store_true', default=False) |
parser.add_option('--glibc', help='Create glibc examples.', |
- action='store_true', dest='glibc', default=False) |
+ action='store_true', default=False) |
parser.add_option('--pnacl', help='Create pnacl examples.', |
- action='store_true', dest='pnacl', default=False) |
+ action='store_true', default=False) |
parser.add_option('--host', help='Create host examples.', |
- action='store_true', dest='host', default=False) |
+ action='store_true', default=False) |
parser.add_option('--experimental', help='Create experimental examples.', |
- action='store_true', dest='experimental', default=False) |
+ action='store_true', default=False) |
toolchains = [] |
platform = getos.GetPlatform() |
@@ -561,13 +581,15 @@ def main(argv): |
# By default support newlib and glibc |
if not toolchains: |
- toolchains = ['newlib', 'glibc'] |
- print 'Using default toolchains: ' + ' '.join(toolchains) |
+ toolchains = ['newlib', 'glibc', 'pnacl'] |
master_projects = {} |
landing_page = LandingPage() |
- for filename in args: |
+ for i, filename in enumerate(args): |
+ if i: |
+ # Print two newlines between each dsc file we process |
+ print '\n' |
desc = LoadProject(filename, toolchains) |
if not desc: |
print 'Skipping %s, not in [%s].' % (filename, ', '.join(toolchains)) |