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

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
« no previous file with comments | « native_client_sdk/src/build_tools/build_sdk.py ('k') | native_client_sdk/src/build_tools/template.mk » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: native_client_sdk/src/build_tools/generate_make.py
===================================================================
--- native_client_sdk/src/build_tools/generate_make.py (revision 141601)
+++ native_client_sdk/src/build_tools/generate_make.py (working copy)
@@ -19,11 +19,24 @@
ARCHITECTURES = ['32', '64']
+SRC_EXT = {
+ 'c': 'CC',
+ 'cc' : 'CXX',
+ '.so' : '.so',
+ '.nexe': '.nexe'
+}
+
+def Replace(text, replacements):
+ for key in replacements:
+ print 'Print replacing: %s' % key
+ text = text.replace(key, replacements[key])
+ return text
+
+
def WriteMakefile(srcpath, dstpath, replacements):
text = open(srcpath, 'rb').read()
- for key in replacements:
- text = text.replace(key, replacements[key])
+ text = Replace(text, replacements)
open(dstpath, 'wb').write(text)
@@ -35,8 +48,8 @@
return ext
-def GenPatsubst(arch, macro, ext, EXT):
- return '$(patsubst %%.%s,%%_%s.o,$(%s_%s))' % (ext, arch, macro, EXT)
+def GenPatsubst(arch, tool, macro, ext, EXT):
+ return '$(patsubst %%.%s,%s/%%_%s.o,$(%s_%s))' % (ext, tool, arch, macro, EXT)
def SetVar(varname, values):
@@ -70,7 +83,77 @@
return sources
+def BuildToolDict(tc, proj, arch='', ext='.nexe', OBJS='', TARG='', REMAP=''):
+ TC = tc.upper()
+ PROJ = proj.upper()
+
+ if not OBJS:
+ OBJS = '%s_%s_%s_%s_O' % (TC, PROJ, arch, ext)
+
+ if not TARG:
+ TARG = '%s_x86_%s%s' % (proj,arch,ext)
+
+ replace = {
+ '<ARCH>': arch,
+ '<CC>': '%s_%s' % (TC, SRC_EXT[ext]),
+ '<DUMP>': '%s_DUMP' % TC,
+ '<ext>' : ext,
+ '<EXT>' : SRC_EXT[ext],
+ '<LINK>': '%s_LINK' % TC,
+ '<OBJS>' : OBJS,
+ '<proj>': proj,
+ '<PROJ>': PROJ,
+ '<REMAP>': REMAP,
+ '<TARG>': TARG,
+ '<TAB>': '\t',
+ '<tc>' : tc,
+ '<TC>' : TC
+ }
+ return replace
+
+
+def GenerateNEXE(toolchain, name, ext, cc_sources, cxx_sources):
+ COMPILE_RULE = """
+<OBJS>:=$(patsubst %.<ext>, <tc>/%_<ARCH>.o,$(<PROJ>_<EXT>))
+$(<OBJS>) : <tc>/%_<ARCH>.o : %.<ext> $(THIS_MAKE) | <tc>
+<TAB>$(<CC>) -o $@ $< -m<ARCH> $(<PROJ>_<EXT>FLAGS) -DTCNAME=\\"<tc>\\"
+"""
+ LINK_RULE = """
+<tc>/<TARG> : $(<OBJS>)
+<TAB>$(<LINK>) -o $@ $^ -m<ARCH> $(<PROJ>_LDFLAGS)
+"""
+ rules = ''
+ targs = []
+ for arch in ARCHITECTURES:
+ object_sets = []
+ remap = ''
+ if cc_sources:
+ replace = BuildToolDict(toolchain, name, arch, 'c')
+ rules += Replace(COMPILE_RULE, replace)
+ object_sets.append(replace['<OBJS>'])
+
+ if cxx_sources:
+ replace = BuildToolDict(toolchain, name, arch, 'cc')
+ rules += Replace(COMPILE_RULE, replace)
+ object_sets.append(replace['<OBJS>'])
+
+ objs = ' '.join(object_sets)
+ replace = BuildToolDict(toolchain, name, arch, ext, OBJS=objs)
+ rules += Replace(LINK_RULE, replace)
+ if ext == '.so':
+ remap = ' -n %s,%s.so' % (replace['<TARG>'], name)
+ rules += '%s_NMF+=%s/%s\n' % (replace['<TC>'], toolchain, replace['<TARG>'])
+ if remap:
+ rules += '%s_REMAP+=%s\n' % (replace['<TC>'], remap)
+ return rules
+
+
def GenerateReplacements(desc):
+ NMF_RULE = """
+<tc>/<proj>.nmf : $(<TC>_NMF)
+<TAB>$(NMF) -D $(<DUMP>) -o $@ $(<TC>_PATHS) $^ -t <tc> -s <tc> $(<TC>_REMAP)
+
+"""
# Generate target settings
tools = desc['TOOLS']
@@ -106,38 +189,28 @@
flags = target.get('LDFLAGS', ['$(NACL_LDFLAGS)'])
settings += SetVar(macro + '_LDFLAGS', flags)
- for arch in ARCHITECTURES:
- object_sets = []
- if cc_sources:
- objs = '%s_%s_CC_O' % (macro, arch)
- rules += '%s:=%s\n' % (objs, GenPatsubst(arch, macro, 'c', 'CC'))
- rules += '$(%s) : %%_%s.o : %%.c $(THIS_MAKEFILE)\n' % (objs, arch)
- rules += '\t$(NACL_CC) -o $@ $< -m%s $(%s_CCFLAGS)\n\n' % (arch, macro)
- object_sets.append('$(%s)' % objs)
- if cxx_sources:
- objs = '%s_%s_CXX_O' % (macro, arch)
- rules += '%s:=%s\n' % (objs, GenPatsubst(arch, macro, 'cc', 'CXX'))
- rules += '$(%s) : %%_%s.o : %%.cc $(THIS_MAKEFILE)\n' % (objs, arch)
- rules += '\t$(NACL_CXX) -o $@ $< -m%s $(%s_CXXFLAGS)\n\n' % (arch,
- macro)
- object_sets.append('$(%s)' % objs)
- target_name = '%s_x86_%s%s' % (name, arch, ext)
- 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)
+ for tc in tools:
+ rules += '#\n# Rules for %s toolchain\n#\n%s:\n\t$(MKDIR) %s\n' % (
+ tc, tc, tc)
+ for target in desc['TARGETS']:
+ name = target['NAME']
+ ext = GetExtType(target)
+ sources = target['SOURCES']
+ cc_sources = [fname for fname in sources if fname.endswith('.c')]
+ cxx_sources = [fname for fname in sources if fname.endswith('.cc')]
+ rules += GenerateNEXE(tc, name, ext, cc_sources, cxx_sources)
+ if target['TYPE'] == 'main':
+ nexe = name
+ targets.append('%s/%s.nmf' % (tc, name))
+ replace = BuildToolDict(tc, nexe)
+ rules += Replace(NMF_RULE, replace)
- nmf = desc['NAME'] + '.nmf'
- nmfs = '%s : %s\n' % (nmf, ' '.join(targets))
- nmfs +='\t$(NMF) $(NMF_ARGS) -o $@ $(NMF_PATHS) $^%s\n' % remaps
- targets = 'all : '+ ' '.join(targets + [nmf])
+ targets = 'all : '+ ' '.join(targets)
return {
'__PROJECT_SETTINGS__' : settings,
'__PROJECT_TARGETS__' : targets,
'__PROJECT_RULES__' : rules,
- '__PROJECT_NMFS__' : nmfs,
'__PROJECT_PRELAUNCH__' : prelaunch,
'__PROJECT_PRERUN__' : prerun,
'__PROJECT_POSTLAUNCH__' : postlaunch
« no previous file with comments | « native_client_sdk/src/build_tools/build_sdk.py ('k') | native_client_sdk/src/build_tools/template.mk » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698