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:
35
meson.build
35
meson.build
@@ -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')
|
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
|
if get_option('warning_level').to_int() >= 3
|
||||||
add_project_arguments(['-Wmissing-prototypes',
|
extra_warnings = [
|
||||||
'-Wshadow',
|
'-Wmissing-prototypes', '-Wshadow', '-Wwrite-strings', '-Wswitch-default',
|
||||||
'-Wcast-align=strict',
|
'-Winline', '-Wstrict-prototypes', '-Wundef',
|
||||||
'-Wwrite-strings',
|
# We have strings longer than 4095 characters
|
||||||
'-Winline',
|
'-Wno-overlength-strings',
|
||||||
'-Wswitch-default',
|
# GCC 8 requires an extra option for strict cast alignment checks, Clang
|
||||||
'-Wstrict-prototypes',
|
# always warns, even on architectures without alignment requirements.
|
||||||
'-Wundef',
|
'-Wcast-align', '-Wcast-align=strict',
|
||||||
'-Wno-overlength-strings'],
|
]
|
||||||
language: 'c')
|
cc = meson.get_compiler('c')
|
||||||
|
foreach warning : extra_warnings
|
||||||
|
if cc.has_argument(warning)
|
||||||
|
add_project_arguments(warning, language: 'c')
|
||||||
|
endif
|
||||||
|
endforeach
|
||||||
endif
|
endif
|
||||||
|
|
||||||
generate_args = []
|
generate_args = []
|
||||||
|
|||||||
@@ -601,9 +601,9 @@ def encode_table(entries):
|
|||||||
for idx, alt, (enc, immsz, tys_i, opc_s) in zip(indices, alt_list, dedup):
|
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"
|
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()))}
|
mnem_list = sorted(mnemonics.keys())
|
||||||
mnemonics_tab = "\n".join("FE_MNEMONIC(%s,%d)"%entry for entry in mnemonics_lut.items())
|
mnem_tab = "".join(f"FE_MNEMONIC({m},{i})\n" for i, m in enumerate(mnem_list))
|
||||||
return mnemonics_tab, descs
|
return mnem_tab, descs
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
@@ -624,8 +624,8 @@ if __name__ == "__main__":
|
|||||||
|
|
||||||
mnemonics = sorted({desc.mnemonic for _, desc in entries})
|
mnemonics = sorted({desc.mnemonic for _, desc in entries})
|
||||||
|
|
||||||
decode_mnems_lines = ["FD_MNEMONIC(%s,%d)"%e[::-1] for e in enumerate(mnemonics)]
|
decode_mnems_lines = [f"FD_MNEMONIC({m},{i})\n" for i, m in enumerate(mnemonics)]
|
||||||
args.decode_mnems.write("\n".join(decode_mnems_lines))
|
args.decode_mnems.write("".join(decode_mnems_lines))
|
||||||
|
|
||||||
modes = [32, 64]
|
modes = [32, 64]
|
||||||
table = Table(root_count=len(args.modes))
|
table = Table(root_count=len(args.modes))
|
||||||
|
|||||||
Reference in New Issue
Block a user