Skip to content

Commit ee1c2aa

Browse files
author
Vano
committed
+custom gen dir, rewrites to use it
1 parent a51849e commit ee1c2aa

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

SConstruct

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ scripts = GlobRecursive(SRC_DIR, '*.hpp')
1212
env.Append(CPPPATH=[SRC_DIR, 'src'])
1313
# CppScript config
1414
env['src'] = SRC_DIR # Path to C++ source files
15+
env['gen_dir'] = "../.gen" # Path for generated object files
1516
env['defs_file'] = os.path.join(SRC_DIR, 'defs.json') # Path to generated bindings
1617
env['gen_header'] = os.path.join(SRC_DIR, 'scripts.gen.h') # Path to generated header
1718
env['auto_methods'] = True # Generate bindings to public methods automatically

cppscript.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ def GlobRecursive(path, pattern, **kwargs):
2121
class CppScriptException(Exception):
2222
pass
2323

24-
def filename_to_gen_filename(name, src):
25-
return os.path.join(src, '.gen', os.path.relpath(name.replace('.hpp', '.gen.cpp'), src))
24+
def filename_to_gen_filename(name, env):
25+
return os.path.join(env['gen_dir'], os.path.relpath(name.replace('.hpp', '.gen.cpp'), env['src']))
2626

2727

2828
def collapse_list(list, key, action):
@@ -132,7 +132,7 @@ def is_virtual_method(cursor):
132132

133133
# Builder
134134
def generate_header_emitter(target, source, env):
135-
return [env.File(env['gen_header'])] + [env.File(filename_to_gen_filename(str(i), env['src'])) for i in source], source
135+
return [env.File(env['gen_header'])] + [env.File(filename_to_gen_filename(str(i), env)) for i in source], source
136136

137137

138138
def generate_header(target, source, env):
@@ -154,8 +154,8 @@ def generate_header(target, source, env):
154154
except AttributeError:
155155
new_defs = {str(s) : parse_and_write_header(index, *get_file_scons(s), env) for s in source}
156156

157-
write_register_header(new_defs, env['src'], str(target[0]))
158-
write_property_header(new_defs, os.path.join(env['src'], 'properties.gen.h'))
157+
write_register_header(new_defs, env)
158+
write_property_header(new_defs, env)
159159

160160
with open(env['defs_file'], 'w') as file:
161161
json.dump(new_defs, file, indent=2, default=lambda x: x if not isinstance(x, set) else list(x))
@@ -176,8 +176,8 @@ def generate_header_cmake(target, source, env):
176176
cached_defs = load_defs_json(env['defs_file'])
177177
new_defs = {str(s) : parse_and_write_header(index, *get_file_cmake(s), env) for s in source}
178178

179-
write_register_header(new_defs, env['src'], str(target[0]))
180-
write_property_header(new_defs, os.path.join(env['src'], 'properties.gen.h'))
179+
write_register_header(new_defs, env)
180+
write_property_header(new_defs, env)
181181

182182
with open(env['defs_file'], 'w') as file:
183183
json.dump(new_defs, file, indent=2, default=lambda x: x if not isinstance(x, set) else list(x))
@@ -454,11 +454,12 @@ def apply_macros(item, macros):
454454

455455
def parse_and_write_header(index, filename, filecontent, env):
456456
defs = parse_header(index, filename, filecontent, env['src'], env['auto_methods'])
457-
write_header(filename, defs, env['src'])
457+
write_header(filename, defs, env)
458458
return defs
459459

460460

461-
def write_header(file, defs, src):
461+
def write_header(file, defs, env):
462+
src = env['src']
462463
header_defs = []
463464
for class_name_full, content in defs.items():
464465
class_name = content['class_name']
@@ -556,7 +557,8 @@ def write_header(file, defs, src):
556557
([property_set_get_defs] if property_set_get_defs != '' else []) + \
557558
([outside_bind] if outside_bind != '' else [])
558559

559-
file_name = filename_to_gen_filename(file, src)
560+
file_name = filename_to_gen_filename(file, env)
561+
print(file_name)
560562
content = ''
561563
if len(defs) != 0:
562564
header_include = '#include <cppscript_bindings.h>\n\n#include <{}>\n\nusing namespace godot;\n\n'.format(os.path.relpath(file, src).replace('\\', '/'))
@@ -567,7 +569,9 @@ def write_header(file, defs, src):
567569
fileopen.write(content)
568570

569571

570-
def write_register_header(defs, src, target):
572+
def write_register_header(defs, env):
573+
src = env['src']
574+
target = env['gen_header']
571575
scripts_header = ''
572576
classes_register_levels = {name[12:] : [] for name in INIT_LEVELS}
573577

@@ -604,7 +608,8 @@ def write_register_header(defs, src, target):
604608
file.write(scripts_header)
605609

606610

607-
def write_property_header(new_defs, filepath):
611+
def write_property_header(new_defs, env):
612+
filepath = os.path.join(env['src'], 'properties.gen.h')
608613
body = ''
609614
for _, file in new_defs.items():
610615
for class_name_full, content in file.items():

cppscript_bindings.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
description='Generates C++ bindings code for GDExtension')
88

99
parser.add_argument('--src', type=str, nargs=1, required=True)
10+
parser.add_argument('--gen_dir', type=str, nargs=1, required=True)
1011
parser.add_argument('--defs-file', type=str, nargs=1, required=True)
1112
parser.add_argument('--gen-header', type=str, nargs=1, required=True)
1213
parser.add_argument('--auto-methods', type=bool, default=True)
@@ -15,6 +16,7 @@
1516
args = parser.parse_args(sys.argv[1:])
1617

1718
env = { 'src' : args.src[0],
19+
'gen_dir' : args.gen_dir[0],
1820
'defs_file' : args.defs_file[0],
1921
'gen_header' : args.gen_header[0],
2022
'auto_methods' : args.auto_methods}

0 commit comments

Comments
 (0)