godot-cpp/SConstruct

100 lines
3.0 KiB
Python
Raw Normal View History

#!python
import os, subprocess
# Local dependency paths, adapt them to your setup
2017-07-13 13:02:41 +00:00
godot_headers_path = ARGUMENTS.get("headers", "../godot_headers/")
godot_bin_path = ARGUMENTS.get("godotpath", "../godot_fork/bin/")
2017-03-06 07:49:24 +00:00
env = Environment()
2017-03-09 02:03:21 +00:00
2017-03-15 22:19:58 +00:00
if ARGUMENTS.get("use_llvm", "no") == "yes":
2017-03-09 02:03:21 +00:00
env["CXX"] = "clang++"
2017-03-06 07:49:24 +00:00
target = ARGUMENTS.get("target", "core")
2017-03-15 22:19:58 +00:00
platform = ARGUMENTS.get("p", "linux")
2017-04-18 00:41:39 +00:00
godot_name = "godot." + ("x11" if platform == "linux" else platform) + ".tools.64"
def add_sources(sources, directory):
for file in os.listdir(directory):
if file.endswith('.cpp'):
sources.append(directory + '/' + file)
2017-07-13 13:02:41 +00:00
# put stuff that is the same for all first, saves duplication
2017-06-16 13:50:48 +00:00
if platform == "osx":
env.Append(CCFLAGS = ['-g','-O3', '-std=c++14', '-arch', 'x86_64'])
env.Append(LINKFLAGS = ['-arch', 'x86_64', '-framework', 'Cocoa', '-Wl,-undefined,dynamic_lookup'])
2017-07-13 13:02:41 +00:00
elif platform == "linux":
env.Append(CCFLAGS = ['-g','-O3', '-std=c++14'])
env.Append(LINKFLAGS = ['-Wl,-R,\'$$ORIGIN\''])
elif platform == "windows":
# need to add detection of msvc vs mingw, this is for msvc...
env.Append(CCFLAGS = ['/MD', '/WX', '/O2', '/EHsc', '/nologo'])
env.Append(LINKFLAGS = ['/WX'])
godot_lib_path = ARGUMENTS.get("godotlibpath", godot_bin_path)
if target == "core":
2017-05-12 19:53:07 +00:00
env.Append(CPPPATH=['include/core', godot_headers_path])
2017-03-15 22:19:58 +00:00
if platform == "windows":
env.Append(LIBS=[godot_name + '.lib'])
env.Append(LIBPATH=[godot_lib_path])
2017-03-15 22:19:58 +00:00
env.Append(CPPFLAGS=['-D_GD_CPP_CORE_API_IMPL'])
2017-03-06 07:49:24 +00:00
sources = []
2017-05-12 19:53:07 +00:00
add_sources(sources, "src/core")
2017-03-06 07:49:24 +00:00
2017-05-12 19:53:07 +00:00
library = env.SharedLibrary(target='bin/godot_cpp_core', source=sources)
2017-03-06 07:49:24 +00:00
Default(library)
2017-03-09 02:03:21 +00:00
elif target == "bindings":
if ARGUMENTS.get("generate_bindings", "no") == "yes":
godot_executable = godot_bin_path + godot_name
2017-04-18 00:41:39 +00:00
if env["CXX"] == "clang++":
godot_executable += ".llvm"
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'
2017-04-18 00:41:39 +00:00
subprocess.call([godot_executable, '--gdnative-generate-json-api', json_api_file])
2017-05-12 19:53:07 +00:00
# actually create the bindings here
import binding_generator
2017-05-12 19:53:07 +00:00
binding_generator.generate_bindings(json_api_file)
2017-03-15 22:19:58 +00:00
if platform == "linux":
if env["CXX"] == "clang++":
env.Append(CCFLAGS = ['-Wno-writable-strings'])
else:
env.Append(CCFLAGS = ['-Wno-write-strings', '-Wno-return-local-addr'])
2017-03-09 02:03:21 +00:00
2017-05-12 19:53:07 +00:00
env.Append(CPPPATH=['.', godot_headers_path, 'include', 'include/core'])
2017-03-06 07:49:24 +00:00
2017-03-18 14:23:28 +00:00
if platform == "windows":
env.Append(LIBS=[godot_name])
env.Append(LIBPATH=[godot_lib_path])
2017-03-18 14:23:28 +00:00
env.Append(LIBS=['godot_cpp_core'])
2017-05-12 19:53:07 +00:00
env.Append(LIBPATH=['bin'])
2017-03-06 07:49:24 +00:00
2017-03-15 22:19:58 +00:00
env.Append(CPPFLAGS=['-D_GD_CPP_BINDING_IMPL'])
2017-03-06 07:49:24 +00:00
sources = []
2017-05-12 19:53:07 +00:00
add_sources(sources, "src")
2017-03-06 07:49:24 +00:00
2017-05-12 19:53:07 +00:00
library = env.SharedLibrary(target='bin/godot_cpp_bindings', source=sources)
2017-03-06 07:49:24 +00:00
Default(library)