summaryrefslogtreecommitdiff
path: root/themes
diff options
context:
space:
mode:
authorMatt Kosarek <matt.kosarek@canonical.com>2025-12-29 09:42:32 -0500
committerMatt Kosarek <matt.kosarek@canonical.com>2025-12-29 09:42:32 -0500
commit301d0aa4d61b21d4daf703672aa4b1d438651296 (patch)
treecf6ee1d617f53f42d56d952d5c61eeba4e931aa5 /themes
parentbf4b3a5c35152c1292757134123b3363d0f81bf6 (diff)
Use meson to build the themes subproject
Diffstat (limited to 'themes')
-rw-r--r--themes/.gitignore15
-rw-r--r--themes/Makefile44
-rw-r--r--themes/README.md58
-rw-r--r--themes/compile_commands.json127
-rwxr-xr-xthemes/compile_commands.sh7
-rw-r--r--themes/dist/output.js4
-rwxr-xr-xthemes/dist/output.wasmbin159329 -> 99246 bytes
-rw-r--r--themes/emscripten.ini14
-rw-r--r--themes/meson.build98
9 files changed, 187 insertions, 180 deletions
diff --git a/themes/.gitignore b/themes/.gitignore
new file mode 100644
index 0000000..a967258
--- /dev/null
+++ b/themes/.gitignore
@@ -0,0 +1,15 @@
+# Build directories
+dist/
+builddir/
+.cache/
+
+# IDE
+.idea/
+.vscode/
+*.swp
+*.swo
+*~
+
+# Meson
+.meson_subdir/
+compile_commands.json
diff --git a/themes/Makefile b/themes/Makefile
deleted file mode 100644
index 45967f5..0000000
--- a/themes/Makefile
+++ /dev/null
@@ -1,44 +0,0 @@
-TARGET_EXEC ?= output.js
-
-BUILD_DIR ?= ./dist
-SRC_DIRS ?= ./src
-
-CC := emcc
-CXX := em++
-SRCS := $(shell find $(SRC_DIRS) -name *.cpp -or -name *.c -or -name *.s)
-OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
-DEPS := $(OBJS:.o=.d)
-
-INC_DIRS := $(shell find $(SRC_DIRS) -type d)
-INC_FLAGS := $(addprefix -I,$(INC_DIRS))
-LDFLAGS = -s ALLOW_MEMORY_GROWTH=1 -s USE_WEBGL2=1 -s FULL_ES3=1 -s WASM=1 -s NO_EXIT_RUNTIME=1 -s FETCH
-
-CPPFLAGS ?= $(INC_FLAGS) -MMD -MP
-
-$(BUILD_DIR)/$(TARGET_EXEC): $(OBJS)
- $(CC) $(OBJS) -o $@ $(LDFLAGS)
-
-# assembly
-$(BUILD_DIR)/%.s.o: %.s
- $(MKDIR_P) $(dir $@)
- $(AS) $(ASFLAGS) -c $< -o $@
-
-# c source
-$(BUILD_DIR)/%.c.o: %.c
- $(MKDIR_P) $(dir $@)
- $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
-
-# c++ source
-$(BUILD_DIR)/%.cpp.o: %.cpp
- $(MKDIR_P) $(dir $@)
- $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@
-
-
-.PHONY: clean
-
-clean:
- $(RM) -r $(BUILD_DIR)
-
--include $(DEPS)
-
-MKDIR_P ?= mkdir -p
diff --git a/themes/README.md b/themes/README.md
new file mode 100644
index 0000000..3425fb8
--- /dev/null
+++ b/themes/README.md
@@ -0,0 +1,58 @@
+# Themes
+This subproject provides themes for the website.
+
+## Prerequisites
+
+- Emscripten SDK (emsdk)
+- Meson build system (`pip install meson` or via your package manager)
+- Ninja build backend (usually installed with Meson)
+
+## Building
+
+### Initial Setup
+
+```bash
+meson setup builddir --cross-file emscripten.ini
+```
+
+### Compile
+
+```bash
+meson compile -C builddir
+```
+
+The output files will be automatically copied to:
+- `dist/output.js`
+- `dist/output.wasm`
+
+The original build artifacts are also available in `builddir/` if needed.
+
+### Clean Build
+
+```bash
+# Clean and rebuild
+meson compile -C builddir --clean
+meson compile -C builddir
+```
+
+### Complete Clean
+
+```bash
+# Remove the build directory entirely
+rm -rf builddir
+```
+
+## Build Options
+
+You can configure build options during setup:
+
+```bash
+# Debug build
+meson setup builddir --cross-file emscripten.ini --buildtype=debug
+
+# Release build with optimizations
+meson setup builddir --cross-file emescripten.ini --buildtype=release
+
+# Reconfigure an existing build
+meson configure builddir --buildtype=debug
+```
diff --git a/themes/compile_commands.json b/themes/compile_commands.json
deleted file mode 100644
index 020d53e..0000000
--- a/themes/compile_commands.json
+++ /dev/null
@@ -1,127 +0,0 @@
-[
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/shader_fetcher.cpp -o dist/./src/shader_fetcher.cpp.o",
- "file": "dist/./src/shader_fetcher.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/winter/WinterTheme.cpp -o dist/./src/winter/WinterTheme.cpp.o",
- "file": "dist/./src/winter/WinterTheme.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/winter/Windfield.cpp -o dist/./src/winter/Windfield.cpp.o",
- "file": "dist/./src/winter/Windfield.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/winter/Snowflake.cpp -o dist/./src/winter/Snowflake.cpp.o",
- "file": "dist/./src/winter/Snowflake.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/autumn/LeafParticleRender.cpp -o dist/./src/autumn/LeafParticleRender.cpp.o",
- "file": "dist/./src/autumn/LeafParticleRender.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/autumn/AutumnTheme.cpp -o dist/./src/autumn/AutumnTheme.cpp.o",
- "file": "dist/./src/autumn/AutumnTheme.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/autumn/TreeShape.cpp -o dist/./src/autumn/TreeShape.cpp.o",
- "file": "dist/./src/autumn/TreeShape.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/Logger.cpp -o dist/./src/Logger.cpp.o",
- "file": "dist/./src/Logger.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/shaders/sun_vert.cpp -o dist/./src/shaders/sun_vert.cpp.o",
- "file": "dist/./src/shaders/sun_vert.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/shaders/renderer2d_frag.cpp -o dist/./src/shaders/renderer2d_frag.cpp.o",
- "file": "dist/./src/shaders/renderer2d_frag.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/shaders/renderer3d_frag.cpp -o dist/./src/shaders/renderer3d_frag.cpp.o",
- "file": "dist/./src/shaders/renderer3d_frag.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/shaders/sun_frag.cpp -o dist/./src/shaders/sun_frag.cpp.o",
- "file": "dist/./src/shaders/sun_frag.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/shaders/renderer2d_vert.cpp -o dist/./src/shaders/renderer2d_vert.cpp.o",
- "file": "dist/./src/shaders/renderer2d_vert.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/shaders/renderer3d_vert.cpp -o dist/./src/shaders/renderer3d_vert.cpp.o",
- "file": "dist/./src/shaders/renderer3d_vert.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/shapes_2d.cpp -o dist/./src/shapes_2d.cpp.o",
- "file": "dist/./src/shapes_2d.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/WebglContext.cpp -o dist/./src/WebglContext.cpp.o",
- "file": "dist/./src/WebglContext.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/main.cpp -o dist/./src/main.cpp.o",
- "file": "dist/./src/main.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/Renderer2d.cpp -o dist/./src/Renderer2d.cpp.o",
- "file": "dist/./src/Renderer2d.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/summer/SummerTheme.cpp -o dist/./src/summer/SummerTheme.cpp.o",
- "file": "dist/./src/summer/SummerTheme.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/spring/SpringTheme.cpp -o dist/./src/spring/SpringTheme.cpp.o",
- "file": "dist/./src/spring/SpringTheme.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/spring/GrassRenderer.cpp -o dist/./src/spring/GrassRenderer.cpp.o",
- "file": "dist/./src/spring/GrassRenderer.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/Renderer3d.cpp -o dist/./src/Renderer3d.cpp.o",
- "file": "dist/./src/Renderer3d.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/mathlib.cpp -o dist/./src/mathlib.cpp.o",
- "file": "dist/./src/mathlib.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/Shader.cpp -o dist/./src/Shader.cpp.o",
- "file": "dist/./src/Shader.cpp.o"
- },
- {
- "directory": ".",
- "command": "g++ -I./src -I./src/winter -I./src/autumn -I./src/shaders -I./src/tools -I./src/_shaders -I./src/summer -I./src/spring -MMD -MP -c src/MainLoop.cpp -o dist/./src/MainLoop.cpp.o",
- "file": "dist/./src/MainLoop.cpp.o"
- }
-]
diff --git a/themes/compile_commands.sh b/themes/compile_commands.sh
deleted file mode 100755
index 08a9eed..0000000
--- a/themes/compile_commands.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-make --always-make --dry-run \
- | grep -wE 'em++|emcc|gcc|g\+\+|c\+\+' \
- | grep -w '\-c' \
- | jq -nR '[inputs|{directory:".", command:., file: match(" [^ ]+$").string[1:]}]' \
- > compile_commands.json
-
-sed -i -e 's/em++/g++/g' compile_commands.json
diff --git a/themes/dist/output.js b/themes/dist/output.js
index de4c0ed..6f95b3e 100644
--- a/themes/dist/output.js
+++ b/themes/dist/output.js
@@ -3373,9 +3373,9 @@ var wasmImports = {
};
var wasmExports = createWasm();
var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0);
-var _malloc = createExportWrapper('malloc', 1);
-var _free = createExportWrapper('free', 1);
var _main = Module['_main'] = createExportWrapper('main', 2);
+var _free = createExportWrapper('free', 1);
+var _malloc = createExportWrapper('malloc', 1);
var _fflush = createExportWrapper('fflush', 1);
var _strerror = createExportWrapper('strerror', 1);
var __emscripten_tempret_set = createExportWrapper('_emscripten_tempret_set', 1);
diff --git a/themes/dist/output.wasm b/themes/dist/output.wasm
index 7c0155e..24a3b4f 100755
--- a/themes/dist/output.wasm
+++ b/themes/dist/output.wasm
Binary files differ
diff --git a/themes/emscripten.ini b/themes/emscripten.ini
new file mode 100644
index 0000000..5824ce6
--- /dev/null
+++ b/themes/emscripten.ini
@@ -0,0 +1,14 @@
+[binaries]
+c = 'emcc'
+cpp = 'em++'
+ar = 'emar'
+ranlib = 'emranlib'
+
+[host_machine]
+system = 'emscripten'
+cpu_family = 'wasm32'
+cpu = 'wasm32'
+endian = 'little'
+
+[properties]
+needs_exe_wrapper = true
diff --git a/themes/meson.build b/themes/meson.build
new file mode 100644
index 0000000..9c9c76b
--- /dev/null
+++ b/themes/meson.build
@@ -0,0 +1,98 @@
+project('themes', 'cpp',
+ version: '1.0.0',
+ default_options: [
+ 'cpp_std=c++17',
+ 'buildtype=release',
+ 'warning_level=2'
+ ]
+)
+
+# Emscripten link flags
+emscripten_link_args = [
+ '-s', 'ALLOW_MEMORY_GROWTH=1',
+ '-s', 'USE_WEBGL2=1',
+ '-s', 'FULL_ES3=1',
+ '-s', 'WASM=1',
+ '-s', 'NO_EXIT_RUNTIME=1',
+ '-s', 'FETCH'
+]
+
+# Source files
+sources = files(
+ # Main
+ 'src/main.cpp',
+ 'src/main_loop.cpp',
+ 'src/mathlib.cpp',
+ 'src/logger.cpp',
+ 'src/shader.cpp',
+ 'src/shader_fetcher.cpp',
+ 'src/shapes_2d.cpp',
+ 'src/webgl_context.cpp',
+ 'src/renderer_2d.cpp',
+ 'src/renderer_3d.cpp',
+
+ # Shaders
+ 'src/shaders/renderer2d_frag.cpp',
+ 'src/shaders/renderer2d_vert.cpp',
+ 'src/shaders/renderer3d_frag.cpp',
+ 'src/shaders/renderer3d_vert.cpp',
+ 'src/shaders/sun_frag.cpp',
+ 'src/shaders/sun_vert.cpp',
+
+ # Autumn theme
+ 'src/autumn/autumn_theme.cpp',
+ 'src/autumn/leaf_particle_render.cpp',
+ 'src/autumn/tree_shape.cpp',
+
+ # Winter theme
+ 'src/winter/winter_theme.cpp',
+ 'src/winter/snowflake.cpp',
+ 'src/winter/windfield.cpp',
+
+ # Spring theme
+ 'src/spring/spring_theme.cpp',
+ 'src/spring/grass_renderer.cpp',
+
+ # Summer theme
+ 'src/summer/summer_theme.cpp'
+)
+
+# Include directories
+inc = include_directories(
+ 'src',
+ 'src/autumn',
+ 'src/winter',
+ 'src/spring',
+ 'src/summer',
+ 'src/shaders',
+ 'src/_shaders',
+ 'src/tools'
+)
+
+# Build the executable
+output_exe = executable('output',
+ sources,
+ include_directories: inc,
+ link_args: emscripten_link_args,
+ name_suffix: 'js'
+)
+
+# Custom target to copy output files to dist directory
+copy_script = find_program('sh')
+copy_to_dist = custom_target('copy_to_dist',
+ output: ['copy_to_dist.stamp'],
+ input: output_exe,
+ command: [
+ copy_script, '-c',
+ 'mkdir -p ' + meson.project_source_root() + '/dist && ' +
+ 'cp $1 ' + meson.project_source_root() + '/dist/output.js && ' +
+ 'cp $2/output.wasm ' + meson.project_source_root() + '/dist/output.wasm && ' +
+ 'touch $3',
+ '--', '@INPUT@', meson.current_build_dir(), '@OUTPUT@'
+ ],
+ build_by_default: true,
+ install: false
+)
+
+# Add an alias target for convenience
+alias_target('copy-dist', copy_to_dist)