/******************************************************************************* * Copyright 2011 See AUTHORS file. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package com.badlogic.gdx.physics.bullet; import java.io.File; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.jnigen.AntScriptGenerator; import com.badlogic.gdx.jnigen.BuildConfig; import com.badlogic.gdx.jnigen.BuildExecutor; import com.badlogic.gdx.jnigen.BuildTarget; import com.badlogic.gdx.jnigen.BuildTarget.TargetOs; import com.badlogic.gdx.jnigen.NativeCodeGenerator; public class BulletBuild { public static void main (String[] args) throws Exception { // generate C/C++ code new NativeCodeGenerator().generate("src", "bin", "jni"); // Flags to accomodate SWIG generated code String cppFlags = ""; // SWIG doesn't emit strict aliasing compliant code cppFlags += " -fno-strict-aliasing"; // SWIG directors aren't clearly documented to require RTTI, but SWIG // normally generates a small number of dynamic_casts for director code. // gdx-bullet's swig build.xml replaces these with static C casts so we // can compile without RTTI and save some disk space. It seems to work // with these static casts. cppFlags += " -fno-rtti"; // Disable profiling (it's on by default). If you change this, you // must regenerate the SWIG wrappers with the changed value. cppFlags += " -DBT_NO_PROFILE"; // generate build scripts String[] excludes = {"src/bullet/BulletMultiThreaded/GpuSoftBodySolvers/**"}; String[] headers = {"src/bullet/", "src/custom/", "src/extras/Serialize/"}; BuildTarget win32home = BuildTarget.newDefaultTarget(TargetOs.Windows, false); win32home.compilerPrefix = ""; win32home.buildFileName = "build-windows32home.xml"; win32home.excludeFromMasterBuildFile = true; win32home.cExcludes = win32home.cppExcludes = excludes; win32home.headerDirs = headers; win32home.cppFlags += cppFlags; BuildTarget win32 = BuildTarget.newDefaultTarget(TargetOs.Windows, false); win32.cExcludes = win32.cppExcludes = excludes; win32.headerDirs = headers; win32.cppFlags += cppFlags; BuildTarget win64 = BuildTarget.newDefaultTarget(TargetOs.Windows, true); win64.cExcludes = win64.cppExcludes = excludes; win64.headerDirs = headers; win64.cppFlags += cppFlags; BuildTarget lin32 = BuildTarget.newDefaultTarget(TargetOs.Linux, false); lin32.cExcludes = lin32.cppExcludes = excludes; lin32.headerDirs = headers; lin32.cppFlags += cppFlags; BuildTarget lin64 = BuildTarget.newDefaultTarget(TargetOs.Linux, true); lin64.cExcludes = lin64.cppExcludes = excludes; lin64.headerDirs = headers; lin64.cppFlags += cppFlags; BuildTarget mac = BuildTarget.newDefaultTarget(TargetOs.MacOsX, false); mac.cExcludes = mac.cppExcludes = excludes; mac.headerDirs = headers; mac.cppFlags += cppFlags; BuildTarget mac64 = BuildTarget.newDefaultTarget(TargetOs.MacOsX, true); mac64.cExcludes = mac.cppExcludes = excludes; mac64.headerDirs = headers; mac64.cppFlags += cppFlags; BuildTarget android = BuildTarget.newDefaultTarget(TargetOs.Android, false); android.cExcludes = android.cppExcludes = excludes; android.headerDirs = headers; android.cppFlags += cppFlags + " -fexceptions"; BuildTarget ios = BuildTarget.newDefaultTarget(TargetOs.IOS, false); ios.cExcludes = ios.cppExcludes = excludes; ios.headerDirs = headers; ios.cppFlags += cppFlags; new AntScriptGenerator().generate(new BuildConfig("gdx-bullet"), win32home, win32, win64, lin32, lin64, mac, mac64, android, ios); new FileHandle(new File("jni/Application.mk")).writeString("\nAPP_STL := stlport_static\n", true); // build natives // BuildExecutor.executeAnt("jni/build-windows32home.xml", "-v"); // BuildExecutor.executeAnt("jni/build-linux64.xml", ""); // BuildExecutor.executeAnt("jni/build-android32.xml", ""); // BuildExecutor.executeAnt("jni/build.xml", "pack-natives"); } }