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

Side by Side Diff: native_client_sdk/src/build_tools/make_rules.py

Issue 10828187: [NaCl SDK] Support multiple configs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 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 os
7
6 8
7 # 9 #
8 # Default macros for various platforms. 10 # Default macros for various platforms.
9 # 11 #
10 NEWLIB_DEFAULTS = """ 12 NEWLIB_DEFAULTS = """
11 NEWLIB_CC?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-gcc -c 13 NEWLIB_CC?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-gcc -c
12 NEWLIB_CXX?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-g++ -c -std=gnu++98 14 NEWLIB_CXX?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-g++ -c -std=gnu++98
13 NEWLIB_LINK?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-g++ -Wl,-as-needed 15 NEWLIB_LINK?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-g++ -Wl,-as-needed
14 NEWLIB_LIB?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-ar r 16 NEWLIB_LIB?=$(TC_PATH)/$(OSNAME)_x86_newlib/bin/i686-nacl-ar r
15 NEWLIB_DUMP?=$(TC_PATH)/$(OSNAME)_x86_newlib/x86_64-nacl/bin/objdump 17 NEWLIB_DUMP?=$(TC_PATH)/$(OSNAME)_x86_newlib/x86_64-nacl/bin/objdump
16 NEWLIB_CCFLAGS?=-O0 -MMD -g -pthread $(NACL_WARNINGS) -idirafter $(NACL_SDK_ROOT )/include 18 NEWLIB_CCFLAGS?=-MMD -pthread $(NACL_WARNINGS) -idirafter $(NACL_SDK_ROOT)/inclu de
17 NEWLIB_LDFLAGS?=-g -pthread 19 NEWLIB_LDFLAGS?=-pthread
18 """ 20 """
19 21
20 GLIBC_DEFAULTS = """ 22 GLIBC_DEFAULTS = """
21 GLIBC_CC?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-gcc -c 23 GLIBC_CC?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-gcc -c
22 GLIBC_CXX?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-g++ -c -std=gnu++98 24 GLIBC_CXX?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-g++ -c -std=gnu++98
23 GLIBC_LINK?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-g++ -Wl,-as-needed 25 GLIBC_LINK?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-g++ -Wl,-as-needed
24 GLIBC_LIB?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-ar r 26 GLIBC_LIB?=$(TC_PATH)/$(OSNAME)_x86_glibc/bin/i686-nacl-ar r
25 GLIBC_DUMP?=$(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/bin/objdump 27 GLIBC_DUMP?=$(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/bin/objdump
26 GLIBC_PATHS:=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib32 28 GLIBC_PATHS:=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib32
27 GLIBC_PATHS+=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib 29 GLIBC_PATHS+=-L $(TC_PATH)/$(OSNAME)_x86_glibc/x86_64-nacl/lib
28 GLIBC_CCFLAGS?=-O0 -MMD -g -pthread $(NACL_WARNINGS) -idirafter $(NACL_SDK_ROOT) /include 30 GLIBC_CCFLAGS?=-MMD -pthread $(NACL_WARNINGS) -idirafter $(NACL_SDK_ROOT)/includ e
29 GLIBC_LDFLAGS?=-g -pthread 31 GLIBC_LDFLAGS?=-pthread
30 """ 32 """
31 33
32 PNACL_DEFAULTS = """ 34 PNACL_DEFAULTS = """
33 PNACL_CC?=$(TC_PATH)/$(OSNAME)_x86_pnacl/newlib/bin/pnacl-clang -c 35 PNACL_CC?=$(TC_PATH)/$(OSNAME)_x86_pnacl/newlib/bin/pnacl-clang -c
34 PNACL_CXX?=$(TC_PATH)/$(OSNAME)_x86_pnacl/newlib/bin/pnacl-clang++ -c -std=gnu++ 98 36 PNACL_CXX?=$(TC_PATH)/$(OSNAME)_x86_pnacl/newlib/bin/pnacl-clang++ -c -std=gnu++ 98
35 PNACL_LINK?=$(TC_PATH)/$(OSNAME)_x86_pnacl/newlib/bin/pnacl-clang++ 37 PNACL_LINK?=$(TC_PATH)/$(OSNAME)_x86_pnacl/newlib/bin/pnacl-clang++
36 PNACL_LIB?=$(TC_PATH)/$(OSNAME)_x86_pnacl/newlib/bin/pnacl-ar r 38 PNACL_LIB?=$(TC_PATH)/$(OSNAME)_x86_pnacl/newlib/bin/pnacl-ar r
37 PNACL_DUMP?=$(TC_PATH)/$(OSNAME)_x86_pnacl/newlib/bin/objdump 39 PNACL_DUMP?=$(TC_PATH)/$(OSNAME)_x86_pnacl/newlib/bin/objdump
38 PNACL_CCFLAGS?=-O0 -MMD -g -pthread $(NACL_WARNINGS) -idirafter $(NACL_SDK_ROOT) /include 40 PNACL_CCFLAGS?=-MMD -pthread $(NACL_WARNINGS) -idirafter $(NACL_SDK_ROOT)/includ e
39 PNACL_LDFLAGS?=-g -pthread 41 PNACL_LDFLAGS?=-pthread
40 TRANSLATE:=$(TC_PATH)/$(OSNAME)_x86_pnacl/newlib/bin/pnacl-translate 42 TRANSLATE:=$(TC_PATH)/$(OSNAME)_x86_pnacl/newlib/bin/pnacl-translate
41 """ 43 """
42 44
43 WIN_DEFAULTS = """ 45 WIN_DEFAULTS = """
44 WIN_CC?=cl.exe 46 WIN_CC?=cl.exe /nologo
45 WIN_CXX?=cl.exe 47 WIN_CXX?=cl.exe /nologo
46 WIN_LINK?=link.exe 48 WIN_LINK?=link.exe /nologo
47 WIN_LIB?=lib.exe 49 WIN_LIB?=lib.exe /nologo
48 WIN_CCFLAGS=/I$(NACL_SDK_ROOT)/include /I$(NACL_SDK_ROOT)/include/win -D WIN32 - D _WIN32 50 WIN_CCFLAGS=/I$(NACL_SDK_ROOT)/include /I$(NACL_SDK_ROOT)/include/win -D WIN32 - D _WIN32
49 WIN_LDFLAGS=/LIBPATH:$(NACL_SDK_ROOT)/lib/win_x86_32_host
50 """ 51 """
51 52
52 # 53 #
53 # Compile rules for various platforms. 54 # Compile rules for various platforms.
54 # 55 #
55 NACL_CC_RULE = """ 56 CC_RULE = '<tc>/<config>/<name>_<ARCH>.o : %.<ext> $(THIS_MAKE) | <tc>/<config>'
56 <OBJS>:=$(patsubst %.<ext>, <tc>/%_<ARCH>.o,$(<PROJ>_<EXT>)) 57 NACL_CC_RULES = {
57 DEPFILES+=$(<OBJS>:.o=.d) 58 'Debug': '<TAB>$(<CC>) -o $@ $< -g -O0 <MACH> $(<PROJ>_<EXT>FLAGS) -DTCNAME=<t c> $(<TC>_CCFLAGS) <DEFLIST> <INCLIST>',
58 $(<OBJS>) : <tc>/%_<ARCH>.o : %.<ext> $(THIS_MAKE) | <tc> 59 'Release': '<TAB>$(<CC>) -o $@ $< -O2 <MACH> $(<PROJ>_<EXT>FLAGS) -DTCNAME=<tc > $(<TC>_CCFLAGS) <DEFLIST> <INCLIST>',
59 <TAB>$(<CC>) -o $@ $< <MACH> -DTCNAME=<tc> $(<TC>_CCFLAGS) $(<PROJ>_<EXT>FLAGS) <DEFLIST> <INCLUDELIST> 60 }
60 """
61 61
62 SO_CC_RULE = """ 62 SO_CC_RULES = {
63 <OBJS>:=$(patsubst %.<ext>, <tc>/%_<ARCH>.o,$(<PROJ>_<EXT>)) 63 'Debug': '<TAB>$(<CC>) -o $@ $< -g -O0 <MACH> -fPIC $(<PROJ>_<EXT>FLAGS) -DTCN AME=<tc> $(<TC>_CCFLAGS) <DEFLIST> <INCLIST>',
64 DEPFILES+=$(<OBJS>:.o=.d) 64 'Release': '<TAB>$(<CC>) -o $@ $< -02 <MACH> -fPIC $(<PROJ>_<EXT>FLAGS) -DTCNA ME=<tc> $(<TC>_CCFLAGS) <DEFLIST> <INCLIST>'
65 $(<OBJS>) : <tc>/%_<ARCH>.o : %.<ext> $(THIS_MAKE) | <tc> 65 }
66 <TAB>$(<CC>) -o $@ $< <MACH> -fPIC -DTCNAME=<tc> $(<TC>_CCFLAGS) $(<PROJ>_<EXT>F LAGS) <DEFLIST> <INCLUDELIST>
67 """
68 66
69 WIN_CC_RULE = """ 67 WIN_CC_RULES = {
70 <OBJS>:=$(patsubst %.<ext>, <tc>/%.obj,$(<PROJ>_<EXT>)) 68 'Debug': '<TAB>$(<CC>) /Od /Fo$@ /MTd /c $< -DTCNAME=host $(WIN_CCFLAGS) <DEFL IST> <INCLIST>',
71 $(<OBJS>) : <tc>/%.obj : %.<ext> $(THIS_MAKE) | <tc> 69 'Release': '<TAB>$(<CC>) /O2 /Fo$@ /MT /c $< -DTCNAME=host $(WIN_CCFLAGS) <DEF LIST> <INCLIST>'
72 <TAB>$(<CC>) /Fo$@ /c $< -DTCNAME=host $(WIN_CCFLAGS) <DEFLIST> <INCLUDELIST> 70 }
73 """
74 71
75 # 72 #
76 # Link rules for various platforms. 73 # Link rules for various platforms.
77 # 74 #
78 NEXE_LINK_RULE = """ 75 NEXE_LINK_RULES = {
79 <tc>/<proj>_<ARCH>.nexe : <OBJS> 76 'Debug': '<TAB>$(<LINK>) -o $@ $^ -g <MACH> $(<PROJ>_LDFLAGS) $(<TC>_LDFLAGS) <LIBLIST>',
80 <TAB>$(<LINK>) -o $@ $^ <MACH> $(<PROJ>_LDFLAGS) $(<TC>_LDFLAGS) <LIBLIST> 77 'Release': '<TAB>$(<LINK>) -o $@ $^ <MACH> $(<PROJ>_LDFLAGS) $(<TC>_LDFLAGS) < LIBLIST>'
81 <TC>_NMF+=<tc>/<proj>_<ARCH>.nexe 78 }
82 """
83 79
84 PEXE_LINK_RULE = """ 80 SO_LINK_RULES = {
85 <tc>/<proj>.pexe : <OBJS> 81 'Debug': '<TAB>$(<LINK>) -o $@ $^ -g <MACH> -shared $(<PROJ>_LDFLAGS) <LIBLIST >',
86 <TAB>$(<LINK>) -o $@ $^ $(<PROJ>_LDFLAGS) $(<TC>_LDFLAGS) <LIBLIST> 82 'Release': '<TAB>$(<LINK>) -o $@ $^ <MACH> -shared $(<PROJ>_LDFLAGS) <LIBLIST> ',
83 }
87 84
88 <tc>/<proj>_x86_32.nexe : <tc>/<proj>.pexe 85 PEXE_TRANSLATE_RULE = """
89 <TAB>$(TRANSLATE) -arch x86-32 $< -o $@ 86 <tc>/<config>/<proj>_x86_32.nexe : <tc>/<config>/<proj>.pexe
87 <TAB>$(TRANSLATE) -arch x86-32 $< -o $@
90 88
91 <tc>/<proj>_x86_64.nexe : <tc>/<proj>.pexe 89 <tc>/<config>/<proj>_x86_64.nexe : <tc>/<config>/<proj>.pexe
92 <TAB>$(TRANSLATE) -arch x86-64 $< -o $@ 90 <TAB>$(TRANSLATE) -arch x86-64 $< -o $@
93 91
94 <tc>/<proj>_arm.nexe : <tc>/<proj>.pexe 92 <tc>/<config>/<proj>_arm.nexe : <tc>/<config>/<proj>.pexe
95 <TAB>$(TRANSLATE) -arch arm $< -o $@ 93 <TAB>$(TRANSLATE) -arch arm $< -o $@"""
96 PNACL_NMF:=<tc>/<proj>_x86_32.nexe <tc>/<proj>_x86_64.nexe <tc>/<proj>_arm.nexe
97 """
98 94
99 SO_LINK_RULE = """ 95 PEXE_LINK_RULES = {
100 <tc>/<proj>_<ARCH>.so : <OBJS> 96 'Debug': '<TAB>$(<LINK>) -o $@ $^ -g $(<PROJ>_LDFLAGS) $(<TC>_LDFLAGS) <LIBLIS T>\n' + PEXE_TRANSLATE_RULE,
101 <TAB>$(<LINK>) -o $@ $^ <MACH> -shared $(<PROJ>_LDFLAGS) <LIBLIST> 97 'Release': '<TAB>$(<LINK>) -o $@ $^ $(<PROJ>_LDFLAGS) $(<TC>_LDFLAGS) <LIBLIST >\n' + PEXE_TRANSLATE_RULE,
102 GLIBC_REMAP+= -n <proj>_<ARCH>.so,<proj>.so 98 }
103 <TC>_NMF+=<tc>/<proj>_<ARCH>.so
104 """
105 99
106 WIN_LINK_RULE = """ 100 WIN_LINK_RULES = {
107 win/<proj>.dll : <OBJS> 101 'Debug': '<TAB>$(<LINK>) /DLL /OUT:$@ $(<PROJ>_LDFLAGS) /LIBPATH:$(NACL_SDK_RO OT)/lib/win_x86_32_host/Debug $^ <LIBLIST> $(WIN_LDFLAGS)',
108 <TAB>$(<LINK>) /DLL /OUT:$@ $(<PROJ>_<EXT>FLAGS) /LIBPATH:$(NACL_SDK_ROOT)/lib $ ^ <LIBLIST> $(WIN_LDFLAGS) 102 'Release': '<TAB>$(<LINK>) /DLL /OUT:$@ $(<PROJ>_LDFLAGS) /LIBPATH:$(NACL_SDK_ ROOT)/lib/win_x86_32_host/Release $^ <LIBLIST> $(WIN_LDFLAGS)'
109 <TC>_NMF+=<tc>/<proj>.dll 103 }
110 104
105 WIN_LAUNCH_RULES = """
111 HOST_ARGS:=--register-pepper-plugins=$(abspath win/<proj>.dll);application/x-nac l 106 HOST_ARGS:=--register-pepper-plugins=$(abspath win/<proj>.dll);application/x-nac l
112 LAUNCH_HOST: CHECK_FOR_CHROME all 107 LAUNCH_HOST: CHECK_FOR_CHROME all
113 <TAB>$(CHROME_PATH) $(HOST_ARGS) "localhost:5103/index_win.html" 108 <TAB>$(CHROME_PATH) $(HOST_ARGS) "localhost:5103/index_win.html"
114 """ 109 """
115 110
116 # 111 #
117 # Lib rules for various platforms. 112 # Lib rules for various platforms.
118 # 113 #
119 POSIX_LIB_RULE = """ 114 POSIX_LIB_RULES = {
120 $(NACL_SDK_ROOT)/lib/$(OSNAME)_<ARCH>_<tc>/lib<proj>.a : <OBJS> 115 'Debug':
121 <TAB>$(MKDIR) -p $(dir $@) 116 '<TAB>$(MKDIR) -p $(dir $@)\n'
122 <TAB>$(<LIB>) $@ $^ 117 '<TAB>$(<LIB>) $@ $^',
123 """ 118 'Release':
119 '<TAB>$(MKDIR) -p $(dir $@)\n'
120 '<TAB>$(<LIB>) $@ $^',
121 }
124 122
125 WIN_LIB_RULE = """ 123 WIN_LIB_RULES = {
126 $(NACL_SDK_ROOT)/lib/win_<ARCH>_host/<proj>.lib : <OBJS> 124 'Debug': '<TAB>$(<LIB>) /OUT:$@ $^ $(WIN_LDFLAGS) <LIBLIST>',
127 <TAB>$(<LIB>) /OUT:$@ $^ $(<PROJ>_<EXT>FLAGS) <LIBLIST> 125 'Release': '<TAB>$(<LIB>) /OUT:$@ $^ $(WIN_LDFLAGS) <LIBLIST>'
128 """ 126 }
129 127
130 128
131 129 #
130 # NMF rules for various platforms.
131 #
132 NMF_RULE = """ 132 NMF_RULE = """
133 <tc>/<proj>.nmf : $(<TC>_NMF) 133 <tc>/<config>/<proj>.nmf : <NMF_TARGETS>
134 <TAB>$(NMF) -D $(<DUMP>) -o $@ $^ -t <tc> -s <tc> 134 <TAB>$(NMF) -D $(<DUMP>) -o $@ $^ -t <tc> -s <tc>/<config>
135 """ 135 """
136 136
137 NMF_EMPTY = """ 137 NMF_EMPTY = """
138 <tc>/<proj>.nmf : $(<TC>_NMF) | <tc> 138 <tc>/<config>/<proj>.nmf : <NMF_TARGETS> | <tc>/<config>
139 <TAB>echo {} > $@ 139 <TAB>echo {} > $@
140 """ 140 """
141 141
142 GLIBC_NMF_RULE = """ 142 GLIBC_NMF_RULE = """
143 <tc>/<proj>.nmf : $(<TC>_NMF) 143 <tc>/<config>/<proj>.nmf : <NMF_TARGETS>
144 <TAB>$(NMF) -D $(<DUMP>) -o $@ $(GLIBC_PATHS) $^ -t <tc> -s <tc> $(<TC>_REMAP) 144 <TAB>$(NMF) -D $(<DUMP>) -o $@ $(GLIBC_PATHS) $^ -t <tc> -s <tc>/<config> $(GLIB C_REMAP)
145 """ 145 """
146 146
147
148 EXT_MAP = { 147 EXT_MAP = {
149 'c': 'CC', 148 'c': 'CC',
150 'cc': 'CXX' 149 'cc': 'CXX'
151 } 150 }
152 151
153 WIN_TOOL = { 152 WIN_TOOL = {
154 'DEFINE': '-D%s', 153 'DEFINE': '-D%s',
155 'INCLUDE': '/I%s', 154 'INCLUDE': '/I%s',
156 'LIBRARY': '%s.lib', 155 'LIBRARY': '%s.lib',
157 'main': '<tc>/<proj>.dll', 156 'MAIN': '<tc>/<config>/<proj>.dll',
158 'nmf': '<tc>/<proj>.nmf', 157 'NMFMAIN': '<tc>/<config>/<proj>.dll',
159 'so': None, 158 'SO': None,
160 'lib': '$(NACL_SDK_ROOT)/lib/win_<ARCH>_host/<proj>.lib', 159 'LIB': '$(NACL_SDK_ROOT)/lib/win_<ARCH>_host/<config>/<proj>.lib',
161 } 160 }
162 161
163 NACL_TOOL = { 162 NACL_TOOL = {
164 'DEFINE': '-D%s', 163 'DEFINE': '-D%s',
165 'INCLUDE': '-I%s', 164 'INCLUDE': '-I%s',
166 'LIBRARY': '-l%s', 165 'LIBRARY': '-l%s',
167 'main': '<tc>/<proj>_<ARCH>.nexe', 166 'MAIN': '<tc>/<config>/<proj>_<ARCH>.nexe',
168 'nmf': '<tc>/<proj>.nmf', 167 'NMFMAIN': '<tc>/<config>/<proj>_<ARCH>.nexe',
169 'so': '<tc>/<proj>_<ARCH>.so', 168 'SO': '<tc>/<config>/<proj>_<ARCH>.so',
170 'lib': '$(NACL_SDK_ROOT)/lib/$(OSNAME)_<ARCH>_<tc>/lib<proj>.a', 169 'LIB': '$(NACL_SDK_ROOT)/lib/$(OSNAME)_<ARCH>_<tc>/<config>/lib<proj>.a',
170 }
171
172 PNACL_TOOL = {
173 'DEFINE': '-D%s',
174 'INCLUDE': '-I%s',
175 'LIBRARY': '-l%s',
176 'MAIN': '<tc>/<config>/<proj>.pexe',
177 'NMFMAIN':
178 '<tc>/<config>/<proj>_x86_32.nexe '
179 '<tc>/<config>/<proj>_x86_64.nexe '
180 '<tc>/<config>/<proj>_arm.nexe',
181 'SO': None,
182 'LIB': '$(NACL_SDK_ROOT)/lib/$(OSNAME)_<ARCH>_<tc>/<config>/lib<proj>.a',
171 } 183 }
172 184
173 185
174 # 186 #
175 # Various Architectures 187 # Various Architectures
176 # 188 #
177 NACL_X86_32 = { 189 NACL_X86_32 = {
178 '<arch>': '32', 190 '<arch>': '32',
179 '<ARCH>': 'x86_32', 191 '<ARCH>': 'x86_32',
180 '<MACH>': '-m32', 192 '<MACH>': '-m32',
(...skipping 12 matching lines...) Expand all
193 '<arch>': '', 205 '<arch>': '',
194 '<ARCH>': 'x86_32', 206 '<ARCH>': 'x86_32',
195 '<MACH>': '', 207 '<MACH>': '',
196 } 208 }
197 209
198 210
199 BUILD_RULES = { 211 BUILD_RULES = {
200 'newlib' : { 212 'newlib' : {
201 'ARCHES': [NACL_X86_32, NACL_X86_64], 213 'ARCHES': [NACL_X86_32, NACL_X86_64],
202 'DEFS': NEWLIB_DEFAULTS, 214 'DEFS': NEWLIB_DEFAULTS,
203 'CC' : NACL_CC_RULE, 215 'CC' : NACL_CC_RULES,
204 'CXX' : NACL_CC_RULE, 216 'CXX' : NACL_CC_RULES,
205 'NMF' : NMF_RULE, 217 'NMF' : NMF_RULE,
206 'MAIN': NEXE_LINK_RULE, 218 'MAIN': NEXE_LINK_RULES,
207 'LIB': POSIX_LIB_RULE, 219 'LIB': POSIX_LIB_RULES,
208 'SO' : None, 220 'SO' : None,
209 'TOOL': NACL_TOOL, 221 'TOOL': NACL_TOOL,
210 }, 222 },
211 'glibc' : { 223 'glibc' : {
212 'ARCHES': [NACL_X86_32, NACL_X86_64], 224 'ARCHES': [NACL_X86_32, NACL_X86_64],
213 'DEFS': GLIBC_DEFAULTS, 225 'DEFS': GLIBC_DEFAULTS,
214 'CC': NACL_CC_RULE, 226 'CC': NACL_CC_RULES,
215 'CXX': NACL_CC_RULE, 227 'CXX': NACL_CC_RULES,
216 'NMF' : GLIBC_NMF_RULE, 228 'NMF' : GLIBC_NMF_RULE,
217 'MAIN': NEXE_LINK_RULE, 229 'MAIN': NEXE_LINK_RULES,
218 'LIB': POSIX_LIB_RULE, 230 'LIB': POSIX_LIB_RULES,
219 'SO': SO_LINK_RULE, 231 'SO': SO_LINK_RULES,
220 'TOOL': NACL_TOOL, 232 'TOOL': NACL_TOOL,
221 }, 233 },
222 'pnacl' : { 234 'pnacl' : {
223 'ARCHES': [NACL_PNACL], 235 'ARCHES': [NACL_PNACL],
224 'DEFS': PNACL_DEFAULTS, 236 'DEFS': PNACL_DEFAULTS,
225 'CC': NACL_CC_RULE, 237 'CC': NACL_CC_RULES,
226 'CXX': NACL_CC_RULE, 238 'CXX': NACL_CC_RULES,
227 'NMF' : NMF_RULE, 239 'NMF' : NMF_RULE,
228 'MAIN': PEXE_LINK_RULE, 240 'MAIN': PEXE_LINK_RULES,
229 'LIB': POSIX_LIB_RULE, 241 'LIB': POSIX_LIB_RULES,
230 'SO': None, 242 'SO': None,
231 'TOOL': NACL_TOOL 243 'TOOL': PNACL_TOOL
232 }, 244 },
233 'win' : { 245 'win' : {
234 'ARCHES': [WIN_32], 246 'ARCHES': [WIN_32],
235 'DEFS': WIN_DEFAULTS, 247 'DEFS': WIN_DEFAULTS,
236 'CC': WIN_CC_RULE, 248 'CC': WIN_CC_RULES,
237 'CXX': WIN_CC_RULE, 249 'CXX': WIN_CC_RULES,
238 'NMF' : NMF_EMPTY, 250 'NMF' : NMF_EMPTY,
239 'MAIN': WIN_LINK_RULE, 251 'MAIN': WIN_LINK_RULES,
240 'LIB': WIN_LIB_RULE, 252 'LIB': WIN_LIB_RULES,
241 'SO': None, 253 'SO': None,
242 'TOOL': WIN_TOOL 254 'TOOL': WIN_TOOL
243 } 255 }
244 } 256 }
245 257
246 258 class MakeRules(object):
247 def GetBuildRule(tool, ext): 259 """MakeRules generates Tool, Config, and Arch dependend makefile settings.
248 return BUILD_RULES[tool][ext] 260
249 261 The MakeRules object generates strings used in the makefile based on the
250 262 current object settings such as toolchain, configuration, architecture...
251 def BuildList(tool, key, items): 263 It stores settings such as includes, defines, and lists, and converts them
252 pattern = BUILD_RULES[tool]['TOOL'][key] 264 to the appropriate format whenever the toolchain changes.
253 items = [(pattern % name) for name in items] 265 """
254 return ' '.join(items) 266
255 267 def __init__(self, tc, cfg=None, arch=None):
256 def BuildDefineList(tool, defs): 268 self.tc = tc
257 return BuildList(tool, 'DEFINE', defs) 269 self.defines = []
258 270 self.includes = []
259 271 self.libraries = []
260 def BuildIncludeList(tool, includes): 272 self.vars = {
261 return BuildList(tool, 'INCLUDE', includes) 273 '<TAB>': '\t',
262 274 }
263 275 self.SetToolchain(tc)
264 def BuildLibList(tool, libs): 276 if cfg:
265 return BuildList(tool, 'LIBRARY', libs) 277 self.SetConfig(cfg)
266 278 if arch:
267 279 self.SetArch(arch)
268 def BuildToolDict(toolchain, project, arch = {}, ext='nexe', **kwargs): 280
269 tc = toolchain 281 def _BuildList(self, key, items):
270 TC = toolchain.upper() 282 pattern = BUILD_RULES[self.tc]['TOOL'][key]
271 proj = project 283 if pattern and items:
272 PROJ = proj.upper() 284 items = [pattern % item for item in items]
273 EXT = EXT_MAP.get(ext, ext.upper()) 285 return ' '.join(items)
274 286 return ''
275 replace = { 287
276 '<CC>' : '%s_%s' % (TC, EXT), 288 def BuildDefaults(self):
277 '<DUMP>': '%s_DUMP' % TC, 289 return BUILD_RULES[self.tc]['DEFS']
278 '<ext>' : ext, 290
279 '<EXT>' : EXT, 291 def BuildDirectoryRules(self, configs):
280 '<LIB>': '%s_LIB' % TC, 292 tc = self.tc
281 '<LINK>': '%s_LINK' % TC, 293 rules = '\n#\n# Rules for %s toolchain\n#\n%s:\n\t$(MKDIR) %s\n' % (
282 '<proj>': proj, 294 tc, tc, tc)
283 '<PROJ>': PROJ, 295 for cfg in configs:
284 '<TAB>': '\t', 296 rules += '%s/%s: | %s\n\t$(MKDIR) %s/%s\n' % (tc, cfg, tc, tc, cfg)
285 '<tc>' : tc, 297
286 '<TC>' : TC 298 rules += '\n# Include header dependency files.\n'
287 } 299 for cfg in configs:
288 300 rules += '-include %s/%s/*.d\n' % (tc, cfg)
289 # Add replacements for this platform/architecture 301 return rules + '\n'
290 for key in arch: 302
291 replace[key] = arch[key] 303 def BuildCompileRule(self, EXT, src):
292 304 self.vars['<EXT>'] = EXT
293 # Add other passed in replacements 305 out = '<tc>/<config>/%s_<ARCH>.o : %s $(THIS_MAKE) | <tc>/<config>\n' % (
294 for key in kwargs: 306 os.path.splitext(src)[0], src)
295 replace['<%s>' % key] = kwargs[key] 307 out+= BUILD_RULES[self.tc][EXT][self.cfg] + '\n\n'
296 308 return self.Replace(out)
297 if '<OBJS>' not in replace: 309
298 if replace.get('<ARCH>', ''): 310 def BuildLinkRule(self):
299 replace['<OBJS>'] = '%s_%s_%s_%s_O' % (TC, PROJ, replace['<ARCH>'], EXT) 311 target = BUILD_RULES[self.tc]['TOOL'][self.ptype.upper()]
312 out = ''
313 if self.ptype == 'lib':
314 out = 'ALL_TARGETS+=%s\n' % target
315 out += target + ' : $(<PROJ>_<TC>_<CONFIG>_<ARCH>_O)\n'
316 out += BUILD_RULES[self.tc][self.ptype.upper()][self.cfg] + '\n\n'
317 return self.Replace(out)
318
319 def BuildObjectList(self):
320 obj_list = self.GetObjectList()
321 sub_str = '$(patsubst %%,%s/%s/%%_%s.o,$(%s_OBJS))' % (
322 self.tc, self.cfg, self.arch['<ARCH>'], self.project.upper())
323 return '%s:=%s\n' % (obj_list, sub_str)
324
325 def GetArches(self):
326 return BUILD_RULES[self.tc]['ARCHES']
327
328 def GetObjectList(self):
329 return '%s_%s_%s_%s_O' % (self.project.upper(), self.tc.upper(),
330 self.cfg.upper(), self.arch['<ARCH>'])
331
332 def SetArch(self, arch):
333 self.arch = arch
334 for key in arch:
335 self.vars[key] = arch[key]
336
337 def SetConfig(self, config):
338 self.cfg = config
339 self.vars['<config>'] = config
340 self.vars['<CONFIG>'] = config.upper()
341
342 def SetDefines(self, defs):
343 self.defines = defs
344 self.vars['<DEFLIST>'] = self._BuildList('DEFINE', defs)
345
346 def SetIncludes(self, incs):
347 self.includes = incs
348 self.vars['<INCLIST>'] = self._BuildList('INCLUDE', incs)
349
350 def SetLibraries(self, libs):
351 self.libraries = libs
352 self.vars['<LIBLIST>'] = self._BuildList('LIBRARY', libs)
353
354 def SetProject(self, proj, ptype, defs=None, incs=None, libs=None):
355 self.project = proj
356 self.ptype = ptype
357 self.vars['<proj>'] = proj
358 self.vars['<PROJ>'] = proj.upper()
359 self.SetDefines(defs)
360 self.SetIncludes(incs)
361 self.SetLibraries(libs)
362
363 def SetSource(self, src):
364 self.source = source
365 self.vars['<src>'] = src
366
367 def SetToolchain(self, tc):
368 TC = tc.upper()
369 self.vars['<CC>'] = '%s_CC' % TC
370 self.vars['<CXX>'] = '%s_CXX' % TC
371 self.vars['<DUMP>'] = '%s_DUMP' % TC
372 self.vars['<LIB>'] = '%s_LIB' % TC
373 self.vars['<LINK>'] = '%s_LINK' % TC
374 self.vars['<tc>'] = tc
375 self.vars['<TC>'] = TC
376 self.SetDefines(self.defines)
377 self.SetIncludes(self.includes)
378 self.SetLibraries(self.libraries)
379
380 def SetVars(self, **kwargs):
381 # Add other passed in replacements
382 for key in kwargs:
383 self.vars['<%s>' % key] = kwargs[key]
384 self.var_set = kwargs
385
386 def Replace(self, text):
387 return Replace(text, self.vars)
388
389
390 def Replace(text, replacements):
391 for key in replacements:
392 val = replacements[key]
393 if val is not None:
394 text = text.replace(key, val)
395 return text
396
397
398 def SetVar(varname, values):
399 if not values:
400 return varname + ':=\n'
401
402 line = varname + ':='
403 out = ''
404 for value in values:
405 if len(line) + len(value) > 78:
406 out += line[:-1] + '\n'
407 line = '%s+=%s ' % (varname, value)
300 else: 408 else:
301 replace['<OBJS>'] = '%s_%s_%s_O' % (TC, PROJ, EXT) 409 line += value + ' '
302 return replace 410
303 411 if line:
412 out += line[:-1] + '\n'
413 return out
414
415
416 def GenerateCleanRules(tools, configs):
417 rules = '#\n# Target to remove temporary files\n#\n.PHONY: clean\nclean:\n'
418 for tc in tools:
419 for cfg in configs:
420 rules += '\t$(RM) -fr %s/%s\n' % (tc, cfg)
421 return rules + '\n'
422
423
424 def GenerateNMFRules(tc, main, dlls, cfg, arches):
425 target = BUILD_RULES[tc]['TOOL']['NMFMAIN']
426 dll_target = BUILD_RULES[tc]['TOOL']['SO']
427 nmf_targets = []
428
429 for arch in arches:
430 replace = {
431 '<ARCH>' : arch['<ARCH>'],
432 '<config>' : cfg,
433 '<DUMP>' : '%s_DUMP' % tc.upper(),
434 '<TAB>' : '\t',
435 '<tc>' : tc
436 }
437 for dll in dlls:
438 replace['<proj>'] = dll
439 nmf_targets.append(Replace(dll_target, replace))
440 replace['<proj>'] = main
441 nmf_targets.append(Replace(target, replace))
442
443 replace['<NMF_TARGETS>'] = ' '.join(nmf_targets)
444 rules = Replace(BUILD_RULES[tc]['NMF'], replace)
445 return '\nALL_TARGETS+=%s/%s/%s.nmf' % (tc, cfg, main) + rules + '\n'
OLDNEW
« no previous file with comments | « native_client_sdk/src/build_tools/generate_make.py ('k') | native_client_sdk/src/build_tools/redirect.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698