I manage to compile it for ARM and it seems to work fine on the Pandora ;D
Modification on LinuxEnvironmentPlugin.java was simple :
private final static String LIBNAME = "jinput-linux";
private final static String POSTFIX64BIT = "64";
private final static String POSTFIXARM = "ARM";
private static boolean supported = false;
...
static {
String osName = getPrivilegedProperty("os.name", "").trim();
if(osName.equals("Linux")) {
supported = true;
if("i386".equals(getPrivilegedProperty("os.arch"))) {
loadLibrary(LIBNAME);
}
else if("arm".equals(getPrivilegedProperty("os.arch")))
{
loadLibrary(LIBNAME + POSTFIXARM);
}
else
{
loadLibrary(LIBNAME + POSTFIX64BIT);
}
}
}
I didn’t need to do any modification on the native code. For the ant script, I don’t like what I have done. It is more an hack than an elegant solution. I have modify the build.xml for Linux native by replacing the Linux x86 compilation by the ARM compilation (since I use an x86 to compile the ARM code) :
<?xml version="1.0" ?>
- <!-- Written to assume that classpath is rooted in the current directory.
-->
- <!-- So this should be OK if you make this script in the root of a filesystem.
-->
- <!-- If not, you may prefer to adjust the basedir, or move some directories around.
-->
- <!-- The idea is that both Ant and NetBeans have to know what the package root is
-->
- <!-- for the classes in your application.
-->
- <project name="JInput Linux port, Native code" basedir="." default="compileNativeJinputLib">
<property name="libname64" value="libjinput-linux64.so" />
<property name="libname32" value="libjinput-linux.so" />
<property name="libnameARM value="libjinput-linuxARM.so" />
- <target name="createNativeDefinitions.java">
- <exec dir="." executable="gawk" os="Linux" output="../java/net/java/games/input/NativeDefinitions.java">
<arg line="-f" />
<arg line="getDefinitions" />
<arg line="/usr/include/linux/input.h" />
</exec>
</target>
- <target name="clean">
- <delete>
<fileset dir="." includes="*.o" />
<fileset dir="." includes="*.so" />
</delete>
</target>
- <target name="compileNativeJinputLib">
- <exec executable="uname" outputproperty="hwplatform">
<arg value="-m" />
</exec>
- <condition property="libname" value="${libnameARM}" else="${libnameARM}">
<equals arg1="${hwplatform}" arg2="x86_64" />
</condition>
- <apply dir="." executable="arm-none-linux-gnueabi-gcc" os="Linux" dest="." skipemptyfilesets="true" failonerror="true">
<arg line="-O2 -Wall -c -fPIC" />
<arg value="-I${java.home}/include" />
<arg value="-I${java.home}/include/linux" />
<arg value="-I${java.home}/../include" />
<arg value="-I${java.home}/../include/linux" />
<arg value="-I../../../common/src/native" />
<mapper type="glob" from="*.c" to="*.o" />
<fileset dir="." includes="*.c" />
<fileset dir="../../../common/src/native" includes="*.c" />
</apply>
- <apply dir="." parallel="true" executable="arm-none-linux-gnueabi-gcc" os="Linux" failonerror="true">
<arg line="-shared -O2 -Wall -o ${libname}" />
<fileset dir="." includes="*.o" />
</apply>
- <apply dir="." parallel="true" executable="arm-none-linux-gnueabi-strip" os="Linux" failonerror="true">
<fileset file="${libname}" />
</apply>
</target>
</project>
I will make binaries available after testing them more.