Add ODIN_NO_CRT global constant

This commit is contained in:
gingerBill
2021-11-04 00:50:28 +00:00
parent 3d06dddb72
commit 9ab71ca0da
5 changed files with 89 additions and 41 deletions

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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()
}
}

View File

@@ -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);

View File

@@ -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");