diff options
author | Karroffel <therzog@mail.de> | 2017-03-15 23:19:58 +0100 |
---|---|---|
committer | Karroffel <therzog@mail.de> | 2017-03-15 23:19:58 +0100 |
commit | 8d63048c6df08da5f0f88b62b2868c6938c222b7 (patch) | |
tree | c9113e2139838b11d3040469104a153d1f45a4af /binding_generator/src/main.rs | |
parent | bce9ac109d63d67c3e7f0b25df8aa9d72e094d1b (diff) | |
download | redot-cpp-8d63048c6df08da5f0f88b62b2868c6938c222b7.tar.gz |
Windows compatibility
Diffstat (limited to 'binding_generator/src/main.rs')
-rw-r--r-- | binding_generator/src/main.rs | 15 |
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 { |