Browse Source

WIP new build

Josh Engebretson 10 years ago
parent
commit
a13cc1fde7

+ 2 - 0
Build/Scripts/Build.js

@@ -0,0 +1,2 @@
+
+var host = require("./Host");

+ 46 - 0
Build/Scripts/BuildAndroid.js

@@ -0,0 +1,46 @@
+var fs = require('fs-extra');
+var bcommon = require("./BuildCommon");
+var host = require("./Host");
+
+var buildDir = bcommon.artifactsRoot + "Build/Android/";
+
+function BuildAndroidPlayer() {
+
+  var atomicTool = host.getAtomicToolBinary();
+
+  var playerBuildDir = buildDir + "AtomicPlayer/";
+
+  bcommon.cleanCreateDir(playerBuildDir);
+
+  process.chdir(playerBuildDir);
+
+  var cmds = [
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/Atomic/ ANDROID",
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/AtomicPlayer/ ANDROID"
+  ];
+
+  cmds.push("cmake -G \"Unix Makefiles\" -DCMAKE_TOOLCHAIN_FILE=" + bcommon.atomicRoot + "/CMake/Toolchains/android.toolchain.cmake -DCMAKE_BUILD_TYPE=Release ../../../../");
+  cmds.push("make -j4");
+
+  jake.exec(cmds, function() {
+
+    var androidPlayerBinary = playerBuildDir + "Source/AtomicPlayer/Application/libAtomicPlayer.so";
+    fs.copySync(androidPlayerBinary, buildDir + "Bin/libAtomicPlayer.so");
+    console.log("Built Android Player");
+    complete();
+
+  }, {
+    printStdout: true
+  });
+
+}
+
+namespace('build', function() {
+
+  task('android_player', {
+    async: true
+  }, function() {
+    BuildAndroidPlayer();
+  })
+
+}); // end of build namespace

+ 59 - 0
Build/Scripts/BuildCommon.js

@@ -0,0 +1,59 @@
+var os = require('os');
+var path = require('path');
+
+// get the root folder
+var atomicRoot = path.resolve(__dirname, "../..") + "/";
+
+// patch in our local node_modules
+process.env.NODE_PATH = atomicRoot + "Build/node_modules/";
+require('module').Module._initPaths();
+var fs = require('fs-extra');
+
+var artifactsRoot = atomicRoot + "/Artifacts/";
+var jenkinsBuild = process.env.ATOMIC_JENKINS_BUILD == 1;
+var buildSHA = process.env.ATOMIC_BUILD_SHA;
+
+function cleanCreateDir(directory) {
+
+  testRemoveDir(directory);
+  testCreateDir(directory);
+
+}
+
+function testCreateDir(directory) {
+
+  if (fs.existsSync(directory)) {
+    fail("Path already exists: " + directory);
+  }
+
+  jake.mkdirP(directory);
+
+  if (!fs.existsSync(directory)) {
+    fail("Unable to create path: " + directory);
+  }
+}
+
+
+function testRemoveDir(path) {
+
+  if (fs.existsSync(path)) {
+    jake.rmRf(path);
+  }
+
+  if (fs.existsSync(path)) {
+    fail("Unable to remove path: " + path);
+  }
+}
+
+function cloneRepo(repoUrl, destPath) {
+
+}
+
+exports.jenkinsBuild = jenkinsBuild;
+exports.buildSHA = buildSHA;
+exports.atomicRoot = atomicRoot;
+exports.artifactsRoot = artifactsRoot;
+exports.testRemoveDir = testRemoveDir;
+exports.testCreateDir = testCreateDir;
+exports.cloneRepo = cloneRepo;
+exports.cleanCreateDir = cleanCreateDir;

+ 52 - 0
Build/Scripts/BuildIOS.js

@@ -0,0 +1,52 @@
+var fs = require('fs-extra');
+var bcommon = require("./BuildCommon");
+var host = require("./Host");
+
+var buildDir = bcommon.artifactsRoot + "Build/IOS/";
+
+function BuildIOSPlayer() {
+
+  var atomicTool = host.getAtomicToolBinary();
+
+  var playerBuildDir = buildDir + "AtomicPlayer/";
+
+  bcommon.cleanCreateDir(playerBuildDir);
+
+  process.chdir(playerBuildDir);
+
+  var cmds = [
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/Atomic/ IOS",
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/AtomicPlayer/ IOS",
+    "cmake -DIOS=1 -G Xcode ../../../../"
+  ];
+
+  if (false) {
+
+    cmds.push("security -v list-keychains -d system -s /Users/jenkins/Library/Keychains/codesign.keychain");
+    cmds.push("security -v unlock-keychain /Users/jenkins/Library/Keychains/codesign.keychain");
+
+  }
+
+  cmds.push("xcodebuild -configuration Release");
+
+  jake.exec(cmds, function() {    
+    var iosPlayerBinary = playerBuildDir + "Source/AtomicPlayer/Application/Release-iphoneos/AtomicPlayer.app/AtomicPlayer";
+    fs.copySync(iosPlayerBinary, buildDir + "Bin/AtomicPlayer");
+    console.log("Built IOS Player");
+    complete();
+
+  }, {
+    printStdout: true
+  });
+
+}
+
+namespace('build', function() {
+
+  task('ios_player', {
+    async: true
+  }, function() {
+    BuildIOSPlayer();
+  })
+
+}); // end of build namespace

+ 0 - 0
Build/Scripts/BuildLinux.js


+ 83 - 0
Build/Scripts/BuildMac.js

@@ -0,0 +1,83 @@
+var fs = require('fs-extra');
+var bcommon = require("./BuildCommon");
+var host = require("./Host");
+
+var buildDir = bcommon.artifactsRoot + "Build/Mac/";
+
+function BuildMacPlayer() {
+
+  var atomicTool = host.getAtomicToolBinary();
+
+  var playerBuildDir = buildDir + "AtomicPlayer/";
+
+  bcommon.cleanCreateDir(playerBuildDir);
+
+  process.chdir(playerBuildDir);
+
+  var cmds = [
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/Atomic/ MACOSX",
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/AtomicPlayer/ MACOSX",
+    "cmake -DATOMICTOOL_NOGEN=1 -G Xcode ../../../../",
+    "xcodebuild -target AtomicPlayer -configuration Release"
+  ];
+
+  jake.exec(cmds, function() {
+    var macPlayerBinary = playerBuildDir + "Source/AtomicPlayer/Application/Release/AtomicPlayer.app/Contents/MacOS/AtomicPlayer";
+    fs.copySync(macPlayerBinary, buildDir + "Bin/AtomicPlayer");
+    console.log("Built Mac Player");
+    complete();
+
+  }, {
+    printStdout: true
+  });
+
+}
+
+function BuildMacEditor() {
+
+  var atomicTool = host.getAtomicToolBinary();
+
+  var editorBuildDir = buildDir + "AtomicEditor/";
+
+  bcommon.cleanCreateDir(editorBuildDir);
+
+  process.chdir(editorBuildDir);
+
+  var cmds = [
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/Atomic/ MACOSX",
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/AtomicPlayer/ MACOSX",
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/ToolCore/ MACOSX",
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/Editor/ MACOSX",
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/AtomicNET/ MACOSX",
+    "cmake -DATOMICTOOL_NOGEN=1 -G Xcode ../../../../",
+    "xcodebuild -target AtomicEditor -configuration Release"
+  ];
+
+  jake.exec(cmds, function() {
+    var macEditorBinary = editorBuildDir + "Source/AtomicEditor/Release/AtomicEditor.app/Contents/MacOS/AtomicEditor";
+    fs.copySync(macEditorBinary, buildDir + "Bin/AtomicEditor");
+    console.log("Built Mac Editor");
+    complete();
+
+  }, {
+    printStdout: true
+  });
+
+}
+
+namespace('build', function() {
+
+  task('mac_player', {
+    async: true
+  }, function() {
+    BuildMacPlayer();
+  });
+
+  task('mac_editor', {
+    async: true
+  }, function() {
+    BuildMacEditor();
+  });
+
+
+}); // end of build namespace

+ 54 - 0
Build/Scripts/BuildWeb.js

@@ -0,0 +1,54 @@
+var fs = require('fs-extra');
+var bcommon = require("./BuildCommon");
+var host = require("./Host");
+
+var buildDir = bcommon.artifactsRoot + "Build/Web/";
+
+function BuildWebPlayer() {
+
+  var atomicTool = host.getAtomicToolBinary();
+
+  var playerBuildDir = buildDir + "AtomicPlayer/";
+
+  bcommon.cleanCreateDir(playerBuildDir);
+
+  process.chdir(playerBuildDir);
+
+  var cmds = [
+
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/Atomic/ WEB",
+    atomicTool + " bind " + bcommon.atomicRoot + " Script/Packages/AtomicPlayer/ WEB",
+    "cmake -DEMSCRIPTEN=1 -DATOMIC_BUILD_2D=1 -DCMAKE_TOOLCHAIN_FILE=" + bcommon.atomicRoot + "/CMake/Toolchains/emscripten.toolchain.cmake -DCMAKE_BUILD_TYPE=Release ../../../../",
+    "make -j4",
+    "cd ./Source/AtomicPlayer/Application && mv ./AtomicPlayer ./AtomicPlayer.bc && " +
+    // -s ERROR_ON_UNDEFINED_SYMBOLS=1 (disabled for pthread errors currently on incoming)
+    "emcc -O3 -s USE_PTHREADS=0 -s ASM_JS=1 -s VERBOSE=0 -s USE_SDL=2 -s TOTAL_MEMORY=134217728 -s AGGRESSIVE_VARIABLE_ELIMINATION=1 -s NO_EXIT_RUNTIME=1 ./AtomicPlayer.bc -o  ./AtomicPlayer.html"
+
+  ]
+
+  jake.exec(cmds, function() {
+
+    var webPlayerBinary = playerBuildDir + "Source/AtomicPlayer/Application/AtomicPlayer.js";
+    var webPlayerMemFile = playerBuildDir + "Source/AtomicPlayer/Application/AtomicPlayer.html.mem";
+
+    fs.copySync(webPlayerBinary, buildDir + "Bin/AtomicPlayer.js");
+    fs.copySync(webPlayerMemFile, buildDir + "Bin/AtomicPlayer.html.mem");
+
+    console.log("Built Web Player");
+
+    complete();
+  }, {
+    printStdout: true
+  });
+
+}
+
+namespace('build', function() {
+
+  task('web_player', {
+    async: true
+  }, function() {
+    BuildWebPlayer();
+  })
+
+}); // end of build namespace

+ 0 - 0
Build/Scripts/BuildWindows.js


+ 9 - 0
Build/Scripts/Host.js

@@ -0,0 +1,9 @@
+var os = require('os');
+
+if (os.platform() == "darwin") {
+  module.exports = require("./HostMac");
+  require("./BuildMac");
+  require("./BuildIOS");
+  require("./BuildWeb");
+  require("./BuildAndroid");
+}

+ 54 - 0
Build/Scripts/HostMac.js

@@ -0,0 +1,54 @@
+var fs = require('fs-extra');
+var bcommon = require("./BuildCommon");
+
+var buildDir = bcommon.artifactsRoot + "Build/Mac/";
+var atomicToolBinary = buildDir + "Bin/AtomicTool";
+
+function clean() {
+
+  bcommon.testRemoveDir(buildDir);
+
+}
+
+// Gets the path to the AtomicTool, possibly building it if it doesn't exist
+function getAtomicToolBinary() {
+
+  try {
+    fs.statSync(atomicToolBinary);
+    return atomicToolBinary;
+  } catch (err) {
+    buildAtomicTool();
+    return atomicToolBinary;
+  }
+
+}
+
+function buildAtomicTool() {
+
+  var toolBuildDir = buildDir + "AtomicTool/";
+
+  bcommon.cleanCreateDir(toolBuildDir);
+
+  process.chdir(toolBuildDir);
+
+  var cmds = [
+    'cmake ../../../../ -DATOMICTOOL_NOGEN=1 -G Xcode',
+    'xcodebuild -target AtomicTool -configuration Release'
+  ]
+
+  jake.exec(cmds, function() {
+
+    var srcToolBinary = toolBuildDir + "Source/AtomicTool/Release/AtomicTool"
+
+    fs.copySync(srcToolBinary, atomicToolBinary);
+    console.log("Built MacOSX AtomicTool");
+    complete();
+  }, {
+    printStdout: true
+  });
+
+}
+
+exports.clean = clean;
+exports.buildAtomicTool = buildAtomicTool;
+exports.getAtomicToolBinary = getAtomicToolBinary;

+ 4 - 0
Source/AtomicTool/CMakeLists.txt

@@ -24,6 +24,8 @@ else()
 endif()
 
 
+if (NOT ATOMICTOOL_NOGEN)
+
 add_custom_command(TARGET AtomicTool POST_BUILD
                    COMMAND $<TARGET_FILE:AtomicTool> bind "\"${CMAKE_SOURCE_DIR}\"" "Script/Packages/Atomic/" "${JAVASCRIPT_BINDINGS_PLATFORM}"
                    COMMAND $<TARGET_FILE:AtomicTool> bind "\"${CMAKE_SOURCE_DIR}\"" "Script/Packages/AtomicPlayer/" "${JAVASCRIPT_BINDINGS_PLATFORM}"
@@ -32,6 +34,8 @@ add_custom_command(TARGET AtomicTool POST_BUILD
                    COMMAND $<TARGET_FILE:AtomicTool> bind "\"${CMAKE_SOURCE_DIR}\"" "Script/Packages/AtomicNET/" "${JAVASCRIPT_BINDINGS_PLATFORM}"
                    COMMENT "Generating Script Bindings")
 
+endif(ATOMICTOOL_NOGEN)                   
+
 
 if (ATOMIC_DOTNET_DEV)