orca: implement core:time and core:log

This commit is contained in:
Laytan Laats
2024-08-17 02:09:52 +02:00
parent 574dc5efe6
commit caef37bc18
5 changed files with 53 additions and 41 deletions

View File

@@ -1,4 +1,5 @@
//+build !freestanding
//+build !orca
package log
import "core:encoding/ansi"

View File

@@ -2,8 +2,6 @@
package orca
import "core:fmt"
////////////////////////////////////////////////////////////////////////////////
// Helpers for logging, asserting and aborting.
////////////////////////////////////////////////////////////////////////////////
@@ -18,16 +16,6 @@ log_error :: proc "contextless" (msg: cstring, loc := #caller_location) {
)
}
log_errorf :: proc(format: string, args: ..any, loc := #caller_location) {
log_ext(
.ERROR,
cstring(raw_data(loc.procedure)),
cstring(raw_data(loc.file_path)),
loc.line,
fmt.ctprintf(format, ..args),
)
}
log_warning :: proc "contextless" (msg: cstring, loc := #caller_location) {
log_ext(
.WARNING,
@@ -38,16 +26,6 @@ log_warning :: proc "contextless" (msg: cstring, loc := #caller_location) {
)
}
log_warningf :: proc(format: string, args: ..any, loc := #caller_location) {
log_ext(
.WARNING,
cstring(raw_data(loc.procedure)),
cstring(raw_data(loc.file_path)),
loc.line,
fmt.ctprintf(format, ..args),
)
}
log_info :: proc "contextless" (msg: cstring, loc := #caller_location) {
log_ext(
.INFO,
@@ -58,16 +36,6 @@ log_info :: proc "contextless" (msg: cstring, loc := #caller_location) {
)
}
log_infof :: proc(format: string, args: ..any, loc := #caller_location) {
log_ext(
.INFO,
cstring(raw_data(loc.procedure)),
cstring(raw_data(loc.file_path)),
loc.line,
fmt.ctprintf(format, ..args),
)
}
abort :: proc "contextless" (msg: cstring, loc := #caller_location) {
abort_ext(
cstring(raw_data(loc.procedure)),
@@ -77,15 +45,6 @@ abort :: proc "contextless" (msg: cstring, loc := #caller_location) {
)
}
abortf :: proc(format: string, args: ..any, loc := #caller_location) {
abort_ext(
cstring(raw_data(loc.procedure)),
cstring(raw_data(loc.file_path)),
loc.line,
fmt.ctprintf(format, ..args),
)
}
////////////////////////////////////////////////////////////////////////////////
// Types and helpers for doubly-linked lists.
////////////////////////////////////////////////////////////////////////////////

22
core/sys/orca/odin.odin Normal file
View File

@@ -0,0 +1,22 @@
// File contains Odin specific helpers.
package orca
import "base:runtime"
create_odin_logger :: proc(lowest := runtime.Logger_Level.Debug, ident := "") -> runtime.Logger {
return runtime.Logger{odin_logger_proc, nil, lowest, {}}
}
odin_logger_proc :: proc(logger_data: rawptr, level: runtime.Logger_Level, text: string, options: runtime.Logger_Options, location := #caller_location) {
cbuf := make([]byte, len(text)+1, context.temp_allocator)
copy(cbuf, text)
ctext := cstring(raw_data(cbuf))
switch level {
case .Debug, .Info: log_info(ctext, location)
case .Warning: log_warning(ctext, location)
case: fallthrough
case .Error, .Fatal: log_error(ctext, location)
}
}

29
core/time/time_orca.odin Normal file
View File

@@ -0,0 +1,29 @@
//+private
//+build orca
package time
import "base:intrinsics"
import "core:sys/orca"
_IS_SUPPORTED :: true
_now :: proc "contextless" () -> Time {
CLK_JAN_1970 :: 2208988800
secs := orca.clock_time(.DATE)
return Time{i64((secs - CLK_JAN_1970) * 1e9)}
}
_sleep :: proc "contextless" (d: Duration) {
// NOTE: no way to sleep afaict.
if d > 0 {
orca.log_warning("core:time 'sleep' is unimplemented for orca")
}
}
_tick_now :: proc "contextless" () -> Tick {
secs := orca.clock_time(.MONOTONIC)
return Tick{i64(secs * 1e9)}
}
_yield :: proc "contextless" () {}

View File

@@ -8,6 +8,7 @@
//+build !darwin
//+build !wasi
//+build !windows
//+build !orca
package time
_IS_SUPPORTED :: false