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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import buildbot_common 6 import buildbot_common
7 import optparse 7 import optparse
8 import os 8 import os
9 import sys 9 import sys
10 10
11 11
12 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) 12 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
13 SDK_SRC_DIR = os.path.dirname(SCRIPT_DIR) 13 SDK_SRC_DIR = os.path.dirname(SCRIPT_DIR)
14 SDK_EXAMPLE_DIR = os.path.join(SDK_SRC_DIR, 'examples') 14 SDK_EXAMPLE_DIR = os.path.join(SDK_SRC_DIR, 'examples')
15 SDK_DIR = os.path.dirname(SDK_SRC_DIR) 15 SDK_DIR = os.path.dirname(SDK_SRC_DIR)
16 SRC_DIR = os.path.dirname(SDK_DIR) 16 SRC_DIR = os.path.dirname(SDK_DIR)
17 OUT_DIR = os.path.join(SRC_DIR, 'out') 17 OUT_DIR = os.path.join(SRC_DIR, 'out')
18 PPAPI_DIR = os.path.join(SRC_DIR, 'ppapi') 18 PPAPI_DIR = os.path.join(SRC_DIR, 'ppapi')
19 19
20 ARCHITECTURES = ['32', '64'] 20 ARCHITECTURES = ['32', '64']
21 21
22 SRC_EXT = {
23 'c': 'CC',
24 'cc' : 'CXX',
25 '.so' : '.so',
26 '.nexe': '.nexe'
27 }
28
29
30 def Replace(text, replacements):
31 for key in replacements:
32 print 'Print replacing: %s' % key
33 text = text.replace(key, replacements[key])
34 return text
35
22 36
23 def WriteMakefile(srcpath, dstpath, replacements): 37 def WriteMakefile(srcpath, dstpath, replacements):
24 text = open(srcpath, 'rb').read() 38 text = open(srcpath, 'rb').read()
25 for key in replacements: 39 text = Replace(text, replacements)
26 text = text.replace(key, replacements[key])
27 open(dstpath, 'wb').write(text) 40 open(dstpath, 'wb').write(text)
28 41
29 42
30 def GetExtType(desc): 43 def GetExtType(desc):
31 if desc['TYPE'] in ['main', 'nexe']: 44 if desc['TYPE'] in ['main', 'nexe']:
32 ext = '.nexe' 45 ext = '.nexe'
33 else: 46 else:
34 ext = '.so' 47 ext = '.so'
35 return ext 48 return ext
36 49
37 50
38 def GenPatsubst(arch, macro, ext, EXT): 51 def GenPatsubst(arch, tool, macro, ext, EXT):
39 return '$(patsubst %%.%s,%%_%s.o,$(%s_%s))' % (ext, arch, macro, EXT) 52 return '$(patsubst %%.%s,%s/%%_%s.o,$(%s_%s))' % (ext, tool, arch, macro, EXT)
40 53
41 54
42 def SetVar(varname, values): 55 def SetVar(varname, values):
43 if not values: 56 if not values:
44 return varname + ':=\n' 57 return varname + ':=\n'
45 58
46 line = varname + ':=' 59 line = varname + ':='
47 out = '' 60 out = ''
48 for value in values: 61 for value in values:
49 if len(line) + len(value) > 78: 62 if len(line) + len(value) > 78:
(...skipping 13 matching lines...) Expand all
63 # Add sources for each target 76 # Add sources for each target
64 for target in desc['TARGETS']: 77 for target in desc['TARGETS']:
65 sources.extend(target['SOURCES']) 78 sources.extend(target['SOURCES'])
66 79
67 # And HTML and data files 80 # And HTML and data files
68 sources.append(desc['NAME'] + '.html') 81 sources.append(desc['NAME'] + '.html')
69 sources.extend(desc.get('DATA', [])) 82 sources.extend(desc.get('DATA', []))
70 return sources 83 return sources
71 84
72 85
86 def BuildToolDict(tc, proj, arch='', ext='.nexe', OBJS='', TARG='', REMAP=''):
87 TC = tc.upper()
88 PROJ = proj.upper()
89
90 if not OBJS:
91 OBJS = '%s_%s_%s_%s_O' % (TC, PROJ, arch, ext)
92
93 if not TARG:
94 TARG = '%s_x86_%s%s' % (proj,arch,ext)
95
96 replace = {
97 '<ARCH>': arch,
98 '<CC>': '%s_%s' % (TC, SRC_EXT[ext]),
99 '<DUMP>': '%s_DUMP' % TC,
100 '<ext>' : ext,
101 '<EXT>' : SRC_EXT[ext],
102 '<LINK>': '%s_LINK' % TC,
103 '<OBJS>' : OBJS,
104 '<proj>': proj,
105 '<PROJ>': PROJ,
106 '<REMAP>': REMAP,
107 '<TARG>': TARG,
108 '<TAB>': '\t',
109 '<tc>' : tc,
110 '<TC>' : TC
111 }
112 return replace
113
114
115 def GenerateNEXE(toolchain, name, ext, cc_sources, cxx_sources):
116 COMPILE_RULE = """
117 <OBJS>:=$(patsubst %.<ext>, <tc>/%_<ARCH>.o,$(<PROJ>_<EXT>))
118 $(<OBJS>) : <tc>/%_<ARCH>.o : %.<ext> $(THIS_MAKE) | <tc>
119 <TAB>$(<CC>) -o $@ $< -m<ARCH> $(<PROJ>_<EXT>FLAGS) -DTCNAME=\\"<tc>\\"
120 """
121 LINK_RULE = """
122 <tc>/<TARG> : $(<OBJS>)
123 <TAB>$(<LINK>) -o $@ $^ -m<ARCH> $(<PROJ>_LDFLAGS)
124 """
125 rules = ''
126 targs = []
127 for arch in ARCHITECTURES:
128 object_sets = []
129 remap = ''
130 if cc_sources:
131 replace = BuildToolDict(toolchain, name, arch, 'c')
132 rules += Replace(COMPILE_RULE, replace)
133 object_sets.append(replace['<OBJS>'])
134
135 if cxx_sources:
136 replace = BuildToolDict(toolchain, name, arch, 'cc')
137 rules += Replace(COMPILE_RULE, replace)
138 object_sets.append(replace['<OBJS>'])
139
140 objs = ' '.join(object_sets)
141 replace = BuildToolDict(toolchain, name, arch, ext, OBJS=objs)
142 rules += Replace(LINK_RULE, replace)
143 if ext == '.so':
144 remap = ' -n %s,%s.so' % (replace['<TARG>'], name)
145 rules += '%s_NMF+=%s/%s\n' % (replace['<TC>'], toolchain, replace['<TARG>'])
146 if remap:
147 rules += '%s_REMAP+=%s\n' % (replace['<TC>'], remap)
148 return rules
149
150
73 def GenerateReplacements(desc): 151 def GenerateReplacements(desc):
152 NMF_RULE = """
153 <tc>/<proj>.nmf : $(<TC>_NMF)
154 <TAB>$(NMF) -D $(<DUMP>) -o $@ $(<TC>_PATHS) $^ -t <tc> -s <tc> $(<TC>_REMAP)
155
156 """
74 # Generate target settings 157 # Generate target settings
75 tools = desc['TOOLS'] 158 tools = desc['TOOLS']
76 159
77 prerun = desc.get('PRE', '') 160 prerun = desc.get('PRE', '')
78 postlaunch = desc.get('POST', '') 161 postlaunch = desc.get('POST', '')
79 prelaunch = desc.get('LAUNCH', '') 162 prelaunch = desc.get('LAUNCH', '')
80 163
81 settings = SetVar('VALID_TOOLCHAINS', tools) 164 settings = SetVar('VALID_TOOLCHAINS', tools)
82 settings+= 'TOOLCHAIN?=%s\n\n' % tools[0] 165 settings+= 'TOOLCHAIN?=%s\n\n' % tools[0]
83 166
(...skipping 15 matching lines...) Expand all
99 settings += SetVar(macro + '_CCFLAGS', flags) 182 settings += SetVar(macro + '_CCFLAGS', flags)
100 183
101 if cxx_sources: 184 if cxx_sources:
102 flags = target.get('CXXFLAGS', ['$(NACL_CXXFLAGS)']) 185 flags = target.get('CXXFLAGS', ['$(NACL_CXXFLAGS)'])
103 settings += SetVar(macro + '_CXX', cxx_sources) 186 settings += SetVar(macro + '_CXX', cxx_sources)
104 settings += SetVar(macro + '_CXXFLAGS', flags) 187 settings += SetVar(macro + '_CXXFLAGS', flags)
105 188
106 flags = target.get('LDFLAGS', ['$(NACL_LDFLAGS)']) 189 flags = target.get('LDFLAGS', ['$(NACL_LDFLAGS)'])
107 settings += SetVar(macro + '_LDFLAGS', flags) 190 settings += SetVar(macro + '_LDFLAGS', flags)
108 191
109 for arch in ARCHITECTURES: 192 for tc in tools:
110 object_sets = [] 193 rules += '#\n# Rules for %s toolchain\n#\n%s:\n\t$(MKDIR) %s\n' % (
111 if cc_sources: 194 tc, tc, tc)
112 objs = '%s_%s_CC_O' % (macro, arch) 195 for target in desc['TARGETS']:
113 rules += '%s:=%s\n' % (objs, GenPatsubst(arch, macro, 'c', 'CC')) 196 name = target['NAME']
114 rules += '$(%s) : %%_%s.o : %%.c $(THIS_MAKEFILE)\n' % (objs, arch) 197 ext = GetExtType(target)
115 rules += '\t$(NACL_CC) -o $@ $< -m%s $(%s_CCFLAGS)\n\n' % (arch, macro) 198 sources = target['SOURCES']
116 object_sets.append('$(%s)' % objs) 199 cc_sources = [fname for fname in sources if fname.endswith('.c')]
117 if cxx_sources: 200 cxx_sources = [fname for fname in sources if fname.endswith('.cc')]
118 objs = '%s_%s_CXX_O' % (macro, arch) 201 rules += GenerateNEXE(tc, name, ext, cc_sources, cxx_sources)
119 rules += '%s:=%s\n' % (objs, GenPatsubst(arch, macro, 'cc', 'CXX')) 202 if target['TYPE'] == 'main':
120 rules += '$(%s) : %%_%s.o : %%.cc $(THIS_MAKEFILE)\n' % (objs, arch) 203 nexe = name
121 rules += '\t$(NACL_CXX) -o $@ $< -m%s $(%s_CXXFLAGS)\n\n' % (arch, 204 targets.append('%s/%s.nmf' % (tc, name))
122 macro) 205 replace = BuildToolDict(tc, nexe)
123 object_sets.append('$(%s)' % objs) 206 rules += Replace(NMF_RULE, replace)
124 target_name = '%s_x86_%s%s' % (name, arch, ext)
125 targets.append(target_name)
126 rules += '%s : %s\n' % (target_name, ' '.join(object_sets))
127 rules += '\t$(NACL_LINK) -o $@ $^ -m%s $(%s_LDFLAGS)\n\n' % (arch, macro)
128 if target['TYPE'] == 'so':
129 remaps += ' -n %s,%s.so' % (target_name, name)
130 207
131 nmf = desc['NAME'] + '.nmf'
132 nmfs = '%s : %s\n' % (nmf, ' '.join(targets))
133 nmfs +='\t$(NMF) $(NMF_ARGS) -o $@ $(NMF_PATHS) $^%s\n' % remaps
134 208
135 targets = 'all : '+ ' '.join(targets + [nmf]) 209 targets = 'all : '+ ' '.join(targets)
136 return { 210 return {
137 '__PROJECT_SETTINGS__' : settings, 211 '__PROJECT_SETTINGS__' : settings,
138 '__PROJECT_TARGETS__' : targets, 212 '__PROJECT_TARGETS__' : targets,
139 '__PROJECT_RULES__' : rules, 213 '__PROJECT_RULES__' : rules,
140 '__PROJECT_NMFS__' : nmfs,
141 '__PROJECT_PRELAUNCH__' : prelaunch, 214 '__PROJECT_PRELAUNCH__' : prelaunch,
142 '__PROJECT_PRERUN__' : prerun, 215 '__PROJECT_PRERUN__' : prerun,
143 '__PROJECT_POSTLAUNCH__' : postlaunch 216 '__PROJECT_POSTLAUNCH__' : postlaunch
144 } 217 }
145 218
146 219
147 # 'KEY' : ( <TYPE>, [Accepted Values], <Required?>) 220 # 'KEY' : ( <TYPE>, [Accepted Values], <Required?>)
148 DSC_FORMAT = { 221 DSC_FORMAT = {
149 'TOOLS' : (list, ['newlib', 'glibc', 'pnacl'], True), 222 'TOOLS' : (list, ['newlib', 'glibc', 'pnacl'], True),
150 'TARGETS' : (list, { 223 'TARGETS' : (list, {
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 if options.master: 420 if options.master:
348 master_in = os.path.join(SDK_EXAMPLE_DIR, 'Makefile') 421 master_in = os.path.join(SDK_EXAMPLE_DIR, 'Makefile')
349 master_out = os.path.join(options.dstroot, 'examples', 'Makefile') 422 master_out = os.path.join(options.dstroot, 'examples', 'Makefile')
350 GenerateExamplesMakefile(master_in, master_out, examples) 423 GenerateExamplesMakefile(master_in, master_out, examples)
351 424
352 return 0 425 return 0
353 426
354 427
355 if __name__ == '__main__': 428 if __name__ == '__main__':
356 sys.exit(main(sys.argv[1:])) 429 sys.exit(main(sys.argv[1:]))
OLDNEW
« 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