Ok so I decided to see what it would take to finally support 64bit in ENIGMA.
The first thing was getting JDI and the Compiler to build with MinGW64
https://github.com/enigma-dev/enigma-dev/commit/331235e30f971ca7e38393efe1423cd38f1ff027https://github.com/enigma-dev/enigma-dev/commit/f1e8cfdd0d55e6b901fef60dce19781f43d36859https://github.com/enigma-dev/enigma-dev/commit/355d2d8fd8c5d17fa7232034a18d63475658a4f5Edit: Josh approves as of this commit.
https://github.com/enigma-dev/enigma-dev/commit/9d49bf81c81106f8d8ed78d60c03001681a15c31Edit: Josh advised me to use the fixed size types for the overload, so now the compiler builds with C++11 support too for both 32bit and 64bit GCC
https://github.com/enigma-dev/enigma-dev/commit/5b99151173b1dad9acb059f9e99a75974801d42bI should not have wrote those straight to master but they may need reverted, anyway...
64bit Java/JNA can only load 64bit dll's and 32bit Java/JNA can only load 32bit dll's. This means that the users Java installation with ENIGMA thanks to the plugin and using ENIGMA the way we do will have to match the architecture of that the user not only has but also intends to target.
So if you have 64bit Java, with any ENIGMA release you will only be able to make 64bit games. And if you have 32bit Java you can only build and use the 32bit version of ENIGMA. But you could install both 32bit and 64bit ENIGMA in parallel and Java in parallel to be able to build for both architectures if you have a 64bit OS.
One possible alternative is to remove the requirement of JNA and compileEGMf all together replacing it entirely with the CLI allowing you to build both 32bit and 64bit applications with either a 32bit or 64bit Java installation. We could then use a MinGW that supports dual target though the exception support would be pretty grotesque, just because that's the state of current dual target MinGW compilers. Another way of accomplishing the same thing is to build compileEGMf for the supported Java architectures which would still require a dual target MinGW.
1) Do we want both a 32 bit and 64 bit ENIGMA portable, or just a very large single ENIGMA portable? If the former you would have to download both portables in order to build for both architectures.
2) Do we want to be able to build 32 bit games when we have a 64 bit Java installed to run LGM?
3) This is tied to the first question, but do you want proper gcc exception support or not? Because if we go with dual target either 64bit exception support is bad or we maintain two separate releases. If not we could include both mingw32 and mingw64 instead of a dual target mingw64, and that may or may not mean we have two separate portables.
Addressing this problem would fix several issues.
1) 64bit Java would be supported to run ENIGMA
2) 64bit compilation support would be added.
https://github.com/enigma-dev/lgmplugin/issues/20For the record Qt Framework also makes you install separately, as does Java and .NET and a lot of other programs.
https://www.qt.io/download-open-source/#section-3Note: The good news is also that JNA supports both 32bit and 64bit so there's no need to distribute two versions of it.