Merge pull request #3238 from laytan/libc-free-raylib-and-rectpack

makes raylib and stb_rect_pack free of libc
This commit is contained in:
gingerBill
2024-03-06 14:11:41 +00:00
committed by GitHub
6 changed files with 42 additions and 21 deletions
+10
View File
@@ -104,3 +104,13 @@ NULL :: rawptr(uintptr(0))
NDEBUG :: !ODIN_DEBUG NDEBUG :: !ODIN_DEBUG
CHAR_BIT :: 8 CHAR_BIT :: 8
// Since there are no types in C with an alignment larger than that of
// max_align_t, which cannot be larger than sizeof(long double) as any other
// exposed type wouldn't be valid C, the maximum alignment possible in a
// strictly conformant C implementation is 16 on the platforms we care about.
// The choice of 4096 bytes for storage of this type is more than enough on all
// relevant platforms.
va_list :: struct #align(16) {
_: [4096]u8,
}
+3 -9
View File
@@ -4,6 +4,8 @@ package libc
import "base:intrinsics" import "base:intrinsics"
import "core:c"
@(private="file") @(private="file")
@(default_calling_convention="none") @(default_calling_convention="none")
foreign _ { foreign _ {
@@ -12,15 +14,7 @@ foreign _ {
@(link_name="llvm.va_copy") _va_copy :: proc(dst, src: ^i8) --- @(link_name="llvm.va_copy") _va_copy :: proc(dst, src: ^i8) ---
} }
// Since there are no types in C with an alignment larger than that of va_list :: c.va_list
// max_align_t, which cannot be larger than sizeof(long double) as any other
// exposed type wouldn't be valid C, the maximum alignment possible in a
// strictly conformant C implementation is 16 on the platforms we care about.
// The choice of 4096 bytes for storage of this type is more than enough on all
// relevant platforms.
va_list :: struct #align(16) {
_: [4096]u8,
}
va_start :: #force_inline proc(ap: ^va_list, _: any) { va_start :: #force_inline proc(ap: ^va_list, _: any) {
_va_start(cast(^i8)ap) _va_start(cast(^i8)ap)
+5 -2
View File
@@ -1,6 +1,6 @@
package raylib package raylib
import c "core:c/libc" import "core:c"
RAYGUI_SHARED :: #config(RAYGUI_SHARED, false) RAYGUI_SHARED :: #config(RAYGUI_SHARED, false)
@@ -240,7 +240,10 @@ SCROLLBAR_RIGHT_SIDE :: 1
@(default_calling_convention="c") @(default_calling_convention="c")
foreign lib { foreign lib {
@(link_name="raylib_version") version: cstring // WASM does not have foreign variable declarations.
when ODIN_ARCH != .wasm32 && ODIN_ARCH != .wasm64p32 {
@(link_name="raylib_version") version: cstring
}
// Global gui state control functions // Global gui state control functions
GuiEnable :: proc() --- // Enable gui controls (global state) GuiEnable :: proc() --- // Enable gui controls (global state)
+3 -5
View File
@@ -81,7 +81,7 @@ Package vendor:raylib implements bindings for version 5.0 of the raylib library
*/ */
package raylib package raylib
import c "core:c/libc" import "core:c"
import "core:fmt" import "core:fmt"
import "core:mem" import "core:mem"
import "core:strings" import "core:strings"
@@ -925,13 +925,11 @@ NPatchLayout :: enum c.int {
THREE_PATCH_HORIZONTAL, // Npatch layout: 3x1 tiles THREE_PATCH_HORIZONTAL, // Npatch layout: 3x1 tiles
} }
// Callbacks to hook some internal functions // Callbacks to hook some internal functions
// WARNING: This callbacks are intended for advance users // WARNING: This callbacks are intended for advance users
TraceLogCallback :: #type proc "c" (logLevel: TraceLogLevel, text: cstring, args: c.va_list) // Logging: Redirect trace log messages TraceLogCallback :: #type proc "c" (logLevel: TraceLogLevel, text: cstring, args: c.va_list) // Logging: Redirect trace log messages
LoadFileDataCallback :: #type proc "c"(fileName: cstring, dataSize: ^c.int) -> [^]u8 // FileIO: Load binary data LoadFileDataCallback :: #type proc "c"(fileName: cstring, dataSize: ^c.int) -> [^]u8 // FileIO: Load binary data
SaveFileDataCallback :: #type proc "c" (fileName: cstring, data: rawptr, dataSize: c.int) -> bool // FileIO: Save binary data SaveFileDataCallback :: #type proc "c" (fileName: cstring, data: rawptr, dataSize: c.int) -> bool // FileIO: Save binary data
LoadFileTextCallback :: #type proc "c" (fileName: cstring) -> [^]u8 // FileIO: Load text data LoadFileTextCallback :: #type proc "c" (fileName: cstring) -> [^]u8 // FileIO: Load text data
SaveFileTextCallback :: #type proc "c" (fileName: cstring, text: cstring) -> bool // FileIO: Save text data SaveFileTextCallback :: #type proc "c" (fileName: cstring, text: cstring) -> bool // FileIO: Save text data
+18 -2
View File
@@ -1,6 +1,5 @@
package raylib package raylib
import c "core:c/libc"
import "core:math" import "core:math"
import "core:math/linalg" import "core:math/linalg"
@@ -45,7 +44,7 @@ Wrap :: proc "c" (value: f32, min, max: f32) -> f32 {
// Check whether two given floats are almost equal // Check whether two given floats are almost equal
@(require_results) @(require_results)
FloatEquals :: proc "c" (x, y: f32) -> bool { FloatEquals :: proc "c" (x, y: f32) -> bool {
return abs(x - y) <= EPSILON*c.fmaxf(1.0, c.fmaxf(abs(x), abs(y))) return abs(x - y) <= EPSILON*fmaxf(1.0, fmaxf(abs(x), abs(y)))
} }
@@ -816,3 +815,20 @@ QuaternionEquals :: proc "c" (p, q: Quaternion) -> bool {
FloatEquals(p.z, q.z) && FloatEquals(p.z, q.z) &&
FloatEquals(p.w, q.w) FloatEquals(p.w, q.w)
} }
@(private, require_results)
fmaxf :: proc "contextless" (x, y: f32) -> f32 {
if math.is_nan(x) {
return y
}
if math.is_nan(y) {
return x
}
if math.signbit(x) != math.signbit(y) {
return y if math.signbit(x) else x
}
return y if x < y else x
}
+1 -1
View File
@@ -1,6 +1,6 @@
package stb_rect_pack package stb_rect_pack
import c "core:c/libc" import "core:c"
#assert(size_of(b32) == size_of(c.int)) #assert(size_of(b32) == size_of(c.int))