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

Side by Side Diff: native_client_sdk/src/tools/nacl_config.py

Issue 924253002: [NaCL SDK] Add initial support for nacl-clang (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 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 """A helper script to print paths of NaCl binaries, includes, libs, etc. 6 """A helper script to print paths of NaCl binaries, includes, libs, etc.
7 7
8 It is similar in behavior to pkg-config or sdl-config. 8 It is similar in behavior to pkg-config or sdl-config.
9 """ 9 """
10 10
(...skipping 26 matching lines...) Expand all
37 'x86_64': 'x86_64' 37 'x86_64': 'x86_64'
38 } 38 }
39 39
40 ARCH_BASE_NAME = { 40 ARCH_BASE_NAME = {
41 'arm': 'arm', 41 'arm': 'arm',
42 'x86_32': 'x86', 42 'x86_32': 'x86',
43 'i686': 'x86', 43 'i686': 'x86',
44 'x86_64': 'x86' 44 'x86_64': 'x86'
45 } 45 }
46 46
47 NACL_TOOLCHAINS = ('newlib', 'glibc', 'pnacl', 'bionic') 47 NACL_TOOLCHAINS = ('newlib', 'glibc', 'pnacl', 'bionic', 'clang-newlib')
48 HOST_TOOLCHAINS = ('linux', 'mac', 'win') 48 HOST_TOOLCHAINS = ('linux', 'mac', 'win')
49 VALID_TOOLCHAINS = list(HOST_TOOLCHAINS) + list(NACL_TOOLCHAINS) + ['host'] 49 VALID_TOOLCHAINS = list(HOST_TOOLCHAINS) + list(NACL_TOOLCHAINS) + ['host']
50 50
51 # This is not an exhaustive list of tools, just the ones that need to be 51 # This is not an exhaustive list of tools, just the ones that need to be
52 # special-cased. 52 # special-cased.
53 53
54 # e.g. For PNaCL cc => pnacl-clang 54 # e.g. For PNaCL cc => pnacl-clang
55 # For NaCl cc => pnacl-gcc 55 # For NaCl cc => pnacl-gcc
56 # 56 #
57 # Most tools will be passed through directly. 57 # Most tools will be passed through directly.
58 # e.g. For PNaCl foo => pnacl-foo 58 # e.g. For PNaCl foo => pnacl-foo
59 # For NaCl foo => x86_64-nacl-foo. 59 # For NaCl foo => x86_64-nacl-foo.
60 PNACL_TOOLS = { 60 CLANG_TOOLS = {
61 'cc': 'clang', 61 'cc': 'clang',
62 'c++': 'clang++', 62 'c++': 'clang++',
63 'gcc': 'clang', 63 'gcc': 'clang',
64 'g++': 'clang++', 64 'g++': 'clang++',
65 'ld': 'clang++' 65 'ld': 'clang++'
66 } 66 }
67 67
68 NACL_TOOLS = { 68 GCC_TOOLS = {
69 'cc': 'gcc', 69 'cc': 'gcc',
70 'c++': 'g++', 70 'c++': 'g++',
71 'gcc': 'gcc', 71 'gcc': 'gcc',
72 'g++': 'g++', 72 'g++': 'g++',
73 'ld': 'g++' 73 'ld': 'g++'
74 } 74 }
75 75
76 76
77 class Error(Exception): 77 class Error(Exception):
78 pass 78 pass
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 if getos.GetPlatform() == 'win': 146 if getos.GetPlatform() == 'win':
147 return sdk_path.replace('\\', '/') 147 return sdk_path.replace('\\', '/')
148 else: 148 else:
149 return sdk_path 149 return sdk_path
150 150
151 151
152 def GetToolchainDir(toolchain, arch=None): 152 def GetToolchainDir(toolchain, arch=None):
153 ExpectToolchain(toolchain, NACL_TOOLCHAINS) 153 ExpectToolchain(toolchain, NACL_TOOLCHAINS)
154 root = GetPosixSDKPath() 154 root = GetPosixSDKPath()
155 platform = getos.GetPlatform() 155 platform = getos.GetPlatform()
156 if toolchain == 'pnacl': 156 if toolchain in ('pnacl', 'clang-newlib'):
157 subdir = '%s_pnacl' % platform 157 subdir = '%s_pnacl' % platform
158 else: 158 else:
159 assert arch is not None 159 assert arch is not None
160 subdir = '%s_%s_%s' % (platform, GetArchBaseName(arch), toolchain) 160 subdir = '%s_%s_%s' % (platform, GetArchBaseName(arch), toolchain)
161 161
162 return posixpath.join(root, 'toolchain', subdir) 162 return posixpath.join(root, 'toolchain', subdir)
163 163
164 164
165 def GetToolchainArchDir(toolchain, arch): 165 def GetToolchainArchDir(toolchain, arch):
166 ExpectToolchain(toolchain, NACL_TOOLCHAINS) 166 ExpectToolchain(toolchain, NACL_TOOLCHAINS)
167 assert arch is not None 167 assert arch is not None
168 toolchain_dir = GetToolchainDir(toolchain, arch) 168 toolchain_dir = GetToolchainDir(toolchain, arch)
169 arch_dir = '%s-nacl' % GetArchName(arch) 169 arch_dir = '%s-nacl' % GetArchName(arch)
170 return posixpath.join(toolchain_dir, arch_dir) 170 return posixpath.join(toolchain_dir, arch_dir)
171 171
172 172
173 def GetToolchainBinDir(toolchain, arch=None): 173 def GetToolchainBinDir(toolchain, arch=None):
174 ExpectToolchain(toolchain, NACL_TOOLCHAINS) 174 ExpectToolchain(toolchain, NACL_TOOLCHAINS)
175 return posixpath.join(GetToolchainDir(toolchain, arch), 'bin') 175 return posixpath.join(GetToolchainDir(toolchain, arch), 'bin')
176 176
177 177
178 def GetSDKIncludeDirs(toolchain): 178 def GetSDKIncludeDirs(toolchain):
179 root = GetPosixSDKPath() 179 root = GetPosixSDKPath()
180 base_include = posixpath.join(root, 'include') 180 base_include = posixpath.join(root, 'include')
181 if toolchain == 'clang-newlib':
182 toolchain = 'newlib'
181 return [base_include, posixpath.join(base_include, toolchain)] 183 return [base_include, posixpath.join(base_include, toolchain)]
182 184
183 185
184 def GetSDKLibDir(): 186 def GetSDKLibDir():
185 return posixpath.join(GetPosixSDKPath(), 'lib') 187 return posixpath.join(GetPosixSDKPath(), 'lib')
186 188
187 189
188 # Commands 190 # Commands
189 191
190 def GetToolPath(toolchain, arch, tool): 192 def GetToolPath(toolchain, arch, tool):
191 if tool == 'gdb': 193 if tool == 'gdb':
192 # Always use the same gdb; it supports multiple toolchains/architectures. 194 # Always use the same gdb; it supports multiple toolchains/architectures.
193 # NOTE: this is always a i686 executable. i686-nacl-gdb is a symlink to 195 # NOTE: this is always a i686 executable. i686-nacl-gdb is a symlink to
194 # x86_64-nacl-gdb. 196 # x86_64-nacl-gdb.
195 return posixpath.join(GetToolchainBinDir('newlib', 'x86_64'), 197 return posixpath.join(GetToolchainBinDir('newlib', 'x86_64'),
196 'x86_64-nacl-gdb') 198 'x86_64-nacl-gdb')
197 199
198 if toolchain == 'pnacl': 200 if toolchain == 'pnacl':
199 CheckValidToolchainArch(toolchain, arch) 201 CheckValidToolchainArch(toolchain, arch)
200 tool = PNACL_TOOLS.get(tool, tool) 202 tool = CLANG_TOOLS.get(tool, tool)
201 full_tool_name = 'pnacl-%s' % tool 203 full_tool_name = 'pnacl-%s' % tool
202 else: 204 else:
203 CheckValidToolchainArch(toolchain, arch, arch_required=True) 205 CheckValidToolchainArch(toolchain, arch, arch_required=True)
204 ExpectArch(arch, VALID_ARCHES) 206 ExpectArch(arch, VALID_ARCHES)
205 tool = NACL_TOOLS.get(tool, tool) 207 if toolchain == 'clang-newlib':
208 tool = CLANG_TOOLS.get(tool, tool)
209 else:
210 tool = GCC_TOOLS.get(tool, tool)
206 full_tool_name = '%s-nacl-%s' % (GetArchName(arch), tool) 211 full_tool_name = '%s-nacl-%s' % (GetArchName(arch), tool)
207 return posixpath.join(GetToolchainBinDir(toolchain, arch), full_tool_name) 212 return posixpath.join(GetToolchainBinDir(toolchain, arch), full_tool_name)
208 213
209 214
210 def GetCFlags(toolchain): 215 def GetCFlags(toolchain):
211 ExpectToolchain(toolchain, VALID_TOOLCHAINS) 216 ExpectToolchain(toolchain, VALID_TOOLCHAINS)
212 return ' '.join('-I%s' % dirname for dirname in GetSDKIncludeDirs(toolchain)) 217 return ' '.join('-I%s' % dirname for dirname in GetSDKIncludeDirs(toolchain))
213 218
214 219
215 def GetIncludeDirs(toolchain): 220 def GetIncludeDirs(toolchain):
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 267
263 return 0 268 return 0
264 269
265 270
266 if __name__ == '__main__': 271 if __name__ == '__main__':
267 try: 272 try:
268 sys.exit(main(sys.argv[1:])) 273 sys.exit(main(sys.argv[1:]))
269 except Error as e: 274 except Error as e:
270 sys.stderr.write(str(e) + '\n') 275 sys.stderr.write(str(e) + '\n')
271 sys.exit(1) 276 sys.exit(1)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698