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
|
||||
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="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]
|
||||
|
||||
config/name="SymbolEngine"
|
||||
run/main_scene="res://main.tscn"
|
||||
config/icon="res://icon.png"
|
||||
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 glob
|
||||
import sys
|
||||
|
||||
opts = Variables([], ARGUMENTS)
|
||||
RootDir = os.path.abspath("../");
|
||||
EditorDir = RootDir + "/Editor"
|
||||
|
||||
# Gets the standard flags CC, CCX, etc.
|
||||
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();
|
||||
env = SConscript(RootDir + "/Engine/gdnative_cpp/SConstruct")
|
||||
|
||||
# For the reference:
|
||||
# - CCFLAGS are compilation flags shared between C and C++
|
||||
@ -52,77 +15,24 @@ if env['platform'] == '':
|
||||
# - CPPDEFINES are for pre-processor defines
|
||||
# - 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.
|
||||
env.Append(CPPPATH=[GDNative_Src])
|
||||
env.Append(CPPPATH=[Src])
|
||||
env.Append(CPPPATH=["."])
|
||||
sources = Glob("./*.cpp")
|
||||
|
||||
sources = Glob(GDNative_Src + '/*.cpp') + Glob(Src + '/*cpp')
|
||||
|
||||
for thing in sources :
|
||||
print(thing)
|
||||
|
||||
library = env.SharedLibrary(target=env['target_path'] + env['target_name'] , source=sources)
|
||||
if env["platform"] == "osx":
|
||||
library = env.SharedLibrary(
|
||||
EditorDir + "/bin/libgdexample.{}.{}.framework/libgdexample.{}.{}".format(
|
||||
env["platform"], env["target"], env["platform"], env["target"]
|
||||
),
|
||||
source=sources,
|
||||
)
|
||||
else:
|
||||
library = env.SharedLibrary(
|
||||
EditorDir + "/bin/libgdexample.{}.{}.{}{}".format(
|
||||
env["platform"], env["target"], env["arch_suffix"], env["SHLIBSUFFIX"]
|
||||
),
|
||||
source=sources,
|
||||
)
|
||||
|
||||
Default(library)
|
||||
|
||||
# Generates help for the -h scons option.
|
||||
Help(opts.GenerateHelpText(env))
|
||||
|
@ -3,18 +3,18 @@
|
||||
|
||||
namespace godot {
|
||||
|
||||
|
||||
#pragma region GodotRT
|
||||
void GDExample::_register_methods()
|
||||
void GDExample::_bind_methods()
|
||||
{
|
||||
register_method("_process", &GDExample::_process);
|
||||
}
|
||||
|
||||
void GDExample::_init()
|
||||
{
|
||||
time_passed = 0.f;
|
||||
}
|
||||
// void GDExample::_init()
|
||||
// {
|
||||
// time_passed = 0.f;
|
||||
// }
|
||||
|
||||
void GDExample::_process(float delta)
|
||||
void GDExample::_process(double delta)
|
||||
{
|
||||
time_passed += delta;
|
||||
|
||||
@ -29,9 +29,12 @@ void GDExample::_process(float delta)
|
||||
#pragma endregion GodotRT
|
||||
|
||||
GDExample::GDExample()
|
||||
{}
|
||||
{
|
||||
time_passed = 0.f;
|
||||
}
|
||||
|
||||
GDExample::~GDExample()
|
||||
{}
|
||||
|
||||
}
|
||||
|
||||
} // godot
|
@ -1,13 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
#include <godot.hpp>
|
||||
#include <Sprite.hpp>
|
||||
#include <godot_cpp/godot.hpp>
|
||||
#include <godot_cpp/classes/sprite2d.hpp>
|
||||
|
||||
namespace godot {
|
||||
|
||||
class GDExample : public Sprite
|
||||
class GDExample : public Sprite2D
|
||||
{
|
||||
GODOT_CLASS(GDExample, Sprite)
|
||||
GDCLASS(GDExample, Sprite2D)
|
||||
|
||||
public:
|
||||
|
||||
@ -16,10 +16,10 @@ public:
|
||||
#pragma endregion Data
|
||||
|
||||
#pragma region GodotRT
|
||||
static void _register_methods();
|
||||
static void _bind_methods();
|
||||
|
||||
void _init();
|
||||
void _process(float delta);
|
||||
//void _init() override;
|
||||
void _process(double delta) override;
|
||||
#pragma endregion GodotRT
|
||||
|
||||
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\
|
||||
|
||||
start godot.windows.tools.64.exe
|
||||
start godot.windows.opt.tools.64.exe
|
||||
|
||||
exit
|
Reference in New Issue
Block a user