mirror of
https://github.com/raysan5/raylib.git
synced 2026-04-25 08:13:58 -04:00
[build.zig] Refactor (#5764)
* Add better structure for build.zig Temporarily disabled the tests * Cleanup build.zig a bit * Fixed zemscripten and cleanup other platforms * Make opengl_version selection more restritive * Add traslateC to build; Renable examples * Add raygui build to build.zig * Deny glfw from android target * Fix android platform includes * Add Zig project example * Add Zig project mention to README * Set right name for web build in zig example * Cleanup last parts of build.zig * Add linking method for build.zig * Fix lshcore link for glfw and rgfw build.zig * Fix weird sdl linkage build.zig * Add zig example to zig project * Fix win32, mac build bugs in build.zig * Rename argument lshcore to shcore build.zig
This commit is contained in:
@ -11,6 +11,11 @@
|
|||||||
.hash = "N-V-__8AALShqgXkvqYU6f__FrA22SMWmi2TXCJjNTO1m8XJ",
|
.hash = "N-V-__8AALShqgXkvqYU6f__FrA22SMWmi2TXCJjNTO1m8XJ",
|
||||||
.lazy = true,
|
.lazy = true,
|
||||||
},
|
},
|
||||||
|
.raygui = .{
|
||||||
|
.url = "git+https://github.com/raysan5/raygui#3b2855842ab578a034f827c38cf8f62c042fc983",
|
||||||
|
.hash = "N-V-__8AAHvybwBw1kyBGn0BW_s1RqIpycNjLf_XbE-fpLUF",
|
||||||
|
.lazy = true,
|
||||||
|
},
|
||||||
.emsdk = .{
|
.emsdk = .{
|
||||||
.url = "git+https://github.com/emscripten-core/emsdk#4.0.9",
|
.url = "git+https://github.com/emscripten-core/emsdk#4.0.9",
|
||||||
.hash = "N-V-__8AAJl1DwBezhYo_VE6f53mPVm00R-Fk28NPW7P14EQ",
|
.hash = "N-V-__8AAJl1DwBezhYo_VE6f53mPVm00R-Fk28NPW7P14EQ",
|
||||||
|
|||||||
@ -13,6 +13,7 @@ IDE | Platform(s) | Source | Example(s)
|
|||||||
[SublimeText](https://www.sublimetext.com/) | Windows, Linux, macOS | ✔️ | ✔️
|
[SublimeText](https://www.sublimetext.com/) | Windows, Linux, macOS | ✔️ | ✔️
|
||||||
[VS2019](https://www.visualstudio.com) | Windows | ✔️ | ✔️
|
[VS2019](https://www.visualstudio.com) | Windows | ✔️ | ✔️
|
||||||
[VSCode](https://code.visualstudio.com/) | Windows, macOS | ❌ | ✔️
|
[VSCode](https://code.visualstudio.com/) | Windows, macOS | ❌ | ✔️
|
||||||
|
[Zig](https://ziglang.org) | Windows, Linux, macOS, Web | ✔️ | ✔️
|
||||||
scripts | Windows, Linux, macOS | ✔️ | ✔️
|
scripts | Windows, Linux, macOS | ✔️ | ✔️
|
||||||
|
|
||||||
*New IDEs config files are welcome!*
|
*New IDEs config files are welcome!*
|
||||||
|
|||||||
84
projects/Zig/README.md
Normal file
84
projects/Zig/README.md
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
# Starting your raylib project with Zig (0.16.0)
|
||||||
|
|
||||||
|
## How to compile and run it
|
||||||
|
|
||||||
|
To compile the project:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
zig build
|
||||||
|
```
|
||||||
|
|
||||||
|
To run the project:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
zig build run
|
||||||
|
```
|
||||||
|
|
||||||
|
## Compile with different optimization
|
||||||
|
|
||||||
|
To change from debug to release build you can do it with the `-Doptimze=` flag.
|
||||||
|
|
||||||
|
```
|
||||||
|
Debug
|
||||||
|
ReleaseSafe
|
||||||
|
ReleaseFast
|
||||||
|
ReleaseSmall
|
||||||
|
```
|
||||||
|
|
||||||
|
## Choose a different platform
|
||||||
|
|
||||||
|
To compile with a different platform you can use the `-Dplatform=` flag.
|
||||||
|
Here all the options:
|
||||||
|
|
||||||
|
```
|
||||||
|
glfw
|
||||||
|
rgfw
|
||||||
|
sdl
|
||||||
|
sdl2
|
||||||
|
sdl3
|
||||||
|
memory
|
||||||
|
win32
|
||||||
|
drm
|
||||||
|
android
|
||||||
|
```
|
||||||
|
|
||||||
|
In this example the platform `sdl` and `sdl2` are not supported
|
||||||
|
|
||||||
|
Important for the android platform you also have to compile for the right target
|
||||||
|
|
||||||
|
## Compile for a different target
|
||||||
|
|
||||||
|
To compile for a different [target](https://ziglang.org/download/0.16.0/release-notes.html#Support-Table) you can use the `-Dtarget=` flag.
|
||||||
|
Not all targets are supported
|
||||||
|
|
||||||
|
## Example: Compile for web and run it
|
||||||
|
|
||||||
|
To compile for the web we use emscripten and you run it like that:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
zig build -Dtarget=wasm32-emscripten
|
||||||
|
```
|
||||||
|
|
||||||
|
To run it we do:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
zig build run -Dtarget=wasm32-emscripten
|
||||||
|
```
|
||||||
|
|
||||||
|
And to make a relase build we do:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
zig build -Dtarget=wasm32-emscripten -Doptimize=ReleaseFast
|
||||||
|
```
|
||||||
|
|
||||||
|
If we want to use rgfw for the web build we could do:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
zig build -Dplatform=rgfw -Dtarget=wasm32-emscripten -Doptimize=ReleaseFast
|
||||||
|
```
|
||||||
|
|
||||||
|
## Compiling the Zig code? Just add `-Dzig` and try out zig ;)
|
||||||
|
|
||||||
|
## More Resources
|
||||||
|
|
||||||
|
See [Zig Build System](https://ziglang.org/learn/build-system/)
|
||||||
87
projects/Zig/build.zig
Normal file
87
projects/Zig/build.zig
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
const std = @import("std");
|
||||||
|
const rl = @import("raylib");
|
||||||
|
|
||||||
|
pub fn build(b: *std.Build) !void {
|
||||||
|
const target = b.standardTargetOptions(.{});
|
||||||
|
const optimize = b.standardOptimizeOption(.{});
|
||||||
|
const platform = b.option(rl.PlatformBackend, "platform", "select the platform") orelse rl.PlatformBackend.glfw;
|
||||||
|
const zig = b.option(bool, "zig", "compile zig code") orelse false;
|
||||||
|
|
||||||
|
const raylib_dep = b.dependency("raylib", .{
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
.platform = platform,
|
||||||
|
});
|
||||||
|
const raylib_artifact = raylib_dep.artifact("raylib");
|
||||||
|
|
||||||
|
if (platform == .sdl3) {
|
||||||
|
if (b.lazyDependency("sdl3", .{ .optimize = optimize, .target = target })) |dep| {
|
||||||
|
raylib_artifact.root_module.linkLibrary(dep.artifact("SDL3"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var exe_mod: *std.Build.Module = undefined;
|
||||||
|
|
||||||
|
if (zig) {
|
||||||
|
exe_mod = b.createModule(.{
|
||||||
|
.root_source_file = b.path("src/core_basic_window.zig"),
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
});
|
||||||
|
exe_mod.addImport("raylib", raylib_dep.module("raylib"));
|
||||||
|
} else {
|
||||||
|
exe_mod = b.createModule(.{
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
.link_libc = true,
|
||||||
|
});
|
||||||
|
exe_mod.addCSourceFile(.{ .file = b.path("src/core_basic_window.c") });
|
||||||
|
exe_mod.linkLibrary(raylib_artifact);
|
||||||
|
}
|
||||||
|
|
||||||
|
const run_step = b.step("run", "Run the app");
|
||||||
|
|
||||||
|
// web exports are completely separate
|
||||||
|
if (target.query.os_tag == .emscripten) {
|
||||||
|
const emsdk = rl.emsdk;
|
||||||
|
const wasm = b.addLibrary(.{
|
||||||
|
.name = "core_basic_window_web",
|
||||||
|
.root_module = exe_mod,
|
||||||
|
});
|
||||||
|
|
||||||
|
const install_dir: std.Build.InstallDir = .{ .custom = "web" };
|
||||||
|
const emcc_flags = emsdk.emccDefaultFlags(b.allocator, .{ .optimize = optimize });
|
||||||
|
const emcc_settings = emsdk.emccDefaultSettings(b.allocator, .{ .optimize = optimize });
|
||||||
|
|
||||||
|
const emcc_step = emsdk.emccStep(b, raylib_artifact, wasm, .{
|
||||||
|
.optimize = optimize,
|
||||||
|
.flags = emcc_flags,
|
||||||
|
.settings = emcc_settings,
|
||||||
|
.shell_file_path = emsdk.shell(raylib_dep),
|
||||||
|
.install_dir = install_dir,
|
||||||
|
});
|
||||||
|
b.getInstallStep().dependOn(emcc_step);
|
||||||
|
|
||||||
|
const html_filename = try std.fmt.allocPrint(b.allocator, "{s}.html", .{wasm.name});
|
||||||
|
const emrun_step = emsdk.emrunStep(
|
||||||
|
b,
|
||||||
|
b.getInstallPath(install_dir, html_filename),
|
||||||
|
&.{},
|
||||||
|
);
|
||||||
|
|
||||||
|
emrun_step.dependOn(emcc_step);
|
||||||
|
run_step.dependOn(emrun_step);
|
||||||
|
} else {
|
||||||
|
const exe = b.addExecutable(.{
|
||||||
|
.name = "core_basic_window",
|
||||||
|
.root_module = exe_mod,
|
||||||
|
.use_lld = target.result.os.tag == .windows,
|
||||||
|
});
|
||||||
|
b.installArtifact(exe);
|
||||||
|
|
||||||
|
const run_cmd = b.addRunArtifact(exe);
|
||||||
|
run_cmd.step.dependOn(b.getInstallStep());
|
||||||
|
|
||||||
|
run_step.dependOn(&run_cmd.step);
|
||||||
|
}
|
||||||
|
}
|
||||||
23
projects/Zig/build.zig.zon
Normal file
23
projects/Zig/build.zig.zon
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
.{
|
||||||
|
.name = .example,
|
||||||
|
.version = "0.0.1",
|
||||||
|
.minimum_zig_version = "0.16.0",
|
||||||
|
.paths = .{""},
|
||||||
|
|
||||||
|
.dependencies = .{
|
||||||
|
.raylib = .{
|
||||||
|
.path = "../../",
|
||||||
|
},
|
||||||
|
.emsdk = .{
|
||||||
|
.url = "git+https://github.com/emscripten-core/emsdk?ref=4.0.9#3bcf1dcd01f040f370e10fe673a092d9ed79ebb5",
|
||||||
|
.hash = "N-V-__8AAJl1DwBezhYo_VE6f53mPVm00R-Fk28NPW7P14EQ",
|
||||||
|
},
|
||||||
|
.sdl3 = .{
|
||||||
|
.url = "git+https://codeberg.org/7Games/zig-sdl3?ref=master#6d418ef3ddae99098414a96a88bf5e5fdb41785e",
|
||||||
|
.hash = "sdl3-0.1.9-NmT1QwiEJwByePqkmArtppCHQn8Y7kiSWcncT_Mop8ie",
|
||||||
|
.lazy = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
.fingerprint = 0x6eec9b9f1a9d7aca,
|
||||||
|
}
|
||||||
83
projects/Zig/src/core_basic_window.c
Normal file
83
projects/Zig/src/core_basic_window.c
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/*******************************************************************************************
|
||||||
|
*
|
||||||
|
* raylib [core] example - Basic window (adapted for HTML5 platform)
|
||||||
|
*
|
||||||
|
* This example is prepared to compile for PLATFORM_WEB and PLATFORM_DESKTOP
|
||||||
|
* As you will notice, code structure is slightly different to the other examples...
|
||||||
|
* To compile it for PLATFORM_WEB just uncomment #define PLATFORM_WEB at beginning
|
||||||
|
*
|
||||||
|
* This example has been created using raylib 1.3 (www.raylib.com)
|
||||||
|
* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||||
|
*
|
||||||
|
********************************************************************************************/
|
||||||
|
|
||||||
|
#include "raylib.h"
|
||||||
|
|
||||||
|
#if defined(PLATFORM_WEB)
|
||||||
|
#include <emscripten/emscripten.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Global Variables Definition
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
int screenWidth = 800;
|
||||||
|
int screenHeight = 450;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Module Functions Declaration
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
void UpdateDrawFrame(void); // Update and Draw one frame
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Program main entry point
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
// Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window");
|
||||||
|
|
||||||
|
#if defined(PLATFORM_WEB)
|
||||||
|
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
#else
|
||||||
|
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Main game loop
|
||||||
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||||
|
{
|
||||||
|
UpdateDrawFrame();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
CloseWindow(); // Close window and OpenGL context
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Module Functions Definition
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
void UpdateDrawFrame(void)
|
||||||
|
{
|
||||||
|
// Update
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// TODO: Update your variables here
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
BeginDrawing();
|
||||||
|
|
||||||
|
ClearBackground(RAYWHITE);
|
||||||
|
|
||||||
|
DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
|
||||||
|
|
||||||
|
EndDrawing();
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
}
|
||||||
73
projects/Zig/src/core_basic_window.zig
Normal file
73
projects/Zig/src/core_basic_window.zig
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
//*******************************************************************************************
|
||||||
|
//*
|
||||||
|
//* raylib [core] example - Basic window (adapted for HTML5 platform)
|
||||||
|
//*
|
||||||
|
//* This example is prepared to compile for PLATFORM_WEB and PLATFORM_DESKTOP
|
||||||
|
//* As you will notice, code structure is slightly different to the other examples...
|
||||||
|
//* To compile it for PLATFORM_WEB just uncomment #define PLATFORM_WEB at beginning
|
||||||
|
//*
|
||||||
|
//* This example has been created using raylib 6.0 (www.raylib.com)
|
||||||
|
//* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
|
||||||
|
//*
|
||||||
|
//* Copyright (c) 2015 Ramon Santamaria (@raysan5)
|
||||||
|
//* Rewrite in Zig by HaxSam (@haxsam)
|
||||||
|
//*
|
||||||
|
//*******************************************************************************************
|
||||||
|
|
||||||
|
const rl = @import("raylib");
|
||||||
|
const std = @import("std");
|
||||||
|
const builtin = @import("builtin");
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Global Variables Definition
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
const screenWidth: c_int = 800;
|
||||||
|
const screenHeight: c_int = 450;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Program main entry point
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
pub fn main() void {
|
||||||
|
// Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
rl.InitWindow(screenWidth, screenHeight, "raylib [core] example - basic window");
|
||||||
|
|
||||||
|
if (builtin.os.tag == .emscripten) {
|
||||||
|
std.os.emscripten.emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
|
||||||
|
} else {
|
||||||
|
rl.SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Main game loop
|
||||||
|
while (!rl.WindowShouldClose()) // Detect window close button or ESC key
|
||||||
|
{
|
||||||
|
UpdateDrawFrame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// De-Initialization
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
rl.CloseWindow(); // Close window and OpenGL context
|
||||||
|
//--------------------------------------------------------------------------------------
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// Module Functions Definition
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
fn UpdateDrawFrame() callconv(.c) void {
|
||||||
|
// Update
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
// TODO: Update your variables here
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Draw
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
rl.BeginDrawing();
|
||||||
|
|
||||||
|
rl.ClearBackground(rl.RAYWHITE);
|
||||||
|
|
||||||
|
rl.DrawText("Congrats! You created your first window!", 190, 200, 20, rl.LIGHTGRAY);
|
||||||
|
|
||||||
|
rl.EndDrawing();
|
||||||
|
//----------------------------------------------------------------------------------
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user