diff --git a/meson.build b/meson.build index 1048968..75be6d2 100644 --- a/meson.build +++ b/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') +# 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 = [] diff --git a/parseinstrs.py b/parseinstrs.py index b555a2b..e68de79 100644 --- a/parseinstrs.py +++ b/parseinstrs.py @@ -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))