Mercurial
diff infinite_canvas/BUILD @ 276:b55c22cff335
Add interactive infinite canvas prototype
| author | MrJuneJune <me@mrjunejune.com> |
|---|---|
| date | Mon, 17 Aug 2026 16:57:56 -0700 |
| parents | |
| children | 8d560f50ed4c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/infinite_canvas/BUILD Mon Aug 17 16:57:56 2026 -0700 @@ -0,0 +1,241 @@ +load("@emsdk//emscripten_toolchain:wasm_rules.bzl", "wasm_cc_binary") +load("@rules_cc//cc:cc_library.bzl", "cc_library") +load("@rules_cc//cc:cc_test.bzl", "cc_test") +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") +load("//gui_ze:gui_ze.bzl", "move_files_into_dir") +load("//third_party/raylib:raylib.bzl", "raylib_binary") + +cc_library( + name = "theme", + srcs = ["theme.c"], + hdrs = ["theme.h"], + deps = [ + "//dowa:dowa", + "//third_party/raylib:raylib", + ], + linkopts = select({ + "//config:windows": ["-ladvapi32"], + "//conditions:default": [], + }), +) + +cc_library( + name = "canvas", + srcs = ["canvas.c"], + hdrs = ["canvas.h"], + deps = [ + "//dowa:dowa", + ":theme", + "//third_party/raylib:raylib", + ], + visibility = ["//visibility:public"], +) + +cc_library( + name = "dev_ui", + srcs = ["dev_ui.c"], + hdrs = ["dev_ui.h"], + deps = [ + ":canvas", + ":theme", + "//third_party/raylib:raygui", + ], +) + +cc_library( + name = "web_surface", + srcs = select({ + "//config:linux": ["web_surface_native.cc"], + "//config:macos": ["web_surface_native.cc"], + "//config:windows": ["web_surface_native.cc"], + "//conditions:default": ["web_surface_web.c"], + }), + hdrs = ["web_surface.h"], + copts = select({ + "//config:linux": ["-std=c++20"], + "//config:macos": ["-std=c++20"], + "//conditions:default": [], + }), + deps = [ + ":canvas", + ":theme", + "//dowa:dowa", + "//third_party/raylib:raylib", + ] + select({ + "//config:linux": [ + "@cef//:cef", + "@cef//:cef_wrapper", + ], + "//config:macos": ["@cef//:cef_wrapper"], + "//config:windows": ["@cef//:cef_wrapper"], + "//conditions:default": [], + }), +) + +filegroup( + name = "inter_font", + srcs = ["assets/Inter-Variable.ttf"], +) + +filegroup( + name = "fonts", + srcs = [ + ":inter_font", + "assets/OFL.txt", + ], +) + +filegroup( + name = "image_placeholder", + srcs = ["assets/image-placeholder.svg"], +) + +filegroup( + name = "image_view", + srcs = ["assets/image-view.html"], +) + +raylib_binary( + name = "app_bin", + srcs = ["main.c"], + data = [ + ":fonts", + ":image_placeholder", + ":image_view", + ] + select({ + "//config:linux": [ + "@cef//:resources", + "@cef//:sos", + ], + "//config:macos": ["@cef//:cef_framework"], + "//config:windows": [ + "@cef//:dlls", + "@cef//:resources", + ], + "//conditions:default": [], + }), + deps = [ + ":canvas", + ":web_surface", + "//dowa:dowa", + "//third_party/raylib:raylib", + ], +) + +raylib_binary( + name = "dev_bin", + srcs = ["main.c"], + data = [ + ":fonts", + ":image_placeholder", + ":image_view", + ] + select({ + "//config:linux": [ + "@cef//:resources", + "@cef//:sos", + ], + "//config:macos": ["@cef//:cef_framework"], + "//config:windows": [ + "@cef//:dlls", + "@cef//:resources", + ], + "//conditions:default": [], + }), + defines = ["INFINITE_CANVAS_DEV_UI"], + deps = [ + ":canvas", + ":dev_ui", + ":theme", + ":web_surface", + "//dowa:dowa", + "//third_party/raylib:raylib", + ], +) + +sh_binary( + name = "app_linux", + srcs = ["run_native.sh"], + data = [":app_bin"], +) + +sh_binary( + name = "dev_linux", + srcs = ["run_native.sh"], + data = [":dev_bin"], +) + +alias( + name = "app", + actual = select({ + "//config:linux": ":app_linux", + "//conditions:default": ":app_bin", + }), +) + +alias( + name = "dev", + actual = select({ + "//config:linux": ":dev_linux", + "//conditions:default": ":dev_bin", + }), +) + +filegroup( + name = "shell", + srcs = ["index.html"], +) + +raylib_binary( + name = "web_bin", + srcs = ["main.c"], + additional_linker_inputs = [ + ":image_placeholder", + ":inter_font", + ], + data = [ + ":fonts", + ":image_placeholder", + ], + defines = ["INFINITE_CANVAS_DEV_UI"], + deps = [ + ":canvas", + ":dev_ui", + ":web_surface", + "//dowa:dowa", + "//third_party/raylib:raylib", + ], + linkopts_wasm = [ + "-sUSE_GLFW=3", + "-sMIN_WEBGL_VERSION=2", + "-sMAX_WEBGL_VERSION=2", + "-sALLOW_MEMORY_GROWTH", + "--preload-file=$(location :inter_font)@/infinite_canvas/assets/Inter-Variable.ttf", + "--preload-file=$(location :image_placeholder)@/infinite_canvas/assets/image-placeholder.svg", + ], +) + +wasm_cc_binary( + name = "infinite_canvas_wasm", + cc_target = ":web_bin", +) + +move_files_into_dir( + name = "web_bundle", + srcs = [ + ":infinite_canvas_wasm", + ":shell", + ], + dest = "web", +) + +cc_test( + name = "canvas_test", + srcs = ["canvas_test.c"], + deps = [":canvas"], +) + +sh_binary( + name = "serve", + srcs = ["serve.sh"], + data = [":web_bundle"], +)