use raylib in zig
This commit is contained in:
		
							parent
							
								
									83aa7b8e66
								
							
						
					
					
						commit
						bad90f12c5
					
				
					 3 changed files with 105 additions and 0 deletions
				
			
		|  | @ -1,4 +1,5 @@ | ||||||
| const std = @import("std"); | const std = @import("std"); | ||||||
|  | const raylib = @import("build_raylib.zig"); | ||||||
| 
 | 
 | ||||||
| pub fn build(b: *std.build.Builder) void { | pub fn build(b: *std.build.Builder) void { | ||||||
|     // Standard target options allows the person running `zig build` to choose |     // Standard target options allows the person running `zig build` to choose | ||||||
|  | @ -13,6 +14,11 @@ pub fn build(b: *std.build.Builder) void { | ||||||
| 
 | 
 | ||||||
|     const exe = b.addExecutable("doggo", "src/main.zig"); |     const exe = b.addExecutable("doggo", "src/main.zig"); | ||||||
|     exe.setTarget(target); |     exe.setTarget(target); | ||||||
|  |      | ||||||
|  |     const ray = raylib.Pkg("./3rdparty/raylib/src").addRaylib(b, exe.target); | ||||||
|  |     exe.linkLibrary(ray); | ||||||
|  |     exe.addIncludeDir("./3rdparty/raylib/src"); | ||||||
|  | 
 | ||||||
|     exe.setBuildMode(mode); |     exe.setBuildMode(mode); | ||||||
|     exe.install(); |     exe.install(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										83
									
								
								build_raylib.zig
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								build_raylib.zig
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,83 @@ | ||||||
|  | const std = @import("std"); | ||||||
|  | 
 | ||||||
|  | pub fn Pkg(srcdir: []const u8) type { | ||||||
|  |     return struct { | ||||||
|  |         pub fn addRaylib(b: *std.build.Builder, target: std.zig.CrossTarget) *std.build.LibExeObjStep { | ||||||
|  |             // Standard release options allow the person running `zig build` to select | ||||||
|  |             // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. | ||||||
|  |             const mode = b.standardReleaseOptions(); | ||||||
|  | 
 | ||||||
|  |             const raylib_flags = &[_][]const u8{ | ||||||
|  |                 "-std=gnu99", | ||||||
|  |                 "-DPLATFORM_DESKTOP", | ||||||
|  |                 "-DGL_SILENCE_DEPRECATION=199309L", | ||||||
|  |                 "-fno-sanitize=undefined", // https://github.com/raysan5/raylib/issues/1891 | ||||||
|  |             }; | ||||||
|  | 
 | ||||||
|  |             const raylib = b.addStaticLibrary("raylib", srcdir ++ "/raylib.h"); | ||||||
|  |             raylib.setTarget(target); | ||||||
|  |             raylib.setBuildMode(mode); | ||||||
|  |             raylib.linkLibC(); | ||||||
|  | 
 | ||||||
|  |             raylib.addIncludeDir(srcdir ++ "/external/glfw/include"); | ||||||
|  | 
 | ||||||
|  |             raylib.addCSourceFiles(&.{ | ||||||
|  |                 srcdir ++ "/raudio.c", | ||||||
|  |                 srcdir ++ "/rcore.c", | ||||||
|  |                 srcdir ++ "/rmodels.c", | ||||||
|  |                 srcdir ++ "/rshapes.c", | ||||||
|  |                 srcdir ++ "/rtext.c", | ||||||
|  |                 srcdir ++ "/rtextures.c", | ||||||
|  |                 srcdir ++ "/utils.c", | ||||||
|  |             }, raylib_flags); | ||||||
|  | 
 | ||||||
|  |             switch (raylib.target.toTarget().os.tag) { | ||||||
|  |                 .windows => { | ||||||
|  |                     raylib.addCSourceFiles(&.{srcdir ++ "/rglfw.c"}, raylib_flags); | ||||||
|  |                     raylib.linkSystemLibrary("winmm"); | ||||||
|  |                     raylib.linkSystemLibrary("gdi32"); | ||||||
|  |                     raylib.linkSystemLibrary("opengl32"); | ||||||
|  |                     raylib.addIncludeDir("external/glfw/deps/mingw"); | ||||||
|  |                 }, | ||||||
|  |                 .linux => { | ||||||
|  |                     raylib.addCSourceFiles(&.{srcdir ++ "/rglfw.c"}, raylib_flags); | ||||||
|  |                     raylib.linkSystemLibrary("GL"); | ||||||
|  |                     raylib.linkSystemLibrary("rt"); | ||||||
|  |                     raylib.linkSystemLibrary("dl"); | ||||||
|  |                     raylib.linkSystemLibrary("m"); | ||||||
|  |                     raylib.linkSystemLibrary("X11"); | ||||||
|  |                 }, | ||||||
|  |                 .macos => { | ||||||
|  |                     // On macos rglfw.c include Objective-C files. | ||||||
|  |                     const raylib_flags_extra_macos = &[_][]const u8{ | ||||||
|  |                         "-ObjC", | ||||||
|  |                     }; | ||||||
|  |                     raylib.addCSourceFiles( | ||||||
|  |                         &.{srcdir ++ "/rglfw.c"}, | ||||||
|  |                         raylib_flags ++ raylib_flags_extra_macos, | ||||||
|  |                     ); | ||||||
|  |                     raylib.linkFramework("Foundation"); | ||||||
|  |                 }, | ||||||
|  |                 else => { | ||||||
|  |                     @panic("Unsupported OS"); | ||||||
|  |                 }, | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             raylib.setOutputDir("./"); | ||||||
|  |             raylib.install(); | ||||||
|  |             return raylib; | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const lib = Pkg("./3rdparty/raylib/src"); | ||||||
|  | 
 | ||||||
|  | pub fn build(b: *std.build.Builder) void { | ||||||
|  |     // Standard target options allows the person running `zig build` to choose | ||||||
|  |     // what target to build for. Here we do not override the defaults, which | ||||||
|  |     // means any target is allowed, and the default is native. Other options | ||||||
|  |     // for restricting supported target set are available. | ||||||
|  |     const target = b.standardTargetOptions(.{}); | ||||||
|  | 
 | ||||||
|  |     _ = lib.addRaylib(b, target); | ||||||
|  | } | ||||||
							
								
								
									
										16
									
								
								src/main.zig
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								src/main.zig
									
										
									
									
									
								
							|  | @ -1,7 +1,23 @@ | ||||||
| const std = @import("std"); | const std = @import("std"); | ||||||
|  | const ray = @cImport({ | ||||||
|  |     @cInclude("raylib.h"); | ||||||
|  | }); | ||||||
| 
 | 
 | ||||||
| pub fn main() anyerror!void { | pub fn main() anyerror!void { | ||||||
|     std.log.info("All your codebase are belong to us.", .{}); |     std.log.info("All your codebase are belong to us.", .{}); | ||||||
|  | 
 | ||||||
|  |     ray.InitWindow(800, 450, "ray [core] example - basic window"); | ||||||
|  |     defer ray.CloseWindow(); | ||||||
|  | 
 | ||||||
|  |     while (!ray.WindowShouldClose()) | ||||||
|  |     { | ||||||
|  |         ray.BeginDrawing(); | ||||||
|  |         defer ray.EndDrawing(); | ||||||
|  | 
 | ||||||
|  |         ray.ClearBackground(ray.RAYWHITE); | ||||||
|  |         ray.DrawText("Congrats! You created your first window!", 190, 200, 20, ray.LIGHTGRAY); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| test "basic test" { | test "basic test" { | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue