meson: Check compiler options and Python version

Thanks to William Woodruff for pointing out that -Wcast-align=strict is
a GCC-only option, which causes build errors (instead of just
complaining about an unsupported warning option).
This commit is contained in:
Alexis Engelke
2021-01-05 20:13:25 +01:00
parent 84645afaac
commit db183ee6f9
2 changed files with 29 additions and 16 deletions

View File

@@ -1,18 +1,31 @@
project('fadec', ['c'], default_options: ['warning_level=3', 'c_std=c99'])
project('fadec', ['c'], default_options: ['warning_level=3', 'c_std=c99'],
meson_version: '>=0.40')
python3 = find_program('python3')
# Check Python version
py_version_res = run_command(python3, ['--version'])
py_version = py_version_res.stdout().split(' ')[1]
if py_version_res.returncode() != 0 or not py_version.version_compare('>=3.6')
error('Python 3.6 required, got @0@'.format(py_version))
endif
if get_option('warning_level').to_int() >= 3
add_project_arguments(['-Wmissing-prototypes',
'-Wshadow',
'-Wcast-align=strict',
'-Wwrite-strings',
'-Winline',
'-Wswitch-default',
'-Wstrict-prototypes',
'-Wundef',
'-Wno-overlength-strings'],
language: 'c')
extra_warnings = [
'-Wmissing-prototypes', '-Wshadow', '-Wwrite-strings', '-Wswitch-default',
'-Winline', '-Wstrict-prototypes', '-Wundef',
# We have strings longer than 4095 characters
'-Wno-overlength-strings',
# GCC 8 requires an extra option for strict cast alignment checks, Clang
# always warns, even on architectures without alignment requirements.
'-Wcast-align', '-Wcast-align=strict',
]
cc = meson.get_compiler('c')
foreach warning : extra_warnings
if cc.has_argument(warning)
add_project_arguments(warning, language: 'c')
endif
endforeach
endif
generate_args = []

View File

@@ -601,9 +601,9 @@ def encode_table(entries):
for idx, alt, (enc, immsz, tys_i, opc_s) in zip(indices, alt_list, dedup):
descs += f"[{idx}] = {{ .enc = ENC_{enc}, .immsz = {immsz}, .tys = {tys_i:#x}, .opc = {opc_s}, .alt = {alt} }},\n"
mnemonics_lut = {mnem: i for i, mnem in enumerate(sorted(mnemonics.keys()))}
mnemonics_tab = "\n".join("FE_MNEMONIC(%s,%d)"%entry for entry in mnemonics_lut.items())
return mnemonics_tab, descs
mnem_list = sorted(mnemonics.keys())
mnem_tab = "".join(f"FE_MNEMONIC({m},{i})\n" for i, m in enumerate(mnem_list))
return mnem_tab, descs
if __name__ == "__main__":
parser = argparse.ArgumentParser()
@@ -624,8 +624,8 @@ if __name__ == "__main__":
mnemonics = sorted({desc.mnemonic for _, desc in entries})
decode_mnems_lines = ["FD_MNEMONIC(%s,%d)"%e[::-1] for e in enumerate(mnemonics)]
args.decode_mnems.write("\n".join(decode_mnems_lines))
decode_mnems_lines = [f"FD_MNEMONIC({m},{i})\n" for i, m in enumerate(mnemonics)]
args.decode_mnems.write("".join(decode_mnems_lines))
modes = [32, 64]
table = Table(root_count=len(args.modes))