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
+37
View File
@@ -24,6 +24,43 @@ when ODIN_ARCH == "wasm32" || ODIN_ARCH == "wasm64" {
} }
return dst 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 { } else {
memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr { memset :: proc "c" (ptr: rawptr, val: i32, len: int) -> rawptr {
+8 -6
View File
@@ -19,10 +19,12 @@ windows_trap_type_assertion :: proc "contextless" () -> ! {
windows_trap_array_bounds() windows_trap_array_bounds()
} }
// @private when ODIN_NO_CRT {
// @(link_name="_tls_index") @private
// _tls_index: u32; @(link_name="_tls_index")
_tls_index: u32
// @private @private
// @(link_name="_fltused") @(link_name="_fltused")
// _fltused: i32 = 0x9875; _fltused: i32 = 0x9875
}
+42 -34
View File
@@ -2339,10 +2339,18 @@ matrix_type :: proc() {
m4 := mat4(m2) m4 := mat4(m2)
assert(m4[2, 2] == 1) assert(m4[2, 2] == 1)
assert(m4[3, 3] == 1) assert(m4[3, 3] == 1)
fmt.println("m2", m2) fmt.printf("m2 %#v\n", m2)
fmt.println("m4", m4) fmt.println("m4", m4)
fmt.println("mat2(m4)", mat2(m4)) fmt.println("mat2(m4)", mat2(m4))
assert(mat2(m4) == m2) 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 { // Casting non-square matrices
@@ -2414,39 +2422,39 @@ matrix_type :: proc() {
main :: proc() { main :: proc() {
when true { when true {
the_basics() // the_basics()
control_flow() // control_flow()
named_proc_return_parameters() // named_proc_return_parameters()
explicit_procedure_overloading() // explicit_procedure_overloading()
struct_type() // struct_type()
union_type() // union_type()
using_statement() // using_statement()
implicit_context_system() // implicit_context_system()
parametric_polymorphism() // parametric_polymorphism()
array_programming() // array_programming()
map_type() // map_type()
implicit_selector_expression() // implicit_selector_expression()
partial_switch() // partial_switch()
cstring_example() // cstring_example()
bit_set_type() // bit_set_type()
deferred_procedure_associations() // deferred_procedure_associations()
reflection() // reflection()
quaternions() // quaternions()
unroll_for_statement() // unroll_for_statement()
where_clauses() // where_clauses()
foreign_system() // foreign_system()
ranged_fields_for_array_compound_literals() // ranged_fields_for_array_compound_literals()
deprecated_attribute() // deprecated_attribute()
range_statements_with_multiple_return_values() // range_statements_with_multiple_return_values()
threading_example() // threading_example()
soa_struct_layout() // soa_struct_layout()
constant_literal_expressions() // constant_literal_expressions()
union_maybe() // union_maybe()
explicit_context_definition() // explicit_context_definition()
relative_data_types() // relative_data_types()
or_else_operator() // or_else_operator()
or_return_operator() // or_return_operator()
arbitrary_precision_maths() // arbitrary_precision_maths()
matrix_type() matrix_type()
} }
} }
+1
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_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_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_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); add_global_bool_constant("ODIN_TEST", bc->command_kind == Command_test);
+1 -1
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[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); params->Tuple.variables[2] = alloc_entity_param(nullptr, make_token_ident("lpReserved"), t_rawptr, false, true);
call_cleanup = false; 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"); name = str_lit("mainCRTStartup");
} else if (is_arch_wasm()) { } else if (is_arch_wasm()) {
name = str_lit("_start"); name = str_lit("_start");