Code Monkey home page Code Monkey logo

sdl's Introduction

SDL on Zig

This is a fork of SDL, packaged for Zig (Initially by Andrew Kelley) and in-sync with the latest SDL releases in the main repository. Unnecessary files have been deleted, and the build system has been replaced with build.zig

Usage

We can easily fetch this library using zig fetch, for example:

zig fetch --save https://github.com/pwbh/SDL/archive/refs/tags/release-2.30.3.tar.gz

If another SDL version needed, please see available tags released.

In your build.zig:

const exe = b.addExecutable(.{
      .name = "my-project",
      .root_source_file = b.path("src/main.zig"),
      .target = target,
      .optimize = optimize,
  });

if (target.result.os.tag == .linux) {
    // The SDL package doesn't work for Linux yet, so we rely on system
    // packages for now.
    exe.linkSystemLibrary("SDL2");
    exe.linkLibC();
} else {
    const sdl_dep = b.dependency("SDL", .{
        .optimize = .ReleaseFast,
        .target = target,
    });
    exe.linkLibrary(sdl_dep.artifact("SDL2"));
}

b.installArtifact(exe);

Test it out

Now lets test it out and see if it creates a window.

Following codesnippet should create a window that can be exited.

const c = @cImport({
    @cInclude("SDL2/SDL.h");
});

pub fn main() !void {
    if (c.SDL_Init(c.SDL_INIT_VIDEO) != 0) {
        c.SDL_Log("Unable to initialize SDL: %s", c.SDL_GetError());
        return error.SDLInitializationFailed;
    }
    defer c.SDL_Quit();

    const screen = c.SDL_CreateWindow("My Game Window", c.SDL_WINDOWPOS_UNDEFINED, c.SDL_WINDOWPOS_UNDEFINED, 400, 140, c.SDL_WINDOW_OPENGL) orelse
        {
        c.SDL_Log("Unable to create window: %s", c.SDL_GetError());
        return error.SDLInitializationFailed;
    };
    defer c.SDL_DestroyWindow(screen);

    const renderer = c.SDL_CreateRenderer(screen, -1, 0) orelse {
        c.SDL_Log("Unable to create renderer: %s", c.SDL_GetError());
        return error.SDLInitializationFailed;
    };
    defer c.SDL_DestroyRenderer(renderer);

    var quit = false;

    while (!quit) {
        var event: c.SDL_Event = undefined;
        while (c.SDL_PollEvent(&event) != 0) {
            switch (event.type) {
                c.SDL_QUIT => {
                    quit = true;
                },
                else => {},
            }
        }

        _ = c.SDL_RenderClear(renderer);
        c.SDL_RenderPresent(renderer);

        c.SDL_Delay(10);
    }
}

sdl's People

Contributors

slouken avatar icculus avatar sezero avatar 1bsyl avatar philippwiesemann avatar madebr avatar davidludwig avatar slime73 avatar flibitijibibo avatar cgutman avatar kontrabant avatar vanfanel avatar gabomdq avatar isage avatar ccawley2011 avatar ftzpetruska avatar pionere avatar sdlwikibot avatar smcv avatar fjtrujy avatar brandonschaefer avatar daft-freak avatar urkle avatar jorgenpt avatar meyraud705 avatar sharkwouter avatar sulix avatar danielgibson avatar christianrauch avatar cacodemon345 avatar

Stargazers

Ben avatar  avatar IbrahimOuhamou avatar Olivier Mengué avatar Pedro Silva avatar Stan Draulans avatar Utensil avatar Axe avatar kdx avatar Stephen Barnes avatar FrostBurn avatar 姚文强 avatar Jiri Pospisil avatar Sven Sackers avatar Omer Timor avatar cz avatar Dylan Conway avatar Loibl-Vincent avatar Vasu Singh avatar  avatar masih avatar  avatar Little Bear King avatar  avatar George  Zhao avatar Rafael Ristovski avatar  avatar

Watchers

 avatar

Forkers

mpalomas

sdl's Issues

Unable to use SDL

Hi, I am unable to use SDL.

main.zig:

const c = @cImport({
    @cInclude("SDL2/SDL.h");
});

pub fn main() !void {
    if (c.SDL_Init(c.SDL_INIT_VIDEO) != 0) {
        c.SDL_Log("Unable to initialize SDL: %s", c.SDL_GetError());
        return error.SDLInitializationFailed;
    }
    defer c.SDL_Quit();
}

build.zig:

const std = @import("std");

pub fn build(b: *std.Build) void {
    const target = b.standardTargetOptions(.{});

    const optimize = b.standardOptimizeOption(.{});

    const exe = b.addExecutable(.{
        .name = "phoenix",
        .root_source_file = b.path("src/main.zig"),
        .target = target,
        .optimize = optimize,
    });

    const sdl_dep = b.dependency("SDL", .{
        .optimize = optimize,
        .target = target,
    });
    exe.linkLibrary(sdl_dep.artifact("SDL2"));
    exe.linkLibC();

    b.installArtifact(exe);

    const run_cmd = b.addRunArtifact(exe);

    run_cmd.step.dependOn(b.getInstallStep());

    if (b.args) |args| {
        run_cmd.addArgs(args);
    }

    const run_step = b.step("run", "Run the app");
    run_step.dependOn(&run_cmd.step);

    const exe_unit_tests = b.addTest(.{
        .root_source_file = b.path("src/main.zig"),
        .target = target,
        .optimize = optimize,
    });

    const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests);

    const test_step = b.step("test", "Run unit tests");
    test_step.dependOn(&run_exe_unit_tests.step);
}

build.zig.zon:

.{
    .name = "phoenix",
    .version = "0.1.0",

    //.minimum_zig_version = "0.11.0",

    .dependencies = .{
        .SDL = .{
            .url = "https://github.com/pwbh/SDL/archive/refs/tags/release-2.30.3.tar.gz",
            .hash = "122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145",
        },
    },

    .paths = .{
        "",
    },
}

Error recieved:

C:\Users\Rahul\scoop\apps\zig\0.12.0\zig.exe build-exe C:\Users\Rahul\Projects\phoenix\zig-cache\o\19c3bbc6ab70356e6deadacd953b611a\SDL2.lib -ODebug -I C:\Users\Rahul\Projects\phoenix\zig-cache\o\30292ff246281838c6146df528463321 -Mroot=C:\Users\Rahul\Projects\phoenix\src\main.zig -lsetupapi -lwinmm -lgdi32 -limm32 -lversion -loleaut32 -lole32 -lc --cache-dir C:\Users\Rahul\Projects\phoenix\zig-cache --global-cache-dir C:\Users\Rahul\AppData\Local\zig --name phoenix --listen=-
Build Summary: 2/7 steps succeeded; 1 failed (disable with --summary none)
run transitive failure
└─ run phoenix transitive failure
   ├─ zig build-exe phoenix Debug native 19 errors
   └─ install transitive failure
      └─ install phoenix transitive failure
         └─ zig build-exe phoenix Debug native (+2 more reused dependencies)
error: the following build command failed with exit code 1:
C:\Users\Rahul\Projects\phoenix\zig-cache\o\f2d4a100551712a113b19f0d165e3660\build.exe C:\Users\Rahul\scoop\apps\zig\0.12.0\zig.exe C:\Users\Rahul\Projects\phoenix C:\Users\Rahul\Projects\phoenix\zig-cache C:\Users\Rahul\AppData\Local\zig --seed 0x9003a0ec -Ze6b3b8f282018efc run
phoenix on  main [!] via ↯ v0.12.0 took 4s ❯
phoenix on  main [!] via ↯ v0.12.0 took 4s ❯ zig build run
run
└─ run phoenix
   └─ zig build-exe phoenix Debug native 19 errors
error: lld-link: undefined symbol: SDL_WGI_JoystickDriver
    note: referenced by SDL2.lib(SDL_joystick.obj):(SDL_joystick_drivers)
error: lld-link: undefined symbol: yuv420_rgb565_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:325
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuv420_rgb24_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:328
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuv420_rgba_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:332
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuv420_bgra_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:336
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuv420_argb_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:340
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuv420_abgr_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:344
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuv422_rgb565_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:357
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuv422_rgb24_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:360
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuv422_rgba_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:364
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuv422_bgra_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:368
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuv422_argb_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:372
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuv422_abgr_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:376
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuvnv12_rgb565_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:388
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuvnv12_rgb24_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:391
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuvnv12_rgba_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:395
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuvnv12_bgra_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:399
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuvnv12_argb_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:403
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: lld-link: undefined symbol: yuvnv12_abgr_sseu
    note: referenced by C:\Users\Rahul\AppData\Local\zig\p\122023e44c8cd24dc7275d01181cab31e386504149f06105c14d66754c03137f2145\src\video\SDL_yuv.c:407
    note:               SDL2.lib(SDL_yuv.obj):(yuv_rgb_sse)
error: the following command failed with 19 compilation errors:
C:\Users\Rahul\scoop\apps\zig\0.12.0\zig.exe build-exe C:\Users\Rahul\Projects\phoenix\zig-cache\o\19c3bbc6ab70356e6deadacd953b611a\SDL2.lib -ODebug -I C:\Users\Rahul\Projects\phoenix\zig-cache\o\30292ff246281838c6146df528463321 -Mroot=C:\Users\Rahul\Projects\phoenix\src\main.zig -lsetupapi -lwinmm -lgdi32 -limm32 -lversion -loleaut32 -lole32 -lc --cache-dir C:\Users\Rahul\Projects\phoenix\zig-cache --global-cache-dir C:\Users\Rahul\AppData\Local\zig --name phoenix --listen=-
Build Summary: 2/7 steps succeeded; 1 failed (disable with --summary none)
run transitive failure
└─ run phoenix transitive failure
   ├─ zig build-exe phoenix Debug native 19 errors
   └─ install transitive failure
      └─ install phoenix transitive failure
         └─ zig build-exe phoenix Debug native (+2 more reused dependencies)
error: the following build command failed with exit code 1:
C:\Users\Rahul\Projects\phoenix\zig-cache\o\f2d4a100551712a113b19f0d165e3660\build.exe C:\Users\Rahul\scoop\apps\zig\0.12.0\zig.exe C:\Users\Rahul\Projects\phoenix C:\Users\Rahul\Projects\phoenix\zig-cache C:\Users\Rahul\AppData\Local\zig --seed 0x9aed0779 -Z72ef3d78e5bdb166 run

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.