project.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. let flags = globalThis.flags;
  2. flags.android = process.argv.indexOf("android") >= 0;
  3. flags.ios = process.argv.indexOf("ios") >= 0;
  4. flags.d3d12 = process.argv.indexOf("direct3d12") >= 0;
  5. flags.vulkan = process.argv.indexOf("vulkan") >= 0;
  6. flags.metal = process.argv.indexOf("metal") >= 0;
  7. flags.raytrace = flags.d3d12 || flags.vulkan || flags.metal;
  8. flags.snapshot = process.argv.indexOf("--snapshot") >= 0;
  9. flags.physics = true;
  10. flags.voxels = !flags.raytrace && !flags.android && !flags.ios;
  11. flags.with_d3dcompiler = true;
  12. flags.with_nfd = true;
  13. flags.with_tinydir = true;
  14. flags.with_zlib = true;
  15. flags.with_stb_image_write = true;
  16. flags.with_g2 = true;
  17. flags.with_iron = true;
  18. flags.with_zui = true;
  19. // flags.with_minits = true; ////
  20. // flags.physics = false; ////
  21. flags.on_c_project_created = async function(c_project, platform, graphics) {
  22. c_project.addDefine("IDLE_SLEEP");
  23. let dir = flags.name.toLowerCase();
  24. if (graphics === "vulkan") {
  25. c_project.addDefine("KINC_VKRT");
  26. await c_project.addProject("../" + dir + "/glsl_to_spirv");
  27. }
  28. if (flags.with_onnx) {
  29. c_project.addDefine("WITH_ONNX");
  30. c_project.addIncludeDir("../" + dir + "/onnx/include");
  31. if (platform === "win32") {
  32. c_project.addLib("../" + dir + "/onnx/win32/onnxruntime");
  33. }
  34. else if (platform === "linux") {
  35. // patchelf --set-rpath . ArmorLab
  36. c_project.addLib("onnxruntime -L" + flags.dirname + "/../" + dir + "/onnx/linux");
  37. // c_project.addLib("onnxruntime_providers_cuda");
  38. // c_project.addLib("onnxruntime_providers_shared");
  39. // c_project.addLib("cublasLt");
  40. // c_project.addLib("cublas");
  41. // c_project.addLib("cudart");
  42. // c_project.addLib("cudnn");
  43. // c_project.addLib("cufft");
  44. // c_project.addLib("curand");
  45. }
  46. else if (platform === "osx") {
  47. c_project.addLib("../" + dir + "/onnx/macos/libonnxruntime.1.14.1.dylib");
  48. }
  49. }
  50. await c_project.addProject("../" + dir + "/Plugins");
  51. };
  52. let project = new Project("Base");
  53. project.addSources("Sources");
  54. project.addSources("Sources/nodes");
  55. project.addShaders("../armorcore/Shaders/*.glsl", { embed: flags.snapshot });
  56. project.addShaders("Shaders/*.glsl", { embed: flags.snapshot });
  57. project.addAssets("Assets/*", { destination: "data/{name}", embed: flags.snapshot });
  58. project.addAssets("Assets/locale/*", { destination: "data/locale/{name}" });
  59. project.addAssets("Assets/licenses/**", { destination: "data/licenses/{name}" });
  60. project.addAssets("Assets/plugins/*", { destination: "data/plugins/{name}" });
  61. project.addAssets("Assets/themes/*.json", { destination: "data/themes/{name}" });
  62. if (flags.snapshot) {
  63. project.addDefine("arm_snapshot");
  64. project.addDefine("arm_image_embed");
  65. project.addDefine("arm_shader_embed");
  66. }
  67. else {
  68. project.addDefine("arm_noembed");
  69. project.addAssets("Assets/extra/*", { destination: "data/{name}" });
  70. }
  71. project.addDefine("arm_particles");
  72. // project.addDefine("arm_skin");
  73. // project.addDefine("arm_audio");
  74. if (flags.android) {
  75. project.addDefine("krom_android_rmb");
  76. }
  77. if (flags.raytrace) {
  78. project.addAssets("Assets/raytrace/*", { destination: "data/{name}", embed: flags.snapshot });
  79. if (flags.d3d12) {
  80. project.addAssets("Shaders/raytrace/*.cso", { destination: "data/{name}", embed: flags.snapshot });
  81. }
  82. else if (flags.vulkan) {
  83. project.addAssets("Shaders/raytrace/*.spirv", { destination: "data/{name}", embed: flags.snapshot });
  84. }
  85. else if (flags.metal) {
  86. project.addAssets("Shaders/raytrace/*.metal", { destination: "data/{name}", embed: flags.snapshot });
  87. }
  88. }
  89. if (flags.voxels) {
  90. project.addDefine("arm_voxels");
  91. if (process.platform === "win32") {
  92. project.addShaders("Shaders/voxel_hlsl/*.glsl", { embed: flags.snapshot, noprocessing: true });
  93. }
  94. else {
  95. project.addShaders("Shaders/voxel_glsl/*.glsl", { embed: flags.snapshot });
  96. }
  97. }
  98. let export_version_info = true;
  99. if (export_version_info) {
  100. const fs = require("fs");
  101. let dir = "../" + flags.name.toLowerCase() + "/build";
  102. let sha = require("child_process").execSync(`git log --pretty=format:"%h" -n 1`).toString().substr(1, 7);
  103. let date = new Date().toISOString().split("T")[0];
  104. let data = `{ "sha": "${sha}", "date": "${date}" }`;
  105. fs.ensureDirSync(dir);
  106. fs.writeFileSync(dir + "/version.json", data);
  107. // Adds version.json to embed.txt list
  108. project.addAssets(dir + "/version.json", { destination: "data/{name}", embed: flags.snapshot });
  109. }
  110. resolve(project);