aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Patterson <adam@adamrt.com>2025-03-05 18:41:13 -0800
committerAdam Patterson <adam@adamrt.com>2025-03-05 18:41:13 -0800
commita737aae10c12cd53c70d3a6cd9f9e6e89970b03b (patch)
treefbb56c324004d71b2fa961b737689d96f13c8e29
parent123f30c5166f65844a201246d244bda83ddf5f69 (diff)
bindgen: add option to use tiger style for zig
Tiger Style comes from TigerBeetle's Zig style guide that they used for their popular database (same name). "Use snake_case for function, variable, and file names. The underscore is the closest thing we have as programmers to a space, and helps to separate words and encourage descriptive names." https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/TIGER_STYLE.md
-rw-r--r--bindgen/gen_all.py8
-rw-r--r--bindgen/gen_zig.py17
2 files changed, 17 insertions, 8 deletions
diff --git a/bindgen/gen_all.py b/bindgen/gen_all.py
index 03a93756..7f34a89c 100644
--- a/bindgen/gen_all.py
+++ b/bindgen/gen_all.py
@@ -1,4 +1,8 @@
-import os, gen_nim, gen_zig, gen_odin, gen_rust, gen_d, gen_jai, gen_c3
+import os, argparse, gen_nim, gen_zig, gen_odin, gen_rust, gen_d, gen_jai, gen_c3
+
+parser = argparse.ArgumentParser()
+parser.add_argument("--zig-tiger-style", action="store_true", help="Enable zig tiger style mode.")
+args = parser.parse_args()
tasks = [
[ '../sokol_log.h', 'slog_', [] ],
@@ -39,7 +43,7 @@ zig_tasks = [
gen_zig.prepare()
for task in zig_tasks:
[c_header_path, main_prefix, dep_prefixes] = task
- gen_zig.gen(c_header_path, main_prefix, dep_prefixes)
+ gen_zig.gen(c_header_path, main_prefix, dep_prefixes, {"tiger-style": args.zig_tiger_style})
# D
d_tasks = [
diff --git a/bindgen/gen_zig.py b/bindgen/gen_zig.py
index b5e14b7b..52f617e5 100644
--- a/bindgen/gen_zig.py
+++ b/bindgen/gen_zig.py
@@ -420,9 +420,13 @@ def gen_func_c(decl, prefix):
l(f"extern fn {decl['name']}({funcdecl_args_c(decl, prefix)}) {funcdecl_result_c(decl, prefix)};")
l('')
-def gen_func_zig(decl, prefix):
+def gen_func_zig(decl, prefix, tiger_style=False):
c_func_name = decl['name']
- zig_func_name = util.as_lower_camel_case(check_override(decl['name']), prefix)
+ if not tiger_style:
+ zig_func_name = util.as_lower_camel_case(check_override(decl['name']), prefix)
+ else:
+ zig_func_name = util.as_lower_snake_case(check_override(decl['name']), prefix)
+
c(decl.get('comment'))
if c_func_name in c_callbacks:
# a simple forwarded C callback function
@@ -552,7 +556,7 @@ def gen_helpers(inp):
l('}')
l('')
-def gen_module(inp, dep_prefixes):
+def gen_module(inp, dep_prefixes, opt={}):
l('// machine generated, do not edit')
if inp.get('comment'):
l('')
@@ -574,7 +578,8 @@ def gen_module(inp, dep_prefixes):
gen_enum(decl, prefix)
elif kind == 'func':
gen_func_c(decl, prefix)
- gen_func_zig(decl, prefix)
+ tiger_style = opt.get('tiger-style', False)
+ gen_func_zig(decl, prefix, tiger_style=tiger_style)
def prepare():
print('=== Generating Zig bindings:')
@@ -583,7 +588,7 @@ def prepare():
if not os.path.isdir('sokol-zig/src/sokol/c'):
os.makedirs('sokol-zig/src/sokol/c')
-def gen(c_header_path, c_prefix, dep_c_prefixes):
+def gen(c_header_path, c_prefix, dep_c_prefixes, opt={}):
if not c_prefix in module_names:
print(f' >> warning: skipping generation for {c_prefix} prefix...')
return
@@ -593,7 +598,7 @@ def gen(c_header_path, c_prefix, dep_c_prefixes):
reset_globals()
shutil.copyfile(c_header_path, f'sokol-zig/src/sokol/c/{os.path.basename(c_header_path)}')
ir = gen_ir.gen(c_header_path, c_source_path, module_name, c_prefix, dep_c_prefixes, with_comments=True)
- gen_module(ir, dep_c_prefixes,)
+ gen_module(ir, dep_c_prefixes, opt)
output_path = f"sokol-zig/src/sokol/{ir['module']}.zig"
with open(output_path, 'w', newline='\n') as f_outp:
f_outp.write(out_lines)