Browse Source

Adding/updating --with-web for Build_AtomicEditor

Josh Engebretson 9 years ago
parent
commit
e57ccac43b

+ 0 - 2
Build/CMake/Modules/AtomicWeb.cmake

@@ -20,6 +20,4 @@ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MEMORY_LINKER_FLAGS} -s
 set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -O3 -s AGGRESSIVE_VARIABLE_ELIMINATION=1")     # Remove variables to make the -O3 regalloc easier
 set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -g4")     # Preserve LLVM debug information, show line number debug comments, and generate source maps
 
-
-
 set (ATOMIC_LINK_LIBRARIES ${ATOMIC_LINK_LIBRARIES})

+ 9 - 0
Build/Scripts/Bootstrap.js

@@ -26,6 +26,7 @@ function printHelp() {
     console.log("--help          : This help text");
     console.log("--with-android  : Build with Android platform support");
     console.log("--with-ios      : Build with iOS platform support");
+    console.log("--with-web      : Build with Web platform support");
     console.log("--debug         : Build debug version of the editor and associated platform runtimes");
     console.log("--noclean       : Do not clean before building, useful during development");
     console.log("--nonet         : Build without AtomicNET C# scripting support");
@@ -83,6 +84,14 @@ if (cmd == "buildeditor") {
         }
     }
 
+    if (config["with-web"]) {
+
+        if (!process.env.EMSCRIPTEN) {
+            console.log("\nEMSCRIPTEN environment variable not set, consider running 'source /Path/To/emsdk_env.sh', exiting\n");
+            process.exit(1);
+        }
+    }
+
     if (config["with-ios"]) {
 
         if (os.platform() != "darwin") {

+ 2 - 1
Build/Scripts/BuildConfig.js

@@ -36,7 +36,7 @@ function processOptions(config) {
             config["with-atomicnet"] = programFileExists('/usr/bin/xbuild');
         }
 	}
-	
+
     // paths
     config.atomicRoot = path.resolve(__dirname, "../..") + "/";
     config.artifactsRoot = config.atomicRoot + "Artifacts/";
@@ -60,6 +60,7 @@ exports = module.exports = processOptions(require('minimist')(process.argv.slice
         "noclean" : false,
         "debug" : false,
         "nonet" : false,
+        "with-web" : false,
         "with-android" : false,
         "with-ios" : false,
         "with-docs" : false,

+ 6 - 0
Build/Scripts/BuildTasks.js

@@ -29,6 +29,12 @@ function installBuildTasks(rootTask) {
         task = netTask;
     }
 
+    if (config["with-web"]) {
+        var webTask = jake.Task['build:web_player'];
+        task.prereqs.push("build:web_player")
+        task = webTask;
+    }
+
     if (config["with-ios"]) {
         var iosTask = jake.Task['build:ios_native'];
         task.prereqs.push("build:ios_native")

+ 30 - 52
Build/Scripts/BuildWeb.js

@@ -1,76 +1,54 @@
+var os = require('os');
 var fs = require('fs-extra');
 var path = require("path");
 var host = require("./Host");
-var os = require('os');
-var config = require("./BuildConfig")
+var config = require('./BuildConfig');
 
 var atomicRoot = config.atomicRoot;
-var buildDir = config.artifactsRoot + "Build/Web/AtomicPlayer";
-
-// build command:
-// ./Build/Mac/node/node ./Build/node_modules/jake/bin/cli.js -f ./Build/Scripts/Bootstrap.js build:web_player
+var buildDir = config.artifactsRoot + "Build/Web/";
 
 namespace('build', function() {
 
-  task('web_player'/*, ["build:atomiceditor"]*/, {
-    async: true
-  }, function() {
-
-    // TODO: add clean build option
-    if (!fs.existsSync(buildDir)) {
-      common.cleanCreateDir(buildDir);
-    }
+    task('web_player', {
+        async: true
+    }, function() {
 
-    process.chdir(buildDir);
+        host.setupDirs(!config["noclean"], [buildDir]);
 
-    var cmds = [];
+        process.chdir(buildDir);
 
-    var scriptModules = host.getScriptModules("WEB");
+        var cmds = [];
 
-    var bindCmd = host.atomicTool + " bind \"" + atomicRoot + "\" ";
+        if (os.platform() == "win32") {
 
-    // Generate bindings for each script package
-    for (var pkgName in scriptModules) {
-      cmds.push(bindCmd + "Script/Packages/" + pkgName + "/ WEB")
-    }
+        }
+        else {
+            cmds.push("cmake -DEMSCRIPTEN=1 -DCMAKE_TOOLCHAIN_FILE=\"" + atomicRoot + "Build/CMake/Toolchains/emscripten.toolchain.cmake\" -DCMAKE_BUILD_TYPE=Release ../../../");
+            cmds.push("make -j4");
+        }
 
-    if (os.platform() == "win32") {
+        jake.exec(cmds, function() {
 
-    }
-    else {
-      cmds.push("cmake -DEMSCRIPTEN=1 -DCMAKE_TOOLCHAIN_FILE=\"" + atomicRoot + "Build/CMake/Toolchains/emscripten.toolchain.cmake\" -DCMAKE_BUILD_TYPE=Release ../../../../");
-      cmds.push("make -j4");
-      // -s ERROR_ON_UNDEFINED_SYMBOLS=1 (disabled for pthread errors currently on incoming)
-      cmds.push("cd ./Source/AtomicPlayer/Application && mv ./AtomicPlayer ./AtomicPlayer.bc && " +
-      "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");
-    }
+            var editorResourceFolder = config.artifactsRoot + (os.platform() == "win32" ? "AtomicEditor/Resources/" : "AtomicEditor/AtomicEditor.app/Contents/Resources/");
 
-    jake.exec(cmds, function() {
+            var webPlayerBinary = buildDir + "/Source/AtomicPlayer/Application/AtomicPlayer.js";
+            var webPlayerMemFile = buildDir + "/Source/AtomicPlayer/Application/AtomicPlayer.html.mem";
 
-      var editorAppFolder = config.artifactsRoot + (os.platform() == "win32" ? "AtomicEditor/" : "AtomicEditor/AtomicEditor.app/");
+            // Install Deployment
+            fs.copySync(webPlayerBinary, editorResourceFolder + "ToolData/Deployment/Web/AtomicPlayer.js");
+            fs.copySync(webPlayerMemFile, editorResourceFolder + "ToolData/Deployment/Web/AtomicPlayer.html.mem");
 
-      var webPlayerBinary = buildDir + "/Source/AtomicPlayer/Application/AtomicPlayer.js";
-      var webPlayerMemFile = buildDir + "/Source/AtomicPlayer/Application/AtomicPlayer.html.mem";
+            // Install locally as well
+            fs.copySync(webPlayerBinary, atomicRoot + "Data/AtomicEditor/Deployment/Web/AtomicPlayer.js");
+            fs.copySync(webPlayerMemFile, atomicRoot + "Data/AtomicEditor/Deployment/Web/AtomicPlayer.html.mem");
 
-      // Install Deployment
+            complete();
 
-      // Don't put into Artifact editor build as this requires a Emscripten install
-      // fs.copySync(webPlayerBinary, editorAppFolder + "Resources/ToolData/Deployment/Web/AtomicPlayer.js");
-      // fs.copySync(webPlayerMemFile, editorAppFolder + "Resources/ToolData/Deployment/Web/AtomicPlayer.html.mem");
+        }, {
+            printStdout: true,
+            printStderr: true
+        });
 
-      // Instead, use local build
-      fs.copySync(webPlayerBinary, atomicRoot + "Data/AtomicEditor/Deployment/Web/AtomicPlayer.js");
-      fs.copySync(webPlayerMemFile, atomicRoot + "Data/AtomicEditor/Deployment/Web/AtomicPlayer.html.mem");
-
-      console.log("Built Web Player");
-
-      complete();
-
-    }, {
-      printStdout: true,
-      breakOnError : false
     });
 
-  });
-
 }); // end of build namespace