Get alignment from cross file.

pull/15/head
Jussi Pakkanen 11 years ago
parent 21e4fcc6b0
commit 195fb0d967
  1. 7
      cross/ubuntu-armhf.txt
  2. 20
      environment.py
  3. 2
      interpreter.py

@ -2,10 +2,15 @@ name = 'linux'
c = '/usr/bin/arm-linux-gnueabihf-gcc'
cpp = '/usr/bin/arm-linux-gnueabihf-g++'
root = '/usr/arm-linux-gnueabihf'
pkg-config = '/usr/bin/arm-linux-gnueabihf-pkg-config'
pkg_config = '/usr/bin/arm-linux-gnueabihf-pkg-config'
sizeof_int = 4
sizeof_wchar_t = 4
sizeof_void* = 4
alignment_char = 1
alignment_void* = 4
alignment_double = 4 # Don't know if this is correct...
has_function_printf = true
has_function_hfkerhisadf = false

@ -227,7 +227,7 @@ Please define the corresponding variable {1} in your cross compilation definitio
raise EnvironmentException('Could not run sizeof test binary.')
return int(res.stdout)
def alignment(self, typename):
def alignment(self, typename, env):
# A word of warning: this algoritm may be totally incorrect.
# However it worked for me on the cases I tried.
# There is probably a smarter and more robust way to get this
@ -273,7 +273,23 @@ int main(int argc, char **argv) {
return 0;
}
'''
res = self.run(templ % typename)
varname = 'alignment ' + typename
varname = varname.replace(' ', '_')
if self.is_cross:
val = env.cross_info.get(varname)
if val is not None:
if isinstance(val, int):
return val
raise EnvironmentException('Cross variable {0} is not an integer.'.format(varname))
cross_failed = False
try:
res = self.run(templ % typename)
except CrossNoRunException:
cross_failed = True
if cross_failed:
message = '''Can not determine alignment of {0} because cross compiled binaries are not runnable.
Please define the corresponding variable {1} in your cross compilation definition file.'''.format(typename, varname)
raise EnvironmentException(message)
if not res.compiled:
raise EnvironmentException('Could not compile alignment test.')
if res.returncode != 0:

@ -674,7 +674,7 @@ class CompilerHolder(InterpreterObject):
typename = args[0]
if not isinstance(typename, str):
raise InterpreterException('First argument is not a string.')
result = self.compiler.alignment(typename)
result = self.compiler.alignment(typename, self.environment)
mlog.log('Checking for alignment of "', mlog.bold(typename), '": ', result, sep='')
return result

Loading…
Cancel
Save