GenEditorData.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. var fs = require('fs-extra');
  2. var bcommon = require("./BuildCommon");
  3. var host = require("./Host");
  4. var buildDir = bcommon.artifactsRoot + "Build/EditorData/";
  5. var jsDocFolder = bcommon.artifactsRoot + "Build/JSDoc/";
  6. var atomicRoot = bcommon.atomicRoot;
  7. var atomicTool = host.getAtomicToolBinary();
  8. var glob = require("glob");
  9. var Tslint = require("tslint");
  10. namespace('build', function() {
  11. task('genscriptbindings', {
  12. async: true
  13. }, function() {
  14. bcommon.cleanCreateDir(buildDir);
  15. bcommon.cleanCreateDir(jsDocFolder);
  16. var bindCmd = atomicTool + " bind \"" + atomicRoot + "\" ";
  17. var cmds = [
  18. bindCmd + "Script/Packages/Atomic/ WINDOWS",
  19. bindCmd + "Script/Packages/AtomicPlayer/ WINDOWS",
  20. bindCmd + "Script/Packages/ToolCore/ WINDOWS",
  21. bindCmd + "Script/Packages/Editor/ WINDOWS",
  22. bindCmd + "Script/Packages/AtomicNET/ WINDOWS",
  23. bindCmd + "Script/Packages/WebView/ WINDOWS",
  24. ];
  25. jake.exec(cmds, function() {
  26. console.log("Built Script Bindings");
  27. complete();
  28. }, {
  29. printStdout: true
  30. });
  31. });
  32. task('gendocs', ["build:genscriptbindings"], {
  33. async: true
  34. }, function() {
  35. console.log("Generating Examples & JSDocs");
  36. fs.copySync(atomicRoot + "Build/Docs/Readme.md", jsDocFolder + "/Readme.md");
  37. fs.copySync(atomicRoot + "Build/Docs/jsdoc.conf", jsDocFolder + "/jsdoc.conf");
  38. cmds = [
  39. "git clone https://github.com/AtomicGameEngine/AtomicExamples " + buildDir + "AtomicExamples && rm -rf " + buildDir + "AtomicExamples/.git",
  40. "cd " + jsDocFolder + " && npm install git+https://github.com/jsdoc3/jsdoc",
  41. "cd " + jsDocFolder + " && git clone https://github.com/AtomicGameEngine/jaguarjs-jsdoc && cd jaguarjs-jsdoc && git checkout atomic_master",
  42. "cd " + jsDocFolder + " && ./node_modules/.bin/jsdoc ./Atomic.js -t ./jaguarjs-jsdoc/ -c ./jsdoc.conf Readme.md",
  43. ];
  44. jake.exec(cmds, function() {
  45. fs.copySync(jsDocFolder + "out", buildDir + "Docs");
  46. complete();
  47. }, {
  48. printStdout: true
  49. });
  50. });
  51. task('ios_deploy', {
  52. async: true
  53. }, function() {
  54. var iosDeploybuildDir = bcommon.artifactsRoot + "Build/IOSDeploy/";
  55. bcommon.cleanCreateDir(iosDeploybuildDir);
  56. process.chdir(iosDeploybuildDir);
  57. jake.exec("git clone https://github.com/AtomicGameEngine/ios-deploy && cd ios-deploy && make ios-deploy",
  58. function() {
  59. complete();
  60. }, {
  61. printStdout: true
  62. });
  63. });
  64. // Linting task
  65. task('lint_typescript', {
  66. async: true
  67. }, function(fileMask, failOnError) {
  68. console.log("TSLINT: Linting files in " + fileMask);
  69. var lintConfig = JSON.parse(fs.readFileSync("./Script/tslint.json"));
  70. var options = {
  71. configuration: lintConfig,
  72. formatter: "prose"
  73. };
  74. // lint
  75. // Since TSLint does not yet support recursively searching for files, then we need to
  76. // create a command per file. The main issue with this is that it will abort on the first error instead
  77. // of listing out all lint errors
  78. glob(fileMask, function(err, results) {
  79. var lintErrors = [];
  80. results.forEach(function(filename) {
  81. var contents = fs.readFileSync(filename, "utf8");
  82. var ll = new Tslint(filename, contents, options);
  83. var result = ll.lint();
  84. if (result.failureCount > 0) {
  85. lintErrors.push(result.output);
  86. }
  87. });
  88. if (lintErrors.length > 0) {
  89. console.warn("TSLINT: WARNING - Lint errors detected");
  90. console.warn(lintErrors.join(''));
  91. if (failOnError) {
  92. fail("TSLint errors detected");
  93. }
  94. }
  95. complete();
  96. });
  97. });
  98. task('compileeditorscripts', ["build:genscriptbindings"],{
  99. async: true
  100. }, function() {
  101. console.log("Compiling Editor Scripts");
  102. process.chdir(atomicRoot);
  103. var tsc = "./Build/node_modules/typescript/lib/tsc";
  104. var dtsGenerator = "./Build/node_modules/dts-generator/bin/dts-generator";
  105. cmds = [
  106. atomicRoot + "Build/Mac/node/node " + tsc + " -p ./Script",
  107. atomicRoot + "Build/Mac/node/node " + tsc + " -p ./Script/AtomicWebViewEditor",
  108. atomicRoot + "Build/Mac/node/node " + dtsGenerator + " --name Atomic --baseDir ./Script/TypeScript --exclude ./Script/TypeScript/dist/*.d.ts --out ./Script/TypeScript/dist/Atomic.d.ts ./Script/TypeScript/*.d.ts"
  109. ];
  110. // will be copied when editor resources are copied
  111. var lintTask = jake.Task['build:lint_typescript'];
  112. lintTask.addListener('complete', function () {
  113. console.log("\n\nLint: Typescript linting complete.\n\n");
  114. jake.exec(cmds, function() {
  115. // copy some external dependencies into the editor modules directory
  116. var editorModulesDir = "./Artifacts/Build/Resources/EditorData/AtomicEditor/EditorScripts/AtomicEditor/modules";
  117. var webeditorModulesDir = "./Data/AtomicEditor/CodeEditor/source/editorCore/modules";
  118. var nodeModulesDir = "./Build/node_modules";
  119. fs.mkdirsSync(editorModulesDir);
  120. // TypeScript
  121. fs.copySync(nodeModulesDir + "/typescript/lib/typescript.js", webeditorModulesDir + "/typescript.js")
  122. // copy lib.core.d.ts into the tool data directory
  123. fs.mkdirsSync("./Artifacts/Build/Resources/EditorData/AtomicEditor/EditorScripts/AtomicEditor/TypeScriptSupport");
  124. fs.copySync("./Build/node_modules/typescript/lib/lib.core.d.ts","./Data/AtomicEditor/TypeScriptSupport/lib.core.d.ts")
  125. // copy the combined Atomic.d.ts to the tool data directory
  126. fs.copySync("./Script/TypeScript/dist/Atomic.d.ts","./Data/AtomicEditor/TypeScriptSupport/Atomic.d.ts")
  127. complete();
  128. }, {
  129. printStdout: true
  130. });
  131. });
  132. lintTask.invoke("{./Script/AtomicEditor/**/*.ts,./Script/AtomicWebViewEditor/**/*.ts}", false);
  133. });
  134. task('geneditordata', ["build:compileeditorscripts", "build:ios_deploy", "build:gendocs"], {
  135. async: true
  136. }, function() {
  137. // Mac App
  138. fs.copySync(atomicRoot + "Build/CIScripts/Mac/PlayerApp/",
  139. buildDir + "MacApps/PlayerApp/");
  140. // Editor Binaries
  141. fs.copySync(bcommon.artifactsRoot + "Build/Mac/Bin/AtomicEditor.zip",
  142. buildDir + "EditorBinaries/Mac/AtomicEditor.zip");
  143. fs.copySync(bcommon.artifactsRoot + "Build/Windows/Bin/AtomicEditor.exe",
  144. buildDir + "EditorBinaries/Windows/AtomicEditor.exe");
  145. fs.copySync(bcommon.artifactsRoot + "Build/Windows/Bin/D3DCompiler_47.dll",
  146. buildDir + "EditorBinaries/Windows/D3DCompiler_47.dll");
  147. // Resources
  148. fs.copySync(atomicRoot + "Resources/CoreData", buildDir + "Resources/CoreData");
  149. fs.copySync(atomicRoot + "Resources/EditorData", buildDir + "Resources/EditorData");
  150. fs.copySync(atomicRoot + "Resources/PlayerData", buildDir + "Resources/PlayerData");
  151. fs.copySync(atomicRoot + "/Data/AtomicEditor", buildDir + "Resources/ToolData");
  152. fs.copySync(atomicRoot + "Artifacts/Build/Resources/EditorData/AtomicEditor/EditorScripts",
  153. buildDir + "Resources/EditorData/AtomicEditor/EditorScripts");
  154. // root deployment
  155. var deployRoot = buildDir + "Resources/ToolData/Deployment/";
  156. fs.copySync(atomicRoot + "/Data/AtomicEditor/Deployment/", deployRoot);
  157. // Android
  158. fs.copySync(bcommon.artifactsRoot + "Build/Android/Bin/libAtomicPlayer.so",
  159. deployRoot + "Android/libs/armeabi-v7a/libAtomicPlayer.so");
  160. // Mac
  161. fs.copySync(bcommon.artifactsRoot + "Build/Mac/Bin/AtomicPlayer",
  162. deployRoot + "MacOS/AtomicPlayer.app/Contents/MacOS/AtomicPlayer");
  163. // IOS
  164. fs.copySync(bcommon.artifactsRoot + "Build/IOSDeploy/ios-deploy/ios-deploy",
  165. deployRoot + "IOS/ios-deploy/ios-deploy");
  166. fs.copySync(bcommon.artifactsRoot + "Build/IOS/Bin/AtomicPlayer",
  167. deployRoot + "IOS/AtomicPlayer.app/AtomicPlayer");
  168. // Web
  169. fs.copySync(bcommon.artifactsRoot + "Build/Web/Bin/AtomicPlayer.js",
  170. deployRoot + "Web/AtomicPlayer.js");
  171. fs.copySync(bcommon.artifactsRoot + "Build/Web/Bin/AtomicPlayer.html.mem",
  172. deployRoot + "Web/AtomicPlayer.html.mem");
  173. // Windows
  174. fs.copySync(bcommon.artifactsRoot + "Build/Windows/Bin/AtomicPlayer.exe",
  175. deployRoot + "Windows/x64/AtomicPlayer.exe");
  176. fs.copySync(bcommon.artifactsRoot + "Build/Windows/Bin/D3DCompiler_47.dll",
  177. deployRoot + "Windows/x64/D3DCompiler_47.dll");
  178. complete();
  179. process.chdir(buildDir);
  180. var cmds = ["zip -r -X ./EditorData.zip ./"];
  181. jake.exec(cmds,
  182. function() {
  183. complete();
  184. }, {
  185. printStdout: true
  186. });
  187. });
  188. }); // end of build namespace