From c2cf7c965a22af0cb234465f2d897ecbeaa5fd66 Mon Sep 17 00:00:00 2001 From: kayomn Date: Wed, 10 Aug 2022 14:52:16 +0100 Subject: [PATCH] Initial commit --- .gitignore | 2 ++ .vscode/settings.json | 14 ++++++++++++++ .vscode/tasks.json | 15 +++++++++++++++ build.zig | 33 ++++++++++++++++++++++++++++++++ src/main.zig | 44 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 108 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json create mode 100644 build.zig create mode 100644 src/main.zig diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c14adf --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +**/zig-out/ +**/zig-cache/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..f0213d6 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,14 @@ +{ + "editor.rulers": [100], + + "files.exclude":{ + "**/.git": true, + "**/.svn": true, + "**/.hg": true, + "**/CVS": true, + "**/.DS_Store": true, + "**/Thumbs.db": true, + "**/zig-cache": true, + "**/zig-out": true, + }, +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..7b1391b --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,15 @@ +{ + "version": "2.0.0", + + "tasks": [ + { + "label": "Build Ona", + "type": "shell", + "command": "zig build", + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/build.zig b/build.zig new file mode 100644 index 0000000..efb67d4 --- /dev/null +++ b/build.zig @@ -0,0 +1,33 @@ +const std = @import("std"); + +pub fn build(builder: *std.build.Builder) void { + const target = builder.standardTargetOptions(.{}); + const mode = builder.standardReleaseOptions(); + + // Ona executable. + { + const ona_exe = builder.addExecutable("ona", "src/main.zig"); + + ona_exe.setTarget(target); + ona_exe.setBuildMode(mode); + ona_exe.install(); + ona_exe.linkSystemLibrary("sdl2"); + + const run_cmd = ona_exe.run(); + + run_cmd.step.dependOn(builder.getInstallStep()); + + if (builder.args) |args| run_cmd.addArgs(args); + + builder.step("run", "Run Ona application").dependOn(&run_cmd.step); + } + + // Ona tests. + { + const ona_tests = builder.addTest("src/main.zig"); + + ona_tests.setTarget(target); + ona_tests.setBuildMode(mode); + builder.step("test", "Run Ona unit tests").dependOn(&ona_tests.step); + } +} diff --git a/src/main.zig b/src/main.zig new file mode 100644 index 0000000..a482a78 --- /dev/null +++ b/src/main.zig @@ -0,0 +1,44 @@ +const c = @cImport({ + @cInclude("SDL2/SDL.h"); +}); + +const std = @import("std"); + +pub fn main() anyerror!void { + if (c.SDL_Init(c.SDL_INIT_EVERYTHING) != 0) { + c.SDL_LogCritical(c.SDL_LOG_CATEGORY_APPLICATION, "Failed to initialize SDL2"); + + return error.SystemFailure; + } + + defer c.SDL_Quit(); + + const sdl_window = create_sdl_window: { + const pos = c.SDL_WINDOWPOS_UNDEFINED; + var flags = @as(u32, 0); + + break: create_sdl_window c.SDL_CreateWindow("Ona", pos, pos, 640, 480, flags); + }; + + if (sdl_window == null) { + c.SDL_LogCritical(c.SDL_LOG_CATEGORY_APPLICATION, "Failed to create window"); + + return error.SystemFailure; + } + + defer c.SDL_DestroyWindow(sdl_window); + + var is_running = true; + + while (is_running) { + var sdl_event = std.mem.zeroes(c.SDL_Event); + + while (c.SDL_PollEvent(&sdl_event) != 0) { + switch (sdl_event.type) { + c.SDL_QUIT => is_running = false, + + else => {}, + } + } + } +}