summaryrefslogtreecommitdiffstats
path: root/binding_generator/src/main.rs
diff options
context:
space:
mode:
authorKarroffel <therzog@mail.de>2017-03-15 23:19:58 +0100
committerKarroffel <therzog@mail.de>2017-03-15 23:19:58 +0100
commit8d63048c6df08da5f0f88b62b2868c6938c222b7 (patch)
treec9113e2139838b11d3040469104a153d1f45a4af /binding_generator/src/main.rs
parentbce9ac109d63d67c3e7f0b25df8aa9d72e094d1b (diff)
downloadredot-cpp-8d63048c6df08da5f0f88b62b2868c6938c222b7.tar.gz
Windows compatibility
Diffstat (limited to 'binding_generator/src/main.rs')
-rw-r--r--binding_generator/src/main.rs15
1 files changed, 12 insertions, 3 deletions
diff --git a/binding_generator/src/main.rs b/binding_generator/src/main.rs
index 3f93e7c..1af7aaa 100644
--- a/binding_generator/src/main.rs
+++ b/binding_generator/src/main.rs
@@ -125,6 +125,15 @@ fn generate_class_header(used_classes: &HashSet<&String>, class: &GodotClass) ->
contents = contents + "#define ";
contents = contents + strip_name(&class.name).to_string().to_uppercase().as_str() + "_H\n\n";
+
+ contents = contents + "#if defined(_WIN32) && defined(_GD_CPP_BINDING_IMPL)\n";
+ contents = contents + "# define GD_CPP_BINDING_API __declspec(dllexport)\n";
+ contents = contents + "#elif defined(_WIN32)\n";
+ contents = contents + "# define GD_CPP_BINDING_API __declspec(dllimport)\n";
+ contents = contents + "#else\n";
+ contents = contents + "# define GD_CPP_BINDING_API\n";
+ contents = contents + "#endif\n\n";
+
contents = contents + "\n#include \"core/CoreTypes.hpp\"\n";
@@ -154,7 +163,7 @@ fn generate_class_header(used_classes: &HashSet<&String>, class: &GodotClass) ->
name
};
- contents = contents + "class " + strip_name(&class.name);
+ contents = contents + "class GD_CPP_BINDING_API " + strip_name(&class.name);
if class.base_class != "" {
contents = contents + " : public " + strip_name(&class.base_class);
@@ -234,7 +243,7 @@ fn generate_class_header(used_classes: &HashSet<&String>, class: &GodotClass) ->
if class.base_class == "" {
// Object
- contents = contents + "\ninline Variant::operator Object() const\n{\n\n";
+ contents = contents + "\ninline\n#if defined(_WIN32)\n# ifdef _GD_CPP_BINDING_IMPL\n __declspec(dllexport)\n# else\n __declspec(dllimport)\n# endif\n#endif\nVariant::operator Object() const\n{\n\n";
contents = contents + "\treturn Object(godot_variant_as_object(&_godot_variant));\n\n";
@@ -551,7 +560,7 @@ fn generate_icall_implementation(icalls: &HashSet<(String, Vec<String>)>) -> Str
contents = contents + "\t" + if !is_core_type(ret) && !is_primitive(ret) { "godot_object*" } else { strip_name(ret) } + " ret;\n";
}
- contents = contents + "\tconst void *args[] = {\n";
+ contents = contents + "\tconst void *args[" + if args.len() == 0 { "1" } else { "" } + "] = {\n";
let mut j = 0;
for arg in args {