meson: fix cross-compilation issues with gperf header file preprocessing
Pass c_args to the compiler when preprocessing the gperf header file,
they might contain important bits without which compilation/preprocessing
might fail (e.g. with clang on Android). cc.cmd_array() does not include
the c_args and we can't easily look them up from the meson.build file, so
we have to retrieve from the introspection info.
This is basically the Meson equivalent to commit 57103773
.
This commit is contained in:
parent
7bfbaecf81
commit
ae9ac2a1bf
|
@ -1,5 +1,6 @@
|
||||||
import argparse
|
import argparse
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
@ -7,12 +8,23 @@ if __name__== '__main__':
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument('input')
|
parser.add_argument('input')
|
||||||
parser.add_argument('output')
|
parser.add_argument('output')
|
||||||
|
parser.add_argument('buildroot')
|
||||||
|
|
||||||
args = parser.parse_known_args()
|
args = parser.parse_known_args()
|
||||||
print (args[0].output)
|
|
||||||
|
# c_args might contain things that are essential for crosscompilation, but
|
||||||
|
# are not included in cc.cmd_array(), so we have to look them up ourselves
|
||||||
|
host_cargs = []
|
||||||
|
buildroot = args[0].buildroot
|
||||||
|
with open(os.path.join(buildroot, 'meson-info', 'intro-buildoptions.json')) as json_file:
|
||||||
|
bopts = json.load(json_file)
|
||||||
|
for opt in bopts:
|
||||||
|
if opt['name'] == 'c_args' and opt['section'] == 'compiler' and opt['machine'] == 'host':
|
||||||
|
host_cargs = opt['value']
|
||||||
|
break
|
||||||
|
|
||||||
cpp = args[1]
|
cpp = args[1]
|
||||||
ret = subprocess.run(cpp + [args[0].input], stdout=subprocess.PIPE, check=True)
|
ret = subprocess.run(cpp + host_cargs + [args[0].input], stdout=subprocess.PIPE, check=True)
|
||||||
|
|
||||||
stdout = ret.stdout.decode('utf8')
|
stdout = ret.stdout.decode('utf8')
|
||||||
|
|
||||||
|
|
|
@ -44,10 +44,13 @@ endif
|
||||||
|
|
||||||
cpp += ['-I', join_paths(meson.current_source_dir(), '..')]
|
cpp += ['-I', join_paths(meson.current_source_dir(), '..')]
|
||||||
|
|
||||||
|
# Can use meson.project_build_dir() once we require Meson 0.56
|
||||||
|
project_build_dir = meson.current_build_dir() / '..'
|
||||||
|
|
||||||
fcobjshash_gperf = custom_target('fcobjshash.gperf',
|
fcobjshash_gperf = custom_target('fcobjshash.gperf',
|
||||||
input: 'fcobjshash.gperf.h',
|
input: 'fcobjshash.gperf.h',
|
||||||
output: 'fcobjshash.gperf',
|
output: 'fcobjshash.gperf',
|
||||||
command: [python3, files('cutout.py')[0], '@INPUT@', '@OUTPUT@', cpp],
|
command: [python3, files('cutout.py')[0], '@INPUT@', '@OUTPUT@', project_build_dir, cpp],
|
||||||
build_by_default: true,
|
build_by_default: true,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue