got native cpp extension to work
This commit is contained in:
parent
bf7650bf1d
commit
e7201941fe
1
.gitignore
vendored
1
.gitignore
vendored
@ -42,3 +42,4 @@ mono_crash.*.json
|
|||||||
|
|
||||||
# Fork
|
# Fork
|
||||||
Source/.sconsign.dblite
|
Source/.sconsign.dblite
|
||||||
|
.vs
|
||||||
|
7
.vscode/settings.json
vendored
Normal file
7
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"*.rmd": "markdown",
|
||||||
|
"xtr1common": "cpp"
|
||||||
|
},
|
||||||
|
"godot_tools.editor_path": "c:\\Projects\\SymbolEngine\\Engine\\gd\\bin\\godot.windows.opt.tools.64.exe"
|
||||||
|
}
|
BIN
Editor/bin/libgdexample.windows.debug.64.dll
Normal file
BIN
Editor/bin/libgdexample.windows.debug.64.dll
Normal file
Binary file not shown.
BIN
Editor/bin/libgdexample.windows.debug.64.exp
Normal file
BIN
Editor/bin/libgdexample.windows.debug.64.exp
Normal file
Binary file not shown.
BIN
Editor/bin/libgdexample.windows.debug.64.lib
Normal file
BIN
Editor/bin/libgdexample.windows.debug.64.lib
Normal file
Binary file not shown.
12
Editor/gdexample.gdextension
Normal file
12
Editor/gdexample.gdextension
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[configuration]
|
||||||
|
|
||||||
|
entry_symbol = "example_library_init"
|
||||||
|
|
||||||
|
[libraries]
|
||||||
|
|
||||||
|
linux.64.debug = "bin/libgdexample.linux.debug.64.so"
|
||||||
|
linux.64.release = "bin/libgdexample.linux.release.64.so"
|
||||||
|
windows.64.debug = "bin/libgdexample.windows.debug.64.dll"
|
||||||
|
windows.64.release = "bin/libgdexample.windows.release.64.dll"
|
||||||
|
macos.debug = "bin/libgdexample.debug.framework"
|
||||||
|
macos.release = "bin/libgdexample.release.framework"
|
@ -1,3 +1,14 @@
|
|||||||
[gd_scene format=3 uid="uid://bqqewt05ne1ad"]
|
[gd_scene load_steps=2 format=3 uid="uid://bqqewt05ne1ad"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cnv7sgufjc3fk" path="res://icon.png" id="1_tqon5"]
|
||||||
|
|
||||||
[node name="main" type="Node"]
|
[node name="main" type="Node"]
|
||||||
|
|
||||||
|
[node name="GDExample" type="GDExample" parent="."]
|
||||||
|
position = Vector2(7.83596, 18.1283)
|
||||||
|
texture = ExtResource( "1_tqon5" )
|
||||||
|
|
||||||
|
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||||
|
modulate = Color(1, 0.309804, 0.580392, 1)
|
||||||
|
position = Vector2(214, 2)
|
||||||
|
texture = ExtResource( "1_tqon5" )
|
||||||
|
@ -11,5 +11,10 @@ config_version=5
|
|||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="SymbolEngine"
|
config/name="SymbolEngine"
|
||||||
|
run/main_scene="res://main.tscn"
|
||||||
config/icon="res://icon.png"
|
config/icon="res://icon.png"
|
||||||
config/features=PackedStringArray("4.0", "Vulkan Clustered")
|
config/features=PackedStringArray("4.0", "Vulkan Clustered")
|
||||||
|
|
||||||
|
[native_extensions]
|
||||||
|
|
||||||
|
paths=["res://../Source/gdexample.gdextension"]
|
||||||
|
@ -1,48 +1,11 @@
|
|||||||
#!python
|
#!/usr/bin/env python
|
||||||
import os
|
import os
|
||||||
import glob
|
import sys
|
||||||
|
|
||||||
opts = Variables([], ARGUMENTS)
|
RootDir = os.path.abspath("../");
|
||||||
|
EditorDir = RootDir + "/Editor"
|
||||||
|
|
||||||
# Gets the standard flags CC, CCX, etc.
|
env = SConscript(RootDir + "/Engine/gdnative_cpp/SConstruct")
|
||||||
env = DefaultEnvironment()
|
|
||||||
|
|
||||||
ProjPath = os.path.abspath("../");
|
|
||||||
print("Project Path: " + ProjPath);
|
|
||||||
|
|
||||||
# Define our options
|
|
||||||
opts.Add(EnumVariable('target', "Compilation target", 'debug', ['d', 'debug', 'r', 'release']))
|
|
||||||
opts.Add(EnumVariable('platform', "Compilation platform", '', ['', 'windows', 'x11', 'linux', 'osx']))
|
|
||||||
opts.Add(EnumVariable('p', "Compilation target, alias for 'platform'", '', ['', 'windows', 'x11', 'linux', 'osx']))
|
|
||||||
opts.Add(BoolVariable('use_llvm', "Use the LLVM / Clang compiler", 'no'))
|
|
||||||
opts.Add(PathVariable('target_path', 'The path where the lib is installed.', ProjPath + '/Engine/gdnative_cpp/bin/'))
|
|
||||||
opts.Add(PathVariable('target_name', 'The library name.', 'libgdexample', PathVariable.PathAccept))
|
|
||||||
|
|
||||||
# Local dependency paths, adapt them to your setup
|
|
||||||
godot_headers_path = ProjPath + "/Engine/gdnative_cpp/godot-headers/"
|
|
||||||
cpp_bindings_path = ProjPath + "/Engine/gdnative_cpp/"
|
|
||||||
cpp_library = "libgodot-cpp"
|
|
||||||
|
|
||||||
GDNative_Src = ProjPath + '/Engine/gdnative_cpp/src/'
|
|
||||||
Src = ProjPath + "/Source/"
|
|
||||||
|
|
||||||
# only support 64 at this time..
|
|
||||||
bits = 64
|
|
||||||
|
|
||||||
# Updates the environment with the option variables.
|
|
||||||
opts.Update(env)
|
|
||||||
|
|
||||||
# Process some arguments
|
|
||||||
if env['use_llvm']:
|
|
||||||
env['CC'] = 'clang'
|
|
||||||
env['CXX'] = 'clang++'
|
|
||||||
|
|
||||||
if env['p'] != '':
|
|
||||||
env['platform'] = env['p']
|
|
||||||
|
|
||||||
if env['platform'] == '':
|
|
||||||
print("No valid target platform selected.")
|
|
||||||
quit();
|
|
||||||
|
|
||||||
# For the reference:
|
# For the reference:
|
||||||
# - CCFLAGS are compilation flags shared between C and C++
|
# - CCFLAGS are compilation flags shared between C and C++
|
||||||
@ -52,77 +15,24 @@ if env['platform'] == '':
|
|||||||
# - CPPDEFINES are for pre-processor defines
|
# - CPPDEFINES are for pre-processor defines
|
||||||
# - LINKFLAGS are for linking flags
|
# - LINKFLAGS are for linking flags
|
||||||
|
|
||||||
# Check our platform specifics
|
|
||||||
if env['platform'] == "osx":
|
|
||||||
env['target_path'] += 'osx/'
|
|
||||||
cpp_library += '.osx'
|
|
||||||
env.Append(CCFLAGS=['-arch', 'x86_64'])
|
|
||||||
env.Append(CXXFLAGS=['-std=c++17'])
|
|
||||||
env.Append(LINKFLAGS=['-arch', 'x86_64'])
|
|
||||||
if env['target'] in ('debug', 'd'):
|
|
||||||
env.Append(CCFLAGS=['-g', '-O2'])
|
|
||||||
else:
|
|
||||||
env.Append(CCFLAGS=['-g', '-O3'])
|
|
||||||
|
|
||||||
elif env['platform'] in ('x11', 'linux'):
|
|
||||||
env['target_path'] += 'x11/'
|
|
||||||
cpp_library += '.linux'
|
|
||||||
env.Append(CCFLAGS=['-fPIC'])
|
|
||||||
env.Append(CXXFLAGS=['-std=c++17'])
|
|
||||||
if env['target'] in ('debug', 'd'):
|
|
||||||
env.Append(CCFLAGS=['-g3', '-Og'])
|
|
||||||
else:
|
|
||||||
env.Append(CCFLAGS=['-g', '-O3'])
|
|
||||||
|
|
||||||
elif env['platform'] == "windows":
|
|
||||||
env['target_path'] += 'win64/'
|
|
||||||
cpp_library += '.windows'
|
|
||||||
# This makes sure to keep the session environment variables on windows,
|
|
||||||
# that way you can run scons in a vs 2017 prompt and it will find all the required tools
|
|
||||||
env.Append(ENV=os.environ)
|
|
||||||
|
|
||||||
env.Append(CPPDEFINES=['WIN32', '_WIN32', '_WINDOWS', '_CRT_SECURE_NO_WARNINGS'])
|
|
||||||
env.Append(CCFLAGS=['-W3', '-GR'])
|
|
||||||
env.Append(CXXFLAGS='/std:c++17')
|
|
||||||
if env['target'] in ('debug', 'd'):
|
|
||||||
env.Append(CPPDEFINES=['_DEBUG'])
|
|
||||||
env.Append(CCFLAGS=['-EHsc', '-MDd', '-ZI'])
|
|
||||||
env.Append(LINKFLAGS=['-DEBUG'])
|
|
||||||
else:
|
|
||||||
env.Append(CPPDEFINES=['NDEBUG'])
|
|
||||||
env.Append(CCFLAGS=['-O2', '-EHsc', '-MD'])
|
|
||||||
|
|
||||||
if env['target'] in ('debug', 'd'):
|
|
||||||
cpp_library += '.debug'
|
|
||||||
else:
|
|
||||||
cpp_library += '.release'
|
|
||||||
|
|
||||||
cpp_library += '.' + str(bits)
|
|
||||||
|
|
||||||
# make sure our binding library is properly includes
|
|
||||||
env.Append(CPPPATH=[
|
|
||||||
'.',
|
|
||||||
godot_headers_path,
|
|
||||||
cpp_bindings_path + 'include/',
|
|
||||||
cpp_bindings_path + 'include/core/',
|
|
||||||
cpp_bindings_path + 'include/gen/'])
|
|
||||||
|
|
||||||
env.Append(LIBPATH=[cpp_bindings_path + "/bin"])
|
|
||||||
|
|
||||||
env.Append(LIBS=[cpp_library])
|
|
||||||
|
|
||||||
# tweak this if you want to use different folders, or more folders, to store your source code in.
|
# tweak this if you want to use different folders, or more folders, to store your source code in.
|
||||||
env.Append(CPPPATH=[GDNative_Src])
|
env.Append(CPPPATH=["."])
|
||||||
env.Append(CPPPATH=[Src])
|
sources = Glob("./*.cpp")
|
||||||
|
|
||||||
sources = Glob(GDNative_Src + '/*.cpp') + Glob(Src + '/*cpp')
|
if env["platform"] == "osx":
|
||||||
|
library = env.SharedLibrary(
|
||||||
for thing in sources :
|
EditorDir + "/bin/libgdexample.{}.{}.framework/libgdexample.{}.{}".format(
|
||||||
print(thing)
|
env["platform"], env["target"], env["platform"], env["target"]
|
||||||
|
),
|
||||||
library = env.SharedLibrary(target=env['target_path'] + env['target_name'] , source=sources)
|
source=sources,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
library = env.SharedLibrary(
|
||||||
|
EditorDir + "/bin/libgdexample.{}.{}.{}{}".format(
|
||||||
|
env["platform"], env["target"], env["arch_suffix"], env["SHLIBSUFFIX"]
|
||||||
|
),
|
||||||
|
source=sources,
|
||||||
|
)
|
||||||
|
|
||||||
Default(library)
|
Default(library)
|
||||||
|
|
||||||
# Generates help for the -h scons option.
|
|
||||||
Help(opts.GenerateHelpText(env))
|
|
||||||
|
@ -3,18 +3,18 @@
|
|||||||
|
|
||||||
namespace godot {
|
namespace godot {
|
||||||
|
|
||||||
|
|
||||||
#pragma region GodotRT
|
#pragma region GodotRT
|
||||||
void GDExample::_register_methods()
|
void GDExample::_bind_methods()
|
||||||
{
|
{
|
||||||
register_method("_process", &GDExample::_process);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GDExample::_init()
|
// void GDExample::_init()
|
||||||
{
|
// {
|
||||||
time_passed = 0.f;
|
// time_passed = 0.f;
|
||||||
}
|
// }
|
||||||
|
|
||||||
void GDExample::_process(float delta)
|
void GDExample::_process(double delta)
|
||||||
{
|
{
|
||||||
time_passed += delta;
|
time_passed += delta;
|
||||||
|
|
||||||
@ -29,9 +29,12 @@ void GDExample::_process(float delta)
|
|||||||
#pragma endregion GodotRT
|
#pragma endregion GodotRT
|
||||||
|
|
||||||
GDExample::GDExample()
|
GDExample::GDExample()
|
||||||
{}
|
{
|
||||||
|
time_passed = 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
GDExample::~GDExample()
|
GDExample::~GDExample()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
}
|
|
||||||
|
} // godot
|
@ -1,13 +1,13 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <godot.hpp>
|
#include <godot_cpp/godot.hpp>
|
||||||
#include <Sprite.hpp>
|
#include <godot_cpp/classes/sprite2d.hpp>
|
||||||
|
|
||||||
namespace godot {
|
namespace godot {
|
||||||
|
|
||||||
class GDExample : public Sprite
|
class GDExample : public Sprite2D
|
||||||
{
|
{
|
||||||
GODOT_CLASS(GDExample, Sprite)
|
GDCLASS(GDExample, Sprite2D)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -16,10 +16,10 @@ public:
|
|||||||
#pragma endregion Data
|
#pragma endregion Data
|
||||||
|
|
||||||
#pragma region GodotRT
|
#pragma region GodotRT
|
||||||
static void _register_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
void _init();
|
//void _init() override;
|
||||||
void _process(float delta);
|
void _process(double delta) override;
|
||||||
#pragma endregion GodotRT
|
#pragma endregion GodotRT
|
||||||
|
|
||||||
GDExample();
|
GDExample();
|
||||||
|
BIN
Source/gdexample.obj
Normal file
BIN
Source/gdexample.obj
Normal file
Binary file not shown.
@ -1,26 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "gdexample.h"
|
|
||||||
|
|
||||||
#define gd_export(Type_) \
|
|
||||||
extern "C" Type_ GDN_Export
|
|
||||||
|
|
||||||
gd_export(void)
|
|
||||||
godot_gdnative_init(godot_gdnative_init_options* o)
|
|
||||||
{
|
|
||||||
godot::Godot::gdnative_init(o);
|
|
||||||
}
|
|
||||||
|
|
||||||
gd_export(void)
|
|
||||||
godot_gdnative_terminate(godot_gdnative_terminate_options* o)
|
|
||||||
{
|
|
||||||
godot:Godot::gdnative_terminate(o);
|
|
||||||
}
|
|
||||||
|
|
||||||
gd_export(void)
|
|
||||||
godot_nativescript_init(void* handle)
|
|
||||||
{
|
|
||||||
godot::Godot::nativescript_init(handle);
|
|
||||||
|
|
||||||
godot::register_class<godot::GDExample>();
|
|
||||||
}
|
|
43
Source/register_types.cpp
Normal file
43
Source/register_types.cpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#include "register_types.h"
|
||||||
|
|
||||||
|
#include "gdexample.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace godot {
|
||||||
|
|
||||||
|
void register_types(ModuleInitializationLevel p_level)
|
||||||
|
{
|
||||||
|
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ClassDB::register_class<GDExample>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void unregister_types(ModuleInitializationLevel p_level)
|
||||||
|
{
|
||||||
|
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Nothing for now...
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
GDNativeBool GDN_EXPORT
|
||||||
|
example_library_init(
|
||||||
|
GDNativeInterface const* p_interface,
|
||||||
|
GDNativeExtensionClassLibraryPtr const p_library,
|
||||||
|
GDNativeInitialization* r_initialization)
|
||||||
|
{
|
||||||
|
godot::GDExtensionBinding::InitObject
|
||||||
|
init_obj(p_interface, p_library, r_initialization);
|
||||||
|
init_obj.register_initializer(register_types);
|
||||||
|
init_obj.register_terminator(unregister_types);
|
||||||
|
init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE);
|
||||||
|
|
||||||
|
return init_obj.init();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} // godot
|
||||||
|
|
4
Source/register_types.h
Normal file
4
Source/register_types.h
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
void register_types();
|
||||||
|
void unregister_types();
|
BIN
Source/register_types.obj
Normal file
BIN
Source/register_types.obj
Normal file
Binary file not shown.
BIN
Source/vc140.idb
BIN
Source/vc140.idb
Binary file not shown.
BIN
Source/vc140.pdb
BIN
Source/vc140.pdb
Binary file not shown.
@ -1,5 +1,5 @@
|
|||||||
cd Engine\gd\bin\
|
cd Engine\gd\bin\
|
||||||
|
|
||||||
start godot.windows.tools.64.exe
|
start godot.windows.opt.tools.64.exe
|
||||||
|
|
||||||
exit
|
exit
|
Reference in New Issue
Block a user