godot-cpp/include/SConstruct

95 lines
2.8 KiB
Python

#!python
import os, subprocess
# Local dependency paths, adapt them to your setup
godot_headers_path = "../../godot_headers/"
godot_bin_path = "../../godot_fork/bin/"
godot_lib_path = "../../godot_fork/bin/"
env = Environment()
if ARGUMENTS.get("use_llvm", "no") == "yes":
env["CXX"] = "clang++"
target = ARGUMENTS.get("target", "core")
platform = ARGUMENTS.get("p", "linux")
godot_name = "godot." + platform + ".tools.64"
def add_sources(sources, directory):
for file in os.listdir(directory):
if file.endswith('.cpp'):
sources.append(directory + '/' + file)
if target == "core":
if platform == "linux":
env.Append(CCFLAGS = ['-g','-O3', '-std=c++14'])
env.Append(CPPPATH=['.', godot_headers_path])
if platform == "windows":
env.Append(LIBS=[godot_name + '.lib'])
env.Append(LIBPATH=[godot_lib_path])
env.Append(CPPFLAGS=['-D_GD_CPP_CORE_API_IMPL'])
sources = []
add_sources(sources, "godot_cpp/core")
library = env.SharedLibrary(target='godot_cpp_core', source=sources)
Default(library)
elif target == "bindings":
if ARGUMENTS.get("generate_bindings", "no") == "yes":
godot_executable = godot_bin_path + godot_name
if platform == "windows":
godot_executable += ".exe"
# TODO Generating the API should be done only if the Godot build is more recent than the JSON file
json_api_file = 'godot_api.json'
subprocess.call([godot_executable, '--gdnative-generate-json-api', json_api_file])
binding_generator_executable = '../binding_generator/target/debug/binding_generator'
if platform == "windows":
binding_generator_executable += ".exe"
# TODO Should that be the job of the generator?
if not os.path.isdir('godot_cpp/impl'):
os.mkdir('godot_cpp/impl')
# Note: the binding generator should have been built before
subprocess.call([binding_generator_executable, json_api_file, 'godot_cpp/'])
if platform == "linux":
if env["CXX"] == "clang++":
env.Append(CCFLAGS = ['-Wno-writable-strings'])
else:
env.Append(CCFLAGS = ['-Wno-write-strings', '-Wno-return-local-addr'])
env.Append(CCFLAGS = ['-g','-O3', '-std=c++14'])
env.Append(LINKFLAGS = ['-Wl,-R,\'$$ORIGIN\''])
env.Append(CPPPATH=['.', godot_headers_path, './godot_cpp'])
if platform == "windows":
env.Append(LIBS=[godot_name])
env.Append(LIBPATH=[godot_lib_path])
env.Append(LIBS=['godot_cpp_core'])
env.Append(LIBPATH=['.'])
env.Append(CPPFLAGS=['-D_GD_CPP_BINDING_IMPL'])
sources = []
add_sources(sources, "godot_cpp/impl/")
library = env.SharedLibrary(target='godot_cpp_bindings', source=sources)
Default(library)