diff --git a/binding/http-binding.cpp b/binding/http-binding.cpp index 4d52b1c..b624163 100644 --- a/binding/http-binding.cpp +++ b/binding/http-binding.cpp @@ -81,8 +81,6 @@ RB_METHOD(httpPost) { req.headers().insert(headers.begin(), headers.end()); } - VALUE keys = NUM2INT(rb_funcall(postDataHash, rb_intern("keys"), 0)); - auto postData = hash2StringMap(postDataHash); auto res = req.post(postData); ret = rb_hash_new(); diff --git a/binding/meson.build b/binding/meson.build index 09e455b..7adfdfa 100644 --- a/binding/meson.build +++ b/binding/meson.build @@ -3,7 +3,7 @@ if get_option('mri_includes') == '' ver = get_option('mri_version') if ver.version_compare('<=1.8') global_args += '-DMKXPZ_LEGACY_RUBY' - elif ver.version_compare('>=3.0') + elif ver.version_compare('>=3.0') and compilers['cpp'].get_id() == 'clang' global_args += '-fdeclspec' endif global_dependencies += dependency('ruby-' + ver) @@ -46,6 +46,7 @@ endif if miniffi == true binding_source += files('miniffi-binding.cpp') + binding_source += files('miniffi.cpp') endif global_sources += binding_source diff --git a/binding/miniffi-binding.cpp b/binding/miniffi-binding.cpp index 952e446..0b6fbe7 100644 --- a/binding/miniffi-binding.cpp +++ b/binding/miniffi-binding.cpp @@ -12,7 +12,7 @@ #define MVAL2RB(v) ULONG2NUM(v) #define RB2MVAL(v) (mffi_value)NUM2ULONG(v) #else - #ifdef _WIN64 + #ifdef __MINGW64__ #define MVAL2RB(v) ULL2NUM(v) #define RB2MVAL(v) (mffi_value)NUM2ULL(v) #else @@ -214,7 +214,7 @@ RB_METHOD(MiniFFI_call) { VALUE func = rb_iv_get(self, "_func"); VALUE own_imports = rb_iv_get(self, "_imports"); VALUE own_exports = rb_iv_get(self, "_exports"); - MINIFFI_FUNC ApiFunction = (MINIFFI_FUNC)NUM2ULONG(func); + MINIFFI_FUNC ApiFunction = (MINIFFI_FUNC)RB2MVAL(func); VALUE args; int items = rb_scan_args(argc, argv, "0*", &args); int nimport = RARRAY_LEN(own_imports); @@ -234,7 +234,7 @@ RB_METHOD(MiniFFI_call) { } else { StringValue(str); rb_str_modify(str); - lParam = (unsigned long)RSTRING_PTR(str); + lParam = (mffi_value)RSTRING_PTR(str); } break; diff --git a/binding/miniffi.c b/binding/miniffi.cpp similarity index 86% rename from binding/miniffi.c rename to binding/miniffi.cpp index 3a6d5f8..401c059 100644 --- a/binding/miniffi.c +++ b/binding/miniffi.cpp @@ -8,13 +8,10 @@ mffi_value miniffi_call_intern(MINIFFI_FUNC target, MiniFFIFuncArgs *p, int npar p->params[4], p->params[5], p->params[6], p->params[7]); } #else -mffi_value miniffi_call_intern(MINIFFI_FUNC target, MiniFFIFuncArgs *p, size_t nparams) { - return call_asm(target, p, nparams); -} - #define INTEL_ASM ".intel_syntax noprefix\n" +__attribute__((noinline)) #ifndef __MINGW64__ -mffi_value call_asm(MINIFFI_FUNC target, MINIFFIFuncArgs *p, size_t nparams) { +mffi_value miniffi_call_intern(MINIFFI_FUNC target, MiniFFIFuncArgs *p, int nparams) { mffi_value ret; void *old_esp = 0; @@ -39,7 +36,7 @@ mffi_value call_asm(MINIFFI_FUNC target, MINIFFIFuncArgs *p, size_t nparams) { "call edx\n" : "=a"(ret) - : "b"(nparams), "S"(params), "d"(target), "D"(&old_esp) + : "b"(nparams), "S"(p), "d"(target), "D"(&old_esp) : "ecx" ); @@ -57,7 +54,7 @@ mffi_value call_asm(MINIFFI_FUNC target, MINIFFIFuncArgs *p, size_t nparams) { return ret; } #else -mffi_value call_asm(MINIFFI_FUNC target, MINIFFIFuncArgs *p, size_t nparams) { +mffi_value miniffi_call_intern(MINIFFI_FUNC target, MiniFFIFuncArgs *p, int nparams) { mffi_value ret; void *old_rsp = 0; asm volatile(INTEL_ASM @@ -81,7 +78,7 @@ mffi_value call_asm(MINIFFI_FUNC target, MINIFFIFuncArgs *p, size_t nparams) { "call rdx\n" : "=a"(ret) - : "b"(nparams), "S"(params), "d"(target), "D"(&old_rsp) + : "b"(nparams), "S"(p), "d"(target), "D"(&old_rsp) : "rcx" ); asm volatile(INTEL_ASM diff --git a/binding/miniffi.h b/binding/miniffi.h index 48f6f19..995def4 100644 --- a/binding/miniffi.h +++ b/binding/miniffi.h @@ -1,8 +1,6 @@ #pragma once -#ifdef __cplusplus -extern "C" { -#endif +#include #if defined(__linux__) || defined(__APPLE__) #define MINIFFI_MAX_ARGS 8l @@ -26,7 +24,3 @@ typedef struct { } MiniFFIFuncArgs; mffi_value miniffi_call_intern(MINIFFI_FUNC target, MiniFFIFuncArgs *p, int nparams); - -#ifdef __cplusplus -} -#endif diff --git a/macos/mkxp-z.xcodeproj/project.pbxproj b/macos/mkxp-z.xcodeproj/project.pbxproj index 17235e8..41afbcd 100644 --- a/macos/mkxp-z.xcodeproj/project.pbxproj +++ b/macos/mkxp-z.xcodeproj/project.pbxproj @@ -117,12 +117,12 @@ 3B10EE092568E96A00372D13 /* binding-mri.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10EDF02568E96A00372D13 /* binding-mri.cpp */; }; 3B10EE0B2568E96A00372D13 /* module_rpg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10EDF32568E96A00372D13 /* module_rpg.cpp */; }; 3B10EE0C2568E96A00372D13 /* viewport-binding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B10EDF42568E96A00372D13 /* viewport-binding.cpp */; }; - 3B312843259E7DC1002EAB43 /* miniffi.c in Sources */ = {isa = PBXBuildFile; fileRef = 3B312842259E7DC1002EAB43 /* miniffi.c */; }; - 3B312844259E7DC1002EAB43 /* miniffi.c in Sources */ = {isa = PBXBuildFile; fileRef = 3B312842259E7DC1002EAB43 /* miniffi.c */; }; - 3B312845259E7DC1002EAB43 /* miniffi.c in Sources */ = {isa = PBXBuildFile; fileRef = 3B312842259E7DC1002EAB43 /* miniffi.c */; }; - 3B312846259E7DC1002EAB43 /* miniffi.c in Sources */ = {isa = PBXBuildFile; fileRef = 3B312842259E7DC1002EAB43 /* miniffi.c */; }; - 3B312847259E7DC1002EAB43 /* miniffi.c in Sources */ = {isa = PBXBuildFile; fileRef = 3B312842259E7DC1002EAB43 /* miniffi.c */; }; - 3B312848259E7DC1002EAB43 /* miniffi.c in Sources */ = {isa = PBXBuildFile; fileRef = 3B312842259E7DC1002EAB43 /* miniffi.c */; }; + 3B312843259E7DC1002EAB43 /* miniffi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B312842259E7DC1002EAB43 /* miniffi.cpp */; }; + 3B312844259E7DC1002EAB43 /* miniffi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B312842259E7DC1002EAB43 /* miniffi.cpp */; }; + 3B312845259E7DC1002EAB43 /* miniffi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B312842259E7DC1002EAB43 /* miniffi.cpp */; }; + 3B312846259E7DC1002EAB43 /* miniffi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B312842259E7DC1002EAB43 /* miniffi.cpp */; }; + 3B312847259E7DC1002EAB43 /* miniffi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B312842259E7DC1002EAB43 /* miniffi.cpp */; }; + 3B312848259E7DC1002EAB43 /* miniffi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B312842259E7DC1002EAB43 /* miniffi.cpp */; }; 3B426F77256BA847009EA00F /* libsigc-2.0.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B426F76256BA847009EA00F /* libsigc-2.0.a */; }; 3B522DA9259BAA42003301C4 /* libfluidsynth.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B522DA1259BAA13003301C4 /* libfluidsynth.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 3B522DAA259BAA4A003301C4 /* libfluidsynth.dylib in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B522DA1259BAA13003301C4 /* libfluidsynth.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; @@ -1166,7 +1166,7 @@ 3B10EDF42568E96A00372D13 /* viewport-binding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "viewport-binding.cpp"; sourceTree = ""; }; 3B10EE1F2569348E00372D13 /* json5pp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = json5pp.hpp; sourceTree = ""; }; 3B312841259E7DC1002EAB43 /* miniffi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = miniffi.h; sourceTree = ""; }; - 3B312842259E7DC1002EAB43 /* miniffi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = miniffi.c; sourceTree = ""; }; + 3B312842259E7DC1002EAB43 /* miniffi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = miniffi.cpp; sourceTree = ""; }; 3B426F6B256B8AC0009EA00F /* fs_std_impl.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = fs_std_impl.hpp; sourceTree = ""; }; 3B426F6C256B8AC0009EA00F /* fs_fwd.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = fs_fwd.hpp; sourceTree = ""; }; 3B426F6D256B8AC0009EA00F /* fs_std.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = fs_std.hpp; sourceTree = ""; }; @@ -1822,7 +1822,7 @@ 3B10EDE62568E96A00372D13 /* etc-binding.cpp */, 3B10EDE72568E96A00372D13 /* tilemap-binding.cpp */, 3B10EDE82568E96A00372D13 /* miniffi-binding.cpp */, - 3B312842259E7DC1002EAB43 /* miniffi.c */, + 3B312842259E7DC1002EAB43 /* miniffi.cpp */, 3B312841259E7DC1002EAB43 /* miniffi.h */, 3B10EDE92568E96A00372D13 /* graphics-binding.cpp */, 3B10EDEA2568E96A00372D13 /* plane-binding.cpp */, @@ -2345,7 +2345,7 @@ 3B8E43752587B200008218FC /* windowvx.cpp in Sources */, 3B522DEA259C2039003301C4 /* LUrlParser.cpp in Sources */, 3B8E43762587B200008218FC /* module_rpg.cpp in Sources */, - 3B312848259E7DC1002EAB43 /* miniffi.c in Sources */, + 3B312848259E7DC1002EAB43 /* miniffi.cpp in Sources */, 3B8E43772587B200008218FC /* autotiles.cpp in Sources */, 3B8E43782587B200008218FC /* audiostream.cpp in Sources */, 3B8E43792587B200008218FC /* binding-util.cpp in Sources */, @@ -2440,7 +2440,7 @@ 3BC65CE52584EDC60063AFF1 /* windowvx.cpp in Sources */, 3B522DE7259C2039003301C4 /* LUrlParser.cpp in Sources */, 3BC65CE62584EDC60063AFF1 /* module_rpg.cpp in Sources */, - 3B312845259E7DC1002EAB43 /* miniffi.c in Sources */, + 3B312845259E7DC1002EAB43 /* miniffi.cpp in Sources */, 3BC65CE72584EDC60063AFF1 /* autotiles.cpp in Sources */, 3BC65CE82584EDC60063AFF1 /* audiostream.cpp in Sources */, 3BC65CE92584EDC60063AFF1 /* binding-util.cpp in Sources */, @@ -2528,7 +2528,7 @@ 3BC65DA62584F3AD0063AFF1 /* windowvx.cpp in Sources */, 3B522DE5259C2039003301C4 /* LUrlParser.cpp in Sources */, 3BC65DA72584F3AD0063AFF1 /* module_rpg.cpp in Sources */, - 3B312843259E7DC1002EAB43 /* miniffi.c in Sources */, + 3B312843259E7DC1002EAB43 /* miniffi.cpp in Sources */, 3BC65DA82584F3AD0063AFF1 /* autotiles.cpp in Sources */, 3BC65DA92584F3AD0063AFF1 /* audiostream.cpp in Sources */, 3BC65DAA2584F3AD0063AFF1 /* binding-util.cpp in Sources */, @@ -2616,7 +2616,7 @@ 3B10EDBC2568E95E00372D13 /* windowvx.cpp in Sources */, 3B522DE6259C2039003301C4 /* LUrlParser.cpp in Sources */, 3B10EE0B2568E96A00372D13 /* module_rpg.cpp in Sources */, - 3B312844259E7DC1002EAB43 /* miniffi.c in Sources */, + 3B312844259E7DC1002EAB43 /* miniffi.cpp in Sources */, 3B10EDD22568E95E00372D13 /* autotiles.cpp in Sources */, 3B10EDB92568E95E00372D13 /* audiostream.cpp in Sources */, 3B10EE082568E96A00372D13 /* binding-util.cpp in Sources */, @@ -2704,7 +2704,7 @@ 3BF694F02595FE5F0016920C /* windowvx.cpp in Sources */, 3B522DE9259C2039003301C4 /* LUrlParser.cpp in Sources */, 3BF694F12595FE5F0016920C /* module_rpg.cpp in Sources */, - 3B312847259E7DC1002EAB43 /* miniffi.c in Sources */, + 3B312847259E7DC1002EAB43 /* miniffi.cpp in Sources */, 3BF694F22595FE5F0016920C /* autotiles.cpp in Sources */, 3BF694F32595FE5F0016920C /* audiostream.cpp in Sources */, 3BF694F42595FE5F0016920C /* binding-util.cpp in Sources */, @@ -2792,7 +2792,7 @@ 3BF6958E259608050016920C /* windowvx.cpp in Sources */, 3B522DE8259C2039003301C4 /* LUrlParser.cpp in Sources */, 3BF6958F259608050016920C /* module_rpg.cpp in Sources */, - 3B312846259E7DC1002EAB43 /* miniffi.c in Sources */, + 3B312846259E7DC1002EAB43 /* miniffi.cpp in Sources */, 3BF69590259608050016920C /* autotiles.cpp in Sources */, 3BF69591259608050016920C /* audiostream.cpp in Sources */, 3BF69592259608050016920C /* binding-util.cpp in Sources */, diff --git a/src/meson.build b/src/meson.build index fda7f46..e762056 100644 --- a/src/meson.build +++ b/src/meson.build @@ -33,6 +33,9 @@ if get_option('enable-https') == true if openssl.found() == true global_dependencies += openssl global_args += '-DMKXPZ_SSL' + if host_system == 'windows' + global_link_args += '-lcrypt32' + endif else warning('Could not locate OpenSSL. HTTPS will be disabled.') endif