mirror of
https://github.com/odin-lang/Odin.git
synced 2026-02-25 12:24:57 +00:00
Add ODIN_NO_CRT global constant
This commit is contained in:
@@ -24,6 +24,43 @@ when ODIN_ARCH == "wasm32" || ODIN_ARCH == "wasm64" {
|
||||
}
|
||||
return dst
|
||||
|
||||
}
|
||||
} else when ODIN_NO_CRT {
|
||||
@(link_name="memset")
|
||||
memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr {
|
||||
if ptr != nil && len != 0 {
|
||||
b := byte(val)
|
||||
p := ([^]byte)(ptr)
|
||||
for i in 0..<len {
|
||||
p[i] = b
|
||||
}
|
||||
}
|
||||
return ptr
|
||||
}
|
||||
|
||||
@(link_name="memmove")
|
||||
memmove :: proc "c" (dst, src: rawptr, len: int) -> rawptr {
|
||||
if dst != src {
|
||||
d, s := ([^]byte)(dst), ([^]byte)(src)
|
||||
d_end, s_end := d[len:], s[len:]
|
||||
for i := len-1; i >= 0; i -= 1 {
|
||||
d[i] = s[i]
|
||||
}
|
||||
}
|
||||
return dst
|
||||
|
||||
}
|
||||
@(link_name="memcpy")
|
||||
memcpy :: proc "c" (dst, src: rawptr, len: int) -> rawptr {
|
||||
if dst != src {
|
||||
d, s := ([^]byte)(dst), ([^]byte)(src)
|
||||
d_end, s_end := d[len:], s[len:]
|
||||
for i := len-1; i >= 0; i -= 1 {
|
||||
d[i] = s[i]
|
||||
}
|
||||
}
|
||||
return dst
|
||||
|
||||
}
|
||||
} else {
|
||||
memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr {
|
||||
|
||||
@@ -19,10 +19,12 @@ windows_trap_type_assertion :: proc "contextless" () -> ! {
|
||||
windows_trap_array_bounds()
|
||||
}
|
||||
|
||||
// @private
|
||||
// @(link_name="_tls_index")
|
||||
// _tls_index: u32;
|
||||
when ODIN_NO_CRT {
|
||||
@private
|
||||
@(link_name="_tls_index")
|
||||
_tls_index: u32
|
||||
|
||||
// @private
|
||||
// @(link_name="_fltused")
|
||||
// _fltused: i32 = 0x9875;
|
||||
@private
|
||||
@(link_name="_fltused")
|
||||
_fltused: i32 = 0x9875
|
||||
}
|
||||
@@ -2339,10 +2339,18 @@ matrix_type :: proc() {
|
||||
m4 := mat4(m2)
|
||||
assert(m4[2, 2] == 1)
|
||||
assert(m4[3, 3] == 1)
|
||||
fmt.println("m2", m2)
|
||||
fmt.printf("m2 %#v\n", m2)
|
||||
fmt.println("m4", m4)
|
||||
fmt.println("mat2(m4)", mat2(m4))
|
||||
assert(mat2(m4) == m2)
|
||||
|
||||
b4 := mat4{
|
||||
1, 2, 0, 0,
|
||||
3, 4, 0, 0,
|
||||
5, 0, 6, 0,
|
||||
0, 7, 0, 8,
|
||||
}
|
||||
fmt.println("b4", matrix_flatten(b4))
|
||||
}
|
||||
|
||||
{ // Casting non-square matrices
|
||||
@@ -2414,39 +2422,39 @@ matrix_type :: proc() {
|
||||
|
||||
main :: proc() {
|
||||
when true {
|
||||
the_basics()
|
||||
control_flow()
|
||||
named_proc_return_parameters()
|
||||
explicit_procedure_overloading()
|
||||
struct_type()
|
||||
union_type()
|
||||
using_statement()
|
||||
implicit_context_system()
|
||||
parametric_polymorphism()
|
||||
array_programming()
|
||||
map_type()
|
||||
implicit_selector_expression()
|
||||
partial_switch()
|
||||
cstring_example()
|
||||
bit_set_type()
|
||||
deferred_procedure_associations()
|
||||
reflection()
|
||||
quaternions()
|
||||
unroll_for_statement()
|
||||
where_clauses()
|
||||
foreign_system()
|
||||
ranged_fields_for_array_compound_literals()
|
||||
deprecated_attribute()
|
||||
range_statements_with_multiple_return_values()
|
||||
threading_example()
|
||||
soa_struct_layout()
|
||||
constant_literal_expressions()
|
||||
union_maybe()
|
||||
explicit_context_definition()
|
||||
relative_data_types()
|
||||
or_else_operator()
|
||||
or_return_operator()
|
||||
arbitrary_precision_maths()
|
||||
// the_basics()
|
||||
// control_flow()
|
||||
// named_proc_return_parameters()
|
||||
// explicit_procedure_overloading()
|
||||
// struct_type()
|
||||
// union_type()
|
||||
// using_statement()
|
||||
// implicit_context_system()
|
||||
// parametric_polymorphism()
|
||||
// array_programming()
|
||||
// map_type()
|
||||
// implicit_selector_expression()
|
||||
// partial_switch()
|
||||
// cstring_example()
|
||||
// bit_set_type()
|
||||
// deferred_procedure_associations()
|
||||
// reflection()
|
||||
// quaternions()
|
||||
// unroll_for_statement()
|
||||
// where_clauses()
|
||||
// foreign_system()
|
||||
// ranged_fields_for_array_compound_literals()
|
||||
// deprecated_attribute()
|
||||
// range_statements_with_multiple_return_values()
|
||||
// threading_example()
|
||||
// soa_struct_layout()
|
||||
// constant_literal_expressions()
|
||||
// union_maybe()
|
||||
// explicit_context_definition()
|
||||
// relative_data_types()
|
||||
// or_else_operator()
|
||||
// or_return_operator()
|
||||
// arbitrary_precision_maths()
|
||||
matrix_type()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -782,6 +782,7 @@ void init_universal(void) {
|
||||
add_global_bool_constant("ODIN_DISABLE_ASSERT", bc->ODIN_DISABLE_ASSERT);
|
||||
add_global_bool_constant("ODIN_DEFAULT_TO_NIL_ALLOCATOR", bc->ODIN_DEFAULT_TO_NIL_ALLOCATOR);
|
||||
add_global_bool_constant("ODIN_NO_DYNAMIC_LITERALS", bc->no_dynamic_literals);
|
||||
add_global_bool_constant("ODIN_NO_CRT", bc->no_crt);
|
||||
add_global_bool_constant("ODIN_TEST", bc->command_kind == Command_test);
|
||||
|
||||
|
||||
|
||||
@@ -785,7 +785,7 @@ lbProcedure *lb_create_main_procedure(lbModule *m, lbProcedure *startup_runtime)
|
||||
params->Tuple.variables[1] = alloc_entity_param(nullptr, make_token_ident("fdwReason"), t_u32, false, true);
|
||||
params->Tuple.variables[2] = alloc_entity_param(nullptr, make_token_ident("lpReserved"), t_rawptr, false, true);
|
||||
call_cleanup = false;
|
||||
} else if (build_context.metrics.os == TargetOs_windows && build_context.metrics.arch == TargetArch_386) {
|
||||
} else if (build_context.metrics.os == TargetOs_windows && (build_context.metrics.arch == TargetArch_386 || build_context.no_crt)) {
|
||||
name = str_lit("mainCRTStartup");
|
||||
} else if (is_arch_wasm()) {
|
||||
name = str_lit("_start");
|
||||
|
||||
Reference in New Issue
Block a user