Browse Source

iOS: Added a way to simplify the depedency-download in order to build avian and also patch the jvm to work around build errors. i386 is commented out since it doesn't compile on Xcode 6 and is only used for the iOS Simulator on which you could also use x86_64.

MeFisto94 9 years ago
parent
commit
a7d0563956
4 changed files with 155 additions and 79 deletions
  1. 1 0
      .gitignore
  2. 11 0
      jme3-ios/GetClassLoader.patch
  3. 107 79
      jme3-ios/build.xml
  4. 36 0
      jme3-ios/build_avian.sh

+ 1 - 0
.gitignore

@@ -5,6 +5,7 @@ io_export_ogreDotScene.py
 jme3-project-libraries/release/libs
 jme3-project-testdata/release/libs
 jme3-tests-template/src/com/jme3/gde/templates/tests
+jme3-ios/downloads
 JME3TestsTemplate/src/jme3test
 JME3TestsTemplateAndroid/src/jme3test
 platform-private.properties

+ 11 - 0
jme3-ios/GetClassLoader.patch

@@ -0,0 +1,11 @@
+--- downloads/jdk7u/jdk/src/share/javavm/export/jvm.h	2016-08-21 11:55:38.000000000 +0200
++++ downloads/jdk7u/jdk/src/share/javavm/export/jvm.h	2016-08-21 11:55:43.000000000 +0200
+@@ -437,6 +437,8 @@
+ JNIEXPORT jobjectArray JNICALL
+ JVM_GetClassInterfaces(JNIEnv *env, jclass cls);
+ 
++JNIEXPORT jobject JNICALL
++JVM_GetClassLoader(JNIEnv *env, jclass cls);
+
+ JNIEXPORT jboolean JNICALL
+ JVM_IsInterface(JNIEnv *env, jclass cls);

+ 107 - 79
jme3-ios/build.xml

@@ -16,14 +16,21 @@
     
     <target name="sources.error" unless="sources.available">
 <echo>Check needed folders:
-JDK binaries: ${avian.jdk.path.exists}
-JDK sources: ${avian.jdk.src.path.exists}
+ JDK binaries: ${avian.jdk.path.exists}
+  JDK sources: ${avian.jdk.src.path.exists}
 Avian sources: ${avian.src.path.exists}
-Avian Hello iOS sources: ${hello-ios.src.path.exists}</echo>
+7zip LZMA SDK: ${avian.lzma.sdk.path.exists}</echo>
         <fail>Avian or JDK sources not found! Please configure the avian and JDK source locations in the properties file!</fail>
     </target>
 
     <target name="sources.check">
+        <dirname property="dir.current" file="${ant.file}"/>
+        <property name="avian.jdk.path" value="${dir.current}/downloads/openjdk-1.7.0-u80-unoffficial-macosx-x86_64-image"/>
+        <property name="avian.jdk.src.path" value="${dir.current}/downloads/jdk7u/jdk/src"/>
+        <property name="avian.src.path" value="${dir.current}/downloads/avian"/>
+        <property name="avian.lzma.sdk.path" value="${dir.current}/downloads/lzma920"/>
+        <property name="avian.build.options" value="lzma-bootimage-openjdk-src"/>
+        
         <condition property="avian.jdk.path.exists" else="false">
             <available file="${avian.jdk.path}" type="dir"/>
         </condition>
@@ -33,15 +40,15 @@ Avian Hello iOS sources: ${hello-ios.src.path.exists}</echo>
         <condition property="avian.src.path.exists" else="false">
             <available file="${avian.src.path}" type="dir"/>
         </condition>
-        <condition property="hello-ios.src.path.exists" else="false">
-            <available file="${hello-ios.src.path}" type="dir"/>
+        <condition property="avian.lzma.sdk.path.exists" else="false">
+            <available file="${avian.lzma.sdk.path}" type="dir"/>
         </condition>
         <condition property="sources.available">
             <and>
                 <isTrue value="${avian.jdk.path.exists}"/>
                 <isTrue value="${avian.jdk.src.path.exists}"/>
                 <isTrue value="${avian.src.path.exists}"/>
-                <isTrue value="${hello-ios.src.path.exists}"/>
+                <isTrue value="${avian.lzma.sdk.path.exists}"/>
             </and>
         </condition>
     </target>
@@ -57,22 +64,75 @@ to   XCode.app/Contents/Developer/usr/bin
         </exec>
         <exec executable="make" dir="${avian.src.path}" failonerror="true">
             <env key="JAVA_HOME" value="${avian.jdk.path}"/>
+            <env key="JDK_SRC" value="${avian.jdk.src.path}"/>
             <arg line="arch=arm"/>
             <arg line="platform=ios"/>
             <arg line="process=compile"/>
             <arg line="openjdk='${avian.jdk.path}'"/>
             <arg line="openjdk-src='${avian.jdk.src.path}'"/>
+            <arg line="lzma='${avian.lzma.sdk.path}'"/>
             <arg line="bootimage=true"/>
-            <arg line="build/ios-arm-bootimage-openjdk-src/bootimage-generator"/>
-            <arg line="build/ios-arm-bootimage-openjdk-src/binaryToObject/binaryToObject"/>
-            <arg line="build/ios-arm-bootimage-openjdk-src/classpath.jar"/>
-            <arg line="build/ios-arm-bootimage-openjdk-src/libavian.a"/>
+            <arg line="build/ios-arm-${avian.build.options}/bootimage-generator"/>
+            <arg line="build/ios-arm-${avian.build.options}/binaryToObject/binaryToObject"/>
+            <arg line="build/ios-arm-${avian.build.options}/classpath.jar"/>
+            <arg line="build/ios-arm-${avian.build.options}/libavian.a"/>
         </exec>
         <delete file="src/com/jme3/gde/ios/avian-openjdk-mac.zip" failonerror="false"/>
         <zip destfile="src/com/jme3/gde/ios/avian-openjdk-mac.zip">
-            <zipfileset file="${avian.src.path}/build/ios-arm-bootimage-openjdk-src/bootimage-generator" filemode="755" fullpath="avian-arm/bootimage-generator"/>
-            <zipfileset file="${avian.src.path}/build/ios-arm-bootimage-openjdk-src/binaryToObject/binaryToObject" filemode="755" fullpath="avian-arm/binaryToObject"/>
-            <zipfileset file="${avian.src.path}/build/ios-arm-bootimage-openjdk-src/libavian.a" fullpath="avian-arm/libavian.a"/>
+            <zipfileset file="${avian.src.path}/build/ios-arm-${avian.build.options}/bootimage-generator" filemode="755" fullpath="avian-arm/bootimage-generator"/>
+            <zipfileset file="${avian.src.path}/build/ios-arm-${avian.build.options}/binaryToObject/binaryToObject" filemode="755" fullpath="avian-arm/binaryToObject"/>
+            <zipfileset file="${avian.src.path}/build/ios-arm-${avian.build.options}/libavian.a" fullpath="avian-arm/libavian.a"/>
+        </zip>
+        <zip destfile="src/com/jme3/gde/ios/avian-openjdk-mac.zip" update="true">
+            <zipfileset dir="${avian.src.path}/build/ios-arm-${avian.build.options}/classpath" prefix="classpath/">
+                <exclude name="**/java/awt/**"/>
+                <exclude name="**/apple/**"/>
+                <exclude name="**/javax/swing/**"/>
+                <exclude name="**/javax/sound/**"/>
+                <exclude name="**/javax/smartcardio/**"/>
+                <exclude name="**/sun/applet/**"/>
+                <exclude name="**/sun/audio/**"/>
+                <exclude name="**/sun/awt/**"/>
+                <exclude name="**/sun/corba/**"/>
+                <exclude name="**/sun/font/**"/>
+                <!--exclude name="**/sun/java2d/**"/-->
+                <exclude name="**/sun/lwawt/**"/>
+                <exclude name="**/sun/print/**"/>
+                <exclude name="**/sun/swing/**"/>
+                <exclude name="**/com/oracle/**"/>
+                
+                <!--crypto,demo,rmi,servicetag,tracing-->
+                <!--exclude name="**/com/sun/**"/>
+                 <exclude name="**/com/sun/accessibility/**"/>
+                 <exclude name="**/com/sun/activation/**"/-->
+                
+                <exclude name="**/com/sun/awt/**"/>
+                
+                <!--exclude name="**/com/sun/beans/**"/>
+                 <exclude name="**/com/sun/codemodel/**"/>
+                 <exclude name="**/com/sun/corba/**"/>
+                 <exclude name="**/com/sun/imageio/**"/>
+                 <exclude name="**/com/sun/istack/**"/>
+                 <exclude name="**/com/sun/jarsigner/**"/>
+                 <exclude name="**/com/sun/java/**"/>
+                 <exclude name="**/com/sun/java_cup/**"/>
+                 <exclude name="**/com/sun/javadoc/**"/>
+                 <exclude name="**/com/sun/jmx/**"/>
+                 <exclude name="**/com/sun/jndi/**"/>
+                 <exclude name="**/com/sun/management/**"/>
+                 <exclude name="**/com/sun/media/**"/>
+                 <exclude name="**/com/sun/mirror/**"/>
+                 <exclude name="**/com/sun/naming/**"/>
+                 <exclude name="**/com/sun/net/**"/>
+                 <exclude name="**/com/sun/nio/**"/>
+                 <exclude name="**/com/sun/org/**"/>
+                 <exclude name="**/com/sun/rowset/**"/>
+                 <exclude name="**/com/sun/security/**"/>
+                 <exclude name="**/com/sun/source/**"/>
+                 <exclude name="**/com/sun/swing/**"/>
+                 <exclude name="**/com/sun/tools/**"/>
+                 <exclude name="**/com/sun/xml/**"/-->
+            </zipfileset>
         </zip>
         <exec executable="make" dir="${avian.src.path}">
             <env key="JAVA_HOME" value="${avian.jdk.path}"/>
@@ -85,17 +145,18 @@ to   XCode.app/Contents/Developer/usr/bin
             <arg line="process=compile"/>
             <arg line="openjdk='${avian.jdk.path}'"/>
             <arg line="openjdk-src='${avian.jdk.src.path}'"/>
+            <arg line="lzma='${avian.lzma.sdk.path}'"/>
             <arg line="bootimage=true"/>
             <!--arg line="mode=debug"/-->
-            <arg line="build/ios-arm64-bootimage-openjdk-src/bootimage-generator"/>
-            <arg line="build/ios-arm64-bootimage-openjdk-src/binaryToObject/binaryToObject"/>
-            <arg line="build/ios-arm64-bootimage-openjdk-src/classpath.jar"/>
-            <arg line="build/ios-arm64-bootimage-openjdk-src/libavian.a"/>
+            <arg line="build/ios-arm64-${avian.build.options}/bootimage-generator"/>
+            <arg line="build/ios-arm64-${avian.build.options}/binaryToObject/binaryToObject"/>
+            <arg line="build/ios-arm64-${avian.build.options}/classpath.jar"/>
+            <arg line="build/ios-arm64-${avian.build.options}/libavian.a"/>
         </exec>
         <zip destfile="src/com/jme3/gde/ios/avian-openjdk-mac.zip" update="true">
-            <zipfileset file="${avian.src.path}/build/ios-arm64-bootimage-openjdk-src/bootimage-generator" filemode="755" fullpath="avian-arm64/bootimage-generator"/>
-            <zipfileset file="${avian.src.path}/build/ios-arm64-bootimage-openjdk-src/binaryToObject/binaryToObject" filemode="755" fullpath="avian-arm64/binaryToObject"/>
-            <zipfileset file="${avian.src.path}/build/ios-arm64-bootimage-openjdk-src/libavian.a" fullpath="avian-arm64/libavian.a"/>
+            <zipfileset file="${avian.src.path}/build/ios-arm64-${avian.build.options}/bootimage-generator" filemode="755" fullpath="avian-arm64/bootimage-generator"/>
+            <zipfileset file="${avian.src.path}/build/ios-arm64-${avian.build.options}/binaryToObject/binaryToObject" filemode="755" fullpath="avian-arm64/binaryToObject"/>
+            <zipfileset file="${avian.src.path}/build/ios-arm64-${avian.build.options}/libavian.a" fullpath="avian-arm64/libavian.a"/>
             <zipfileset file="${avian.src.path}/vm.pro" fullpath="vm.pro"/>
             <zipfileset file="${avian.src.path}/openjdk.pro" fullpath="openjdk.pro"/>
         </zip>
@@ -104,75 +165,42 @@ to   XCode.app/Contents/Developer/usr/bin
             <arg line="clean"/>
         </exec>
         <exec executable="make" dir="${avian.src.path}" failonerror="true">
+            <env key="JAVA_HOME" value="${avian.jdk.path}"/>
+            <arg line="arch=x86_64"/>
+            <arg line="platform=ios"/>
+            <arg line="process=compile"/>
+            <arg line="openjdk='${avian.jdk.path}'"/>
+            <arg line="openjdk-src='${avian.jdk.src.path}'"/>
+            <arg line="lzma='${avian.lzma.sdk.path}'"/>
+            <arg line="bootimage=true"/>
+            <arg line="sim=true"/>
+            <arg line="build/ios-x86_64-${avian.build.options}/bootimage-generator"/>
+            <arg line="build/ios-x86_64-${avian.build.options}/binaryToObject/binaryToObject"/>
+            <arg line="build/ios-x86_64-${avian.build.options}/classpath.jar"/>
+            <arg line="build/ios-x86_64-${avian.build.options}/libavian.a"/>
+        </exec>
+        <!--<exec executable="make" dir="${avian.src.path}" failonerror="true">
             <env key="JAVA_HOME" value="${avian.jdk.path}"/>
             <arg line="arch=i386"/>
             <arg line="platform=ios"/>
             <arg line="process=compile"/>
             <arg line="openjdk='${avian.jdk.path}'"/>
             <arg line="openjdk-src='${avian.jdk.src.path}'"/>
+            <arg line="lzma='${avian.lzma.sdk.path}'"/>
             <arg line="bootimage=true"/>
-            <arg line="build/ios-i386-bootimage-openjdk-src/bootimage-generator"/>
-            <arg line="build/ios-i386-bootimage-openjdk-src/binaryToObject/binaryToObject"/>
-            <arg line="build/ios-i386-bootimage-openjdk-src/classpath.jar"/>
-            <arg line="build/ios-i386-bootimage-openjdk-src/libavian.a"/>
+            <arg line="sim=true"/>
+            <arg line="build/ios-i386-${avian.build.options}/bootimage-generator"/>
+            <arg line="build/ios-i386-${avian.build.options}/binaryToObject/binaryToObject"/>
+            <arg line="build/ios-i386-${avian.build.options}/classpath.jar"/>
+            <arg line="build/ios-i386-${avian.build.options}/libavian.a"/>
         </exec>
         <zip destfile="src/com/jme3/gde/ios/avian-openjdk-mac.zip" update="true">
-            <zipfileset file="${avian.src.path}/build/ios-i386-bootimage-openjdk-src/bootimage-generator" filemode="755" fullpath="avian-i386/bootimage-generator"/>
-            <zipfileset file="${avian.src.path}/build/ios-i386-bootimage-openjdk-src/binaryToObject/binaryToObject" filemode="755" fullpath="avian-i386/binaryToObject"/>
-            <zipfileset file="${avian.src.path}/build/ios-i386-bootimage-openjdk-src/libavian.a" fullpath="avian-i386/libavian.a"/>
+            <zipfileset file="${avian.src.path}/build/ios-i386-${avian.build.options}/bootimage-generator" filemode="755" fullpath="avian-i386/bootimage-generator"/>
+            <zipfileset file="${avian.src.path}/build/ios-i386-${avian.build.options}/binaryToObject/binaryToObject" filemode="755" fullpath="avian-i386/binaryToObject"/>
+            <zipfileset file="${avian.src.path}/build/ios-i386-${avian.build.options}/libavian.a" fullpath="avian-i386/libavian.a"/>
             <zipfileset file="${avian.src.path}/vm.pro" fullpath="vm.pro"/>
             <zipfileset file="${avian.src.path}/openjdk.pro" fullpath="openjdk.pro"/>
-        </zip>
-        <zip destfile="src/com/jme3/gde/ios/avian-openjdk-mac.zip" update="true">
-            <zipfileset dir="${avian.src.path}/build/ios-i386-bootimage-openjdk-src/classpath" prefix="classpath/">
-                <exclude name="**/java/awt/**"/>
-                <exclude name="**/apple/**"/>
-                <exclude name="**/javax/swing/**"/>
-                <exclude name="**/javax/sound/**"/>
-                <exclude name="**/javax/smartcardio/**"/>
-                <exclude name="**/sun/applet/**"/>
-                <exclude name="**/sun/audio/**"/>
-                <exclude name="**/sun/awt/**"/>
-                <exclude name="**/sun/corba/**"/>
-                <exclude name="**/sun/font/**"/>
-                <!--exclude name="**/sun/java2d/**"/-->
-                <exclude name="**/sun/lwawt/**"/>
-                <exclude name="**/sun/print/**"/>
-                <exclude name="**/sun/swing/**"/>
-                <exclude name="**/com/oracle/**"/>
-                
-                <!--crypto,demo,rmi,servicetag,tracing-->
-                <!--exclude name="**/com/sun/**"/>
-                <exclude name="**/com/sun/accessibility/**"/>
-                <exclude name="**/com/sun/activation/**"/-->
-                
-                <exclude name="**/com/sun/awt/**"/>
-                
-                <!--exclude name="**/com/sun/beans/**"/>
-                <exclude name="**/com/sun/codemodel/**"/>
-                <exclude name="**/com/sun/corba/**"/>
-                <exclude name="**/com/sun/imageio/**"/>
-                <exclude name="**/com/sun/istack/**"/>
-                <exclude name="**/com/sun/jarsigner/**"/>
-                <exclude name="**/com/sun/java/**"/>
-                <exclude name="**/com/sun/java_cup/**"/>
-                <exclude name="**/com/sun/javadoc/**"/>
-                <exclude name="**/com/sun/jmx/**"/>
-                <exclude name="**/com/sun/jndi/**"/>
-                <exclude name="**/com/sun/management/**"/>
-                <exclude name="**/com/sun/media/**"/>
-                <exclude name="**/com/sun/mirror/**"/>
-                <exclude name="**/com/sun/naming/**"/>
-                <exclude name="**/com/sun/net/**"/>
-                <exclude name="**/com/sun/nio/**"/>
-                <exclude name="**/com/sun/org/**"/>
-                <exclude name="**/com/sun/rowset/**"/>
-                <exclude name="**/com/sun/security/**"/>
-                <exclude name="**/com/sun/source/**"/>
-                <exclude name="**/com/sun/swing/**"/>
-                <exclude name="**/com/sun/tools/**"/>
-                <exclude name="**/com/sun/xml/**"/-->
-            </zipfileset>
-        </zip>
+        </zip>-->
+        
     </target>
 </project>

+ 36 - 0
jme3-ios/build_avian.sh

@@ -0,0 +1,36 @@
+if [ ! -d downloads ]; then
+    mkdir downloads
+fi
+
+cd downloads
+
+openjdk="openjdk-1.7.0-u80-unofficial-macosx-x86_64-image"
+
+if [ ! -d "$openjdk" ]; then
+    curl -Of https://bitbucket.org/alexkasko/openjdk-unofficial-builds/downloads/$openjdk.zip
+    unzip $openjdk.zip
+fi
+
+if [ ! -d "jdk7u" ]; then
+    hg clone http://hg.openjdk.java.net/jdk7u/jdk7u/
+fi
+
+cd jdk7u
+bash get_source.sh
+cd jdk
+hg checkout jdk7u80-b32
+cd ../../
+
+patch -N downloads/jdk7u/jdk/src/share/javavm/export/jvm.h < GetClassLoader.patch
+
+if [ ! -d "avian" ]; then
+    git clone https://github.com/readytalk/avian.git
+fi
+
+if [ ! -d "lzma-920" ]; then
+    curl -Of http://readytalk.github.io/avian-web/lzma920.tar.bz2
+    (mkdir -p lzma-920 && cd lzma-920 && tar xjf ../lzma920.tar.bz2)
+fi
+
+cd ../
+ant package-avian