• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2  * Copyright 2011 See AUTHORS file.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  ******************************************************************************/
16 
17 package com.badlogic.gdx.physics.bullet;
18 
19 import java.io.File;
20 
21 import com.badlogic.gdx.files.FileHandle;
22 import com.badlogic.gdx.jnigen.AntScriptGenerator;
23 import com.badlogic.gdx.jnigen.BuildConfig;
24 import com.badlogic.gdx.jnigen.BuildExecutor;
25 import com.badlogic.gdx.jnigen.BuildTarget;
26 import com.badlogic.gdx.jnigen.BuildTarget.TargetOs;
27 import com.badlogic.gdx.jnigen.NativeCodeGenerator;
28 
29 public class BulletBuild {
main(String[] args)30 	public static void main (String[] args) throws Exception {
31 		// generate C/C++ code
32 		new NativeCodeGenerator().generate("src", "bin", "jni");
33 
34 		// Flags to accomodate SWIG generated code
35 		String cppFlags = "";
36 
37 		// SWIG doesn't emit strict aliasing compliant code
38 		cppFlags += " -fno-strict-aliasing";
39 		// SWIG directors aren't clearly documented to require RTTI, but SWIG
40 		// normally generates a small number of dynamic_casts for director code.
41 		// gdx-bullet's swig build.xml replaces these with static C casts so we
42 		// can compile without RTTI and save some disk space. It seems to work
43 		// with these static casts.
44 		cppFlags += " -fno-rtti";
45 		// Disable profiling (it's on by default). If you change this, you
46 		// must regenerate the SWIG wrappers with the changed value.
47 		cppFlags += " -DBT_NO_PROFILE";
48 
49 		// generate build scripts
50 		String[] excludes = {"src/bullet/BulletMultiThreaded/GpuSoftBodySolvers/**"};
51 		String[] headers = {"src/bullet/", "src/custom/", "src/extras/Serialize/"};
52 
53 		BuildTarget win32home = BuildTarget.newDefaultTarget(TargetOs.Windows, false);
54 		win32home.compilerPrefix = "";
55 		win32home.buildFileName = "build-windows32home.xml";
56 		win32home.excludeFromMasterBuildFile = true;
57 		win32home.cExcludes = win32home.cppExcludes = excludes;
58 		win32home.headerDirs = headers;
59 		win32home.cppFlags += cppFlags;
60 
61 		BuildTarget win32 = BuildTarget.newDefaultTarget(TargetOs.Windows, false);
62 		win32.cExcludes = win32.cppExcludes = excludes;
63 		win32.headerDirs = headers;
64 		win32.cppFlags += cppFlags;
65 
66 		BuildTarget win64 = BuildTarget.newDefaultTarget(TargetOs.Windows, true);
67 		win64.cExcludes = win64.cppExcludes = excludes;
68 		win64.headerDirs = headers;
69 		win64.cppFlags += cppFlags;
70 
71 		BuildTarget lin32 = BuildTarget.newDefaultTarget(TargetOs.Linux, false);
72 		lin32.cExcludes = lin32.cppExcludes = excludes;
73 		lin32.headerDirs = headers;
74 		lin32.cppFlags += cppFlags;
75 
76 		BuildTarget lin64 = BuildTarget.newDefaultTarget(TargetOs.Linux, true);
77 		lin64.cExcludes = lin64.cppExcludes = excludes;
78 		lin64.headerDirs = headers;
79 		lin64.cppFlags += cppFlags;
80 
81 		BuildTarget mac = BuildTarget.newDefaultTarget(TargetOs.MacOsX, false);
82 		mac.cExcludes = mac.cppExcludes = excludes;
83 		mac.headerDirs = headers;
84 		mac.cppFlags += cppFlags;
85 
86 		BuildTarget mac64 = BuildTarget.newDefaultTarget(TargetOs.MacOsX, true);
87 		mac64.cExcludes = mac.cppExcludes = excludes;
88 		mac64.headerDirs = headers;
89 		mac64.cppFlags += cppFlags;
90 
91 		BuildTarget android = BuildTarget.newDefaultTarget(TargetOs.Android, false);
92 		android.cExcludes = android.cppExcludes = excludes;
93 		android.headerDirs = headers;
94 		android.cppFlags += cppFlags + " -fexceptions";
95 
96 		BuildTarget ios = BuildTarget.newDefaultTarget(TargetOs.IOS, false);
97 		ios.cExcludes = ios.cppExcludes = excludes;
98 		ios.headerDirs = headers;
99 		ios.cppFlags += cppFlags;
100 
101 		new AntScriptGenerator().generate(new BuildConfig("gdx-bullet"), win32home, win32, win64, lin32, lin64, mac, mac64, android, ios);
102 		new FileHandle(new File("jni/Application.mk")).writeString("\nAPP_STL := stlport_static\n", true);
103 
104 		// build natives
105 		// BuildExecutor.executeAnt("jni/build-windows32home.xml", "-v");
106 //		BuildExecutor.executeAnt("jni/build-linux64.xml", "");
107 //		BuildExecutor.executeAnt("jni/build-android32.xml", "");
108 //		BuildExecutor.executeAnt("jni/build.xml", "pack-natives");
109 	}
110 }
111