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

Side by Side Diff: site_scons/site_tools/naclsdk.py

Issue 27218003: Use as/cc/ld flags in all situations (Closed) Base URL: svn://svn.chromium.org/native_client/trunk/src/native_client/
Patch Set: Created 7 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2012 The Native Client Authors. All rights reserved. 2 # Copyright (c) 2012 The Native Client 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 """NaCl SDK tool SCons.""" 6 """NaCl SDK tool SCons."""
7 7
8 import __builtin__ 8 import __builtin__
9 import re 9 import re
10 import os 10 import os
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 133
134 bin_path = os.path.join(sdk_path, 'bin') 134 bin_path = os.path.join(sdk_path, 'bin')
135 # NOTE: attempts to eliminate this PATH setting and use 135 # NOTE: attempts to eliminate this PATH setting and use
136 # absolute path have been futile 136 # absolute path have been futile
137 env.PrependENVPath('PATH', bin_path) 137 env.PrependENVPath('PATH', bin_path)
138 138
139 tool_prefix = None 139 tool_prefix = None
140 tool_map = NACL_TOOL_MAP[env['TARGET_ARCHITECTURE']] 140 tool_map = NACL_TOOL_MAP[env['TARGET_ARCHITECTURE']]
141 subarch_spec = tool_map[env['TARGET_SUBARCH']] 141 subarch_spec = tool_map[env['TARGET_SUBARCH']]
142 tooldir = subarch_spec['tooldir'] 142 tooldir = subarch_spec['tooldir']
143 # We need to pass it extra options for the subarch we are building.
144 as_mode_flag = subarch_spec['as_flag']
145 cc_mode_flag = subarch_spec['cc_flag']
146 ld_mode_flag = subarch_spec['ld_flag']
143 if os.path.exists(os.path.join(sdk_path, tooldir)): 147 if os.path.exists(os.path.join(sdk_path, tooldir)):
144 # The tooldir for the build target exists. 148 # The tooldir for the build target exists.
145 # The tools there do the right thing without special options. 149 # The tools there do the right thing without special options.
146 tool_prefix = tooldir 150 tool_prefix = tooldir
147 libdir = os.path.join(tooldir, 'lib') 151 libdir = os.path.join(tooldir, 'lib')
148 as_mode_flag = ''
149 cc_mode_flag = ''
150 ld_mode_flag = ''
151 else: 152 else:
152 # We're building for a target for which there is no matching tooldir. 153 # We're building for a target for which there is no matching tooldir.
153 # For example, for x86-32 when only <sdk_path>/x86_64-nacl/ exists. 154 # For example, for x86-32 when only <sdk_path>/x86_64-nacl/ exists.
154 # Find a tooldir for a different subarch that does exist. 155 # Find a tooldir for a different subarch that does exist.
155 others_map = tool_map.copy() 156 others_map = tool_map.copy()
156 del others_map[env['TARGET_SUBARCH']] 157 del others_map[env['TARGET_SUBARCH']]
157 for subarch, tool_spec in others_map.iteritems(): 158 for subarch, tool_spec in others_map.iteritems():
158 tooldir = tool_spec['tooldir'] 159 tooldir = tool_spec['tooldir']
159 if os.path.exists(os.path.join(sdk_path, tooldir)): 160 if os.path.exists(os.path.join(sdk_path, tooldir)):
160 # OK, this is the other subarch to use as tooldir. 161 # OK, this is the other subarch to use as tooldir.
161 tool_prefix = tooldir 162 tool_prefix = tooldir
162 # We need to pass it extra options for the subarch we are building.
163 as_mode_flag = subarch_spec['as_flag']
164 cc_mode_flag = subarch_spec['cc_flag']
165 ld_mode_flag = subarch_spec['ld_flag']
166 # The lib directory may have an alternate name, i.e. 163 # The lib directory may have an alternate name, i.e.
167 # 'lib32' in the x86_64-nacl tooldir. 164 # 'lib32' in the x86_64-nacl tooldir.
168 libdir = os.path.join(tooldir, subarch_spec.get('other_libdir', 'lib')) 165 libdir = os.path.join(tooldir, subarch_spec.get('other_libdir', 'lib'))
169 break 166 break
170 167
171 if tool_prefix is None: 168 if tool_prefix is None:
172 raise Exception("Cannot find a toolchain for %s in %s" % 169 raise Exception("Cannot find a toolchain for %s in %s" %
173 (env['TARGET_FULLARCH'], sdk_path)) 170 (env['TARGET_FULLARCH'], sdk_path))
174 171
175 env.Replace(# Replace header and lib paths. 172 env.Replace(# Replace header and lib paths.
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 318
322 if env.Bit('x86_64_zero_based_sandbox'): 319 if env.Bit('x86_64_zero_based_sandbox'):
323 pnacl_translate_flags += ' -sfi-zero-based-sandbox' 320 pnacl_translate_flags += ' -sfi-zero-based-sandbox'
324 321
325 if pnacl_extra_lib: 322 if pnacl_extra_lib:
326 env.Prepend(LIBPATH=pnacl_extra_lib) 323 env.Prepend(LIBPATH=pnacl_extra_lib)
327 324
328 env.Replace(# Replace header and lib paths. 325 env.Replace(# Replace header and lib paths.
329 NACL_SDK_INCLUDE=pnacl_include, 326 NACL_SDK_INCLUDE=pnacl_include,
330 NACL_SDK_LIB=pnacl_lib, 327 NACL_SDK_LIB=pnacl_lib,
328 # Remove arch-specific flags (if any)
329 BASE_LINKFLAGS='',
330 BASE_CFLAGS='',
331 BASE_CXXFLAGS='',
332 BASE_ASFLAGS='',
333 BASE_ASPPFLAGS='',
331 # Replace the normal unix tools with the PNaCl ones. 334 # Replace the normal unix tools with the PNaCl ones.
332 CC=pnacl_cc + pnacl_cc_flags, 335 CC=pnacl_cc + pnacl_cc_flags,
333 CXX=pnacl_cxx + pnacl_cxx_flags, 336 CXX=pnacl_cxx + pnacl_cxx_flags,
334 ASPP=pnacl_cc + pnacl_cc_flags, 337 ASPP=pnacl_cc + pnacl_cc_flags,
335 LIBPREFIX="lib", 338 LIBPREFIX="lib",
336 SHLIBPREFIX="lib", 339 SHLIBPREFIX="lib",
337 SHLIBSUFFIX=".so", 340 SHLIBSUFFIX=".so",
338 OBJSUFFIX=".bc", 341 OBJSUFFIX=".bc",
339 LINK=pnacl_cxx + ld_arch_flag + pnacl_ld_flags, 342 LINK=pnacl_cxx + ld_arch_flag + pnacl_ld_flags,
340 # Although we are currently forced to produce native output 343 # Although we are currently forced to produce native output
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 # Dependency files it produces are to be found in ${LIBPATH}. 791 # Dependency files it produces are to be found in ${LIBPATH}.
789 # It is applied recursively to those dependencies in case 792 # It is applied recursively to those dependencies in case
790 # some of them are linker scripts too. 793 # some of them are linker scripts too.
791 ldscript_scanner = SCons.Scanner.Base( 794 ldscript_scanner = SCons.Scanner.Base(
792 function=ScanLinkerScript, 795 function=ScanLinkerScript,
793 skeys=['.a', '.so', '.pso'], 796 skeys=['.a', '.so', '.pso'],
794 path_function=SCons.Scanner.FindPathDirs('LIBPATH'), 797 path_function=SCons.Scanner.FindPathDirs('LIBPATH'),
795 recursive=True 798 recursive=True
796 ) 799 )
797 env.Append(SCANNERS=ldscript_scanner) 800 env.Append(SCANNERS=ldscript_scanner)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698