mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 14:48:47 +00:00
Add @(extra_linker_flags=<string>)
This commit is contained in:
@@ -4447,6 +4447,14 @@ gb_internal DECL_ATTRIBUTE_PROC(foreign_import_decl_attribute) {
|
|||||||
ac->foreign_import_priority_index = exact_value_to_i64(ev);
|
ac->foreign_import_priority_index = exact_value_to_i64(ev);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
} else if (name == "extra_linker_flags") {
|
||||||
|
ExactValue ev = check_decl_attribute_value(c, value);
|
||||||
|
if (ev.kind != ExactValue_String) {
|
||||||
|
error(elem, "Expected a string value for '%.*s'", LIT(name));
|
||||||
|
} else {
|
||||||
|
ac->extra_linker_flags = ev.value_string;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -4506,6 +4514,10 @@ gb_internal void check_add_foreign_import_decl(CheckerContext *ctx, Ast *decl) {
|
|||||||
if (ac.foreign_import_priority_index != 0) {
|
if (ac.foreign_import_priority_index != 0) {
|
||||||
e->LibraryName.priority_index = ac.foreign_import_priority_index;
|
e->LibraryName.priority_index = ac.foreign_import_priority_index;
|
||||||
}
|
}
|
||||||
|
String extra_linker_flags = string_trim_whitespace(ac.extra_linker_flags);
|
||||||
|
if (extra_linker_flags.len != 0) {
|
||||||
|
e->LibraryName.extra_linker_flags = extra_linker_flags;
|
||||||
|
}
|
||||||
|
|
||||||
if (has_asm_extension(fullpath)) {
|
if (has_asm_extension(fullpath)) {
|
||||||
if (build_context.metrics.arch != TargetArch_amd64 ||
|
if (build_context.metrics.arch != TargetArch_amd64 ||
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ struct AttributeContext {
|
|||||||
bool set_cold : 1;
|
bool set_cold : 1;
|
||||||
u32 optimization_mode; // ProcedureOptimizationMode
|
u32 optimization_mode; // ProcedureOptimizationMode
|
||||||
i64 foreign_import_priority_index;
|
i64 foreign_import_priority_index;
|
||||||
|
String extra_linker_flags;
|
||||||
|
|
||||||
String objc_class;
|
String objc_class;
|
||||||
String objc_name;
|
String objc_name;
|
||||||
|
|||||||
@@ -259,6 +259,7 @@ struct Entity {
|
|||||||
Slice<String> paths;
|
Slice<String> paths;
|
||||||
String name;
|
String name;
|
||||||
i64 priority_index;
|
i64 priority_index;
|
||||||
|
String extra_linker_flags;
|
||||||
} LibraryName;
|
} LibraryName;
|
||||||
i32 Nil;
|
i32 Nil;
|
||||||
struct {
|
struct {
|
||||||
|
|||||||
@@ -278,6 +278,13 @@ gb_internal i32 linker_stage(lbGenerator *gen) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (Entity *e : gen->foreign_libraries) {
|
||||||
|
GB_ASSERT(e->kind == Entity_LibraryName);
|
||||||
|
if (e->LibraryName.extra_linker_flags.len != 0) {
|
||||||
|
lib_str = gb_string_append_fmt(lib_str, " %.*s", LIT(e->LibraryName.extra_linker_flags));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (build_context.build_mode == BuildMode_DynamicLibrary) {
|
if (build_context.build_mode == BuildMode_DynamicLibrary) {
|
||||||
link_settings = gb_string_append_fmt(link_settings, " /DLL");
|
link_settings = gb_string_append_fmt(link_settings, " /DLL");
|
||||||
} else {
|
} else {
|
||||||
@@ -449,6 +456,12 @@ gb_internal i32 linker_stage(lbGenerator *gen) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (Entity *e : gen->foreign_libraries) {
|
||||||
|
GB_ASSERT(e->kind == Entity_LibraryName);
|
||||||
|
if (e->LibraryName.extra_linker_flags.len != 0) {
|
||||||
|
lib_str = gb_string_append_fmt(lib_str, " %.*s", LIT(e->LibraryName.extra_linker_flags));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gbString object_files = gb_string_make(heap_allocator(), "");
|
gbString object_files = gb_string_make(heap_allocator(), "");
|
||||||
defer (gb_string_free(object_files));
|
defer (gb_string_free(object_files));
|
||||||
|
|||||||
Vendored
+1
-1
@@ -93,8 +93,8 @@ MAX_TEXT_BUFFER_LENGTH :: #config(RAYLIB_MAX_TEXT_BUFFER_LENGTH, 1024)
|
|||||||
#assert(size_of(rune) == size_of(c.int))
|
#assert(size_of(rune) == size_of(c.int))
|
||||||
|
|
||||||
when ODIN_OS == .Windows {
|
when ODIN_OS == .Windows {
|
||||||
|
@(extra_linker_flags="/NODEFAULTLIB:libcmt")
|
||||||
foreign import lib {
|
foreign import lib {
|
||||||
"system:msvcrt.lib",
|
|
||||||
"windows/raylib.lib",
|
"windows/raylib.lib",
|
||||||
"system:Winmm.lib",
|
"system:Winmm.lib",
|
||||||
"system:Gdi32.lib",
|
"system:Gdi32.lib",
|
||||||
|
|||||||
Reference in New Issue
Block a user