bindings: (partial fix #2451) Generate ILP32 bindings from LP64

This commit is contained in:
Ankit Deepak
2018-07-21 16:13:14 -07:00
parent 79a006bfc4
commit fe69e16ab1

View File

@@ -62,10 +62,6 @@ def options(opt):
opt.add_option('--with-python',
help=('Path to the Python interpreter to use.'),
default=None, dest='with_python', type="string")
opt.add_option('--no32bit-scan',
help=("Don't scan for the 32-bit variant of the bindings on 64-bit platforms."),
action="store_true", default=False,
dest='no32bit_scan')
def split_version(version):
@@ -408,6 +404,13 @@ class apiscan_task(Task.Task):
]
scan = subprocess.Popen(argv, stdin=subprocess.PIPE)
retval = scan.wait()
if retval >= 0 and "LP64" in self.target:
self.lp64_to_ilp32(
os.path.join(module_path, "bindings", 'modulegen__%s.py' % (self.target)),
os.path.join(module_path, "bindings", 'modulegen__%s.py' % "gcc_ILP32")
)
return retval
def runnable_status(self):
@@ -417,6 +420,15 @@ class apiscan_task(Task.Task):
# invoking this task many times, once per module.
return RUN_ME
def lp64_to_ilp32(self, lp64path, ilp32path):
lp64file = open(lp64path, "r")
lp64bindings = lp64file.read()
lp64file.close()
ilp32file = open(ilp32path, "w")
ilp32bindings = re.sub("unsigned long(?!( long))", "unsigned long long", lp64bindings)
ilp32file.write(ilp32bindings)
ilp32file.close()
def get_modules_and_headers(bld):
"""
Gets a dict of
@@ -481,8 +493,6 @@ def build(bld):
else:
import struct
if struct.calcsize('I') == 4 and struct.calcsize('L') == 8 and struct.calcsize('P') == 8:
if not Options.options.no32bit_scan:
scan_targets.append(('gcc_ILP32', '-m32'))
scan_targets.append(('gcc_LP64', '-m64'))
elif struct.calcsize('I') == 4 and struct.calcsize('L') == 4 and struct.calcsize('P') == 4:
scan_targets.append(('gcc_ILP32', ''))