aboutsummaryrefslogtreecommitdiff
path: root/src/checker.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-03-21 13:30:58 +0000
committergingerBill <bill@gingerbill.org>2023-03-21 13:30:58 +0000
commit2c4a478987e030e0891b4e317b47886ac6fd06fe (patch)
tree90fb62728e48bf369d2645b6a9e5d0851196bbdd /src/checker.cpp
parenta80ca239374dff52d52d0e7c1ab7e60096f1991b (diff)
Add `@(extra_linker_flags=<string>)`
Diffstat (limited to 'src/checker.cpp')
-rw-r--r--src/checker.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/checker.cpp b/src/checker.cpp
index 1bb437beb..696802e99 100644
--- a/src/checker.cpp
+++ b/src/checker.cpp
@@ -4447,6 +4447,14 @@ gb_internal DECL_ATTRIBUTE_PROC(foreign_import_decl_attribute) {
ac->foreign_import_priority_index = exact_value_to_i64(ev);
}
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;
}
@@ -4506,6 +4514,10 @@ gb_internal void check_add_foreign_import_decl(CheckerContext *ctx, Ast *decl) {
if (ac.foreign_import_priority_index != 0) {
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 (build_context.metrics.arch != TargetArch_amd64 ||