blob: 546f77773b1f311bde44e066da5cd0b0b17140ea [file] [log] [blame]
/*******************************************************************************
* 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");
}
}