diff options
Diffstat (limited to 'themes')
| -rw-r--r-- | themes/.gitignore | 15 | ||||
| -rw-r--r-- | themes/Makefile | 44 | ||||
| -rw-r--r-- | themes/README.md | 58 | ||||
| -rw-r--r-- | themes/compile_commands.json | 127 | ||||
| -rwxr-xr-x | themes/compile_commands.sh | 7 | ||||
| -rw-r--r-- | themes/dist/output.js | 4 | ||||
| -rwxr-xr-x | themes/dist/output.wasm | bin | 159329 -> 99246 bytes | |||
| -rw-r--r-- | themes/emscripten.ini | 14 | ||||
| -rw-r--r-- | themes/meson.build | 98 |
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 Binary files differindex 7c0155e..24a3b4f 100755 --- a/themes/dist/output.wasm +++ b/themes/dist/output.wasm 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) |
