project.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. let flags = globalThis.flags;
  2. flags.android = os_argv().indexOf("android") >= 0;
  3. flags.ios = os_argv().indexOf("ios") >= 0;
  4. flags.d3d12 = os_argv().indexOf("direct3d12") >= 0;
  5. flags.vulkan = os_argv().indexOf("vulkan") >= 0;
  6. flags.metal = os_argv().indexOf("metal") >= 0;
  7. flags.raytrace = flags.d3d12 || flags.vulkan || flags.metal;
  8. flags.embed = os_argv().indexOf("--embed") >= 0; // os_argv().indexOf("--debug") == -1; // clang 19
  9. flags.physics = os_argv().indexOf("--debug") == -1;
  10. flags.voxels = !flags.raytrace && !flags.android && !flags.ios;
  11. flags.with_d3dcompiler = true;
  12. flags.with_nfd = true;
  13. flags.with_compress = true;
  14. flags.with_image_write = true;
  15. flags.with_iron = true;
  16. flags.with_eval = true;
  17. let project = new Project("Base");
  18. {
  19. project.add_define("IDLE_SLEEP");
  20. let dir = flags.name.toLowerCase();
  21. if (graphics === "vulkan") {
  22. project.add_define("KINC_VKRT");
  23. project.add_project("../armorcore/tools/to_spirv");
  24. }
  25. if (flags.with_onnx) {
  26. project.add_define("WITH_ONNX");
  27. project.add_include_dir("../" + dir + "/onnx/include");
  28. if (platform === "windows") {
  29. project.add_lib("../" + dir + "/onnx/win32/onnxruntime");
  30. }
  31. else if (platform === "linux") {
  32. // patchelf --set-rpath . ArmorLab
  33. project.add_lib("onnxruntime -L" + flags.dirname + "/../" + dir + "/onnx/linux");
  34. // project.add_lib("onnxruntime_providers_cuda");
  35. // project.add_lib("onnxruntime_providers_shared");
  36. // project.add_lib("cublasLt");
  37. // project.add_lib("cublas");
  38. // project.add_lib("cudart");
  39. // project.add_lib("cudnn");
  40. // project.add_lib("cufft");
  41. // project.add_lib("curand");
  42. }
  43. else if (platform === "macos") {
  44. project.add_lib("../" + dir + "/onnx/macos/libonnxruntime.1.14.1.dylib");
  45. }
  46. }
  47. project.add_define("WITH_PLUGINS");
  48. project.add_cfiles("sources/plugin_api.c");
  49. project.add_project("../" + dir + "/plugins");
  50. project.add_project("plugins");
  51. }
  52. project.add_project("../armorcore");
  53. project.add_tsfiles("sources");
  54. project.add_tsfiles("sources/nodes");
  55. project.add_shaders("../armorcore/shaders/*.glsl");
  56. project.add_shaders("shaders/*.glsl");
  57. project.add_assets("assets/*", { destination: "data/{name}" });
  58. project.add_assets("assets/locale/*", { destination: "data/locale/{name}" });
  59. project.add_assets("assets/licenses/**", { destination: "data/licenses/{name}" });
  60. project.add_assets("assets/plugins/*", { destination: "data/plugins/{name}" });
  61. project.add_assets("assets/themes/*.json", { destination: "data/themes/{name}" });
  62. if (flags.embed) {
  63. project.add_define("WITH_EMBED");
  64. project.add_define("arm_embed");
  65. }
  66. else {
  67. project.add_assets("assets/extra/*", { destination: "data/{name}" });
  68. }
  69. if (flags.physics) {
  70. project.add_define("arm_physics");
  71. }
  72. project.add_define("arm_particles");
  73. // project.add_define("arm_skin");
  74. // project.add_define("arm_audio");
  75. if (flags.android) {
  76. project.add_define("arm_android_rmb");
  77. }
  78. if (flags.raytrace) {
  79. project.add_assets("assets/raytrace/*", { destination: "data/{name}" });
  80. if (flags.d3d12) {
  81. project.add_assets("shaders/raytrace/*.cso", { destination: "data/{name}" });
  82. project.add_assets("assets/readme/readme_dxr.txt", { destination: "{name}" });
  83. }
  84. else if (flags.vulkan) {
  85. project.add_assets("shaders/raytrace/*.spirv", { destination: "data/{name}" });
  86. project.add_assets("assets/readme/readme_vkrt.txt", { destination: "{name}" });
  87. }
  88. else if (flags.metal) {
  89. project.add_assets("shaders/raytrace/*.metal", { destination: "data/{name}" });
  90. }
  91. }
  92. if (flags.voxels) {
  93. project.add_define("arm_voxels");
  94. if (platform === "windows") {
  95. project.add_assets("shaders/voxel_hlsl/*.d3d11", { destination: "data/{name}" });
  96. }
  97. else {
  98. project.add_shaders("shaders/voxel_glsl/*.glsl", { noprocessing: true });
  99. }
  100. }
  101. let export_version_info = true;
  102. if (export_version_info) {
  103. let dir = "../" + flags.name.toLowerCase() + "/build";
  104. let sha = os_popen(`git log --pretty=format:"%h" -n 1`).stdout.substr(1, 7);
  105. let date = new Date().toISOString().split("T")[0];
  106. let data = `{ "sha": "${sha}", "date": "${date}" }`;
  107. fs_ensuredir(dir);
  108. fs_writefile(dir + "/version.json", data);
  109. // Adds version.json to embed.txt list
  110. project.add_assets(dir + "/version.json", { destination: "data/{name}" });
  111. }
  112. let export_data_list = flags.android; // .apk contents
  113. if (export_data_list) {
  114. let root = "../" + flags.name.toLowerCase();
  115. let data_list = {
  116. "/data/plugins": fs_readdir("../base/assets/plugins").concat(fs_readdir(root + "/assets/plugins")).join(","),
  117. "/data/export_presets": fs_readdir(root + "/assets/export_presets").join(","),
  118. "/data/keymap_presets": fs_readdir(root + "/assets/keymap_presets").join(","),
  119. "/data/locale": fs_readdir("../base/assets/locale").join(","),
  120. "/data/meshes": fs_readdir(root + "/assets/meshes").join(","),
  121. "/data/themes": fs_readdir("../base/assets/themes").join(","),
  122. };
  123. let dir = "../" + flags.name.toLowerCase() + "/build";
  124. fs_ensuredir(dir);
  125. fs_writefile(dir + "/data_list.json", JSON.stringify(data_list));
  126. project.add_assets(dir + "/data_list.json", { destination: "data/{name}" });
  127. }
  128. project.flatten();
  129. return project;