mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 23:28:48 +00:00
Merge pull request #3467 from laytan/clang-18-linking-backport
fix linking with clang-18
This commit is contained in:
+29
-73
@@ -1465,26 +1465,6 @@ gb_internal void init_build_context(TargetMetrics *cross_target, Subtarget subta
|
|||||||
}
|
}
|
||||||
|
|
||||||
bc->metrics = *metrics;
|
bc->metrics = *metrics;
|
||||||
if (metrics->os == TargetOs_darwin) {
|
|
||||||
if (!bc->minimum_os_version_string_given) {
|
|
||||||
bc->minimum_os_version_string = str_lit("11.0.0");
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (subtarget) {
|
|
||||||
case Subtarget_Default:
|
|
||||||
bc->metrics.target_triplet = concatenate_strings(permanent_allocator(), bc->metrics.target_triplet, bc->minimum_os_version_string);
|
|
||||||
break;
|
|
||||||
case Subtarget_iOS:
|
|
||||||
if (metrics->arch == TargetArch_arm64) {
|
|
||||||
bc->metrics.target_triplet = str_lit("arm64-apple-ios");
|
|
||||||
} else if (metrics->arch == TargetArch_amd64) {
|
|
||||||
bc->metrics.target_triplet = str_lit("x86_64-apple-ios");
|
|
||||||
} else {
|
|
||||||
GB_PANIC("Unknown architecture for darwin");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bc->ODIN_OS = target_os_names[metrics->os];
|
bc->ODIN_OS = target_os_names[metrics->os];
|
||||||
bc->ODIN_ARCH = target_arch_names[metrics->arch];
|
bc->ODIN_ARCH = target_arch_names[metrics->arch];
|
||||||
@@ -1520,62 +1500,26 @@ gb_internal void init_build_context(TargetMetrics *cross_target, Subtarget subta
|
|||||||
bc->ODIN_WINDOWS_SUBSYSTEM = windows_subsystem_names[Windows_Subsystem_CONSOLE];
|
bc->ODIN_WINDOWS_SUBSYSTEM = windows_subsystem_names[Windows_Subsystem_CONSOLE];
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE(zangent): The linker flags to set the build architecture are different
|
if (metrics->os == TargetOs_darwin && subtarget == Subtarget_iOS) {
|
||||||
// across OSs. It doesn't make sense to allocate extra data on the heap
|
switch (metrics->arch) {
|
||||||
// here, so I just #defined the linker flags to keep things concise.
|
case TargetArch_arm64:
|
||||||
if (bc->metrics.arch == TargetArch_amd64) {
|
bc->metrics.target_triplet = str_lit("arm64-apple-ios");
|
||||||
switch (bc->metrics.os) {
|
|
||||||
case TargetOs_windows:
|
|
||||||
bc->link_flags = str_lit("/machine:x64 ");
|
|
||||||
break;
|
break;
|
||||||
case TargetOs_darwin:
|
case TargetArch_amd64:
|
||||||
bc->link_flags = str_lit("-arch x86_64 ");
|
bc->metrics.target_triplet = str_lit("x86_64-apple-ios");
|
||||||
break;
|
|
||||||
case TargetOs_linux:
|
|
||||||
bc->link_flags = str_lit("-arch x86-64 ");
|
|
||||||
break;
|
|
||||||
case TargetOs_freebsd:
|
|
||||||
bc->link_flags = str_lit("-arch x86-64 ");
|
|
||||||
break;
|
|
||||||
case TargetOs_openbsd:
|
|
||||||
bc->link_flags = str_lit("-arch x86-64 ");
|
|
||||||
break;
|
|
||||||
case TargetOs_haiku:
|
|
||||||
bc->link_flags = str_lit("-arch x86-64 ");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if (bc->metrics.arch == TargetArch_i386) {
|
|
||||||
switch (bc->metrics.os) {
|
|
||||||
case TargetOs_windows:
|
|
||||||
bc->link_flags = str_lit("/machine:x86 ");
|
|
||||||
break;
|
|
||||||
case TargetOs_darwin:
|
|
||||||
gb_printf_err("Unsupported architecture\n");
|
|
||||||
gb_exit(1);
|
|
||||||
break;
|
|
||||||
case TargetOs_linux:
|
|
||||||
bc->link_flags = str_lit("-arch x86 ");
|
|
||||||
break;
|
|
||||||
case TargetOs_freebsd:
|
|
||||||
bc->link_flags = str_lit("-arch x86 ");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if (bc->metrics.arch == TargetArch_arm32) {
|
|
||||||
switch (bc->metrics.os) {
|
|
||||||
case TargetOs_linux:
|
|
||||||
bc->link_flags = str_lit("-arch arm ");
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
gb_printf_err("Compiler Error: Unsupported architecture\n");
|
GB_PANIC("Unknown architecture for darwin");
|
||||||
gb_exit(1);
|
|
||||||
}
|
}
|
||||||
} else if (bc->metrics.arch == TargetArch_arm64) {
|
}
|
||||||
switch (bc->metrics.os) {
|
|
||||||
case TargetOs_darwin:
|
if (bc->metrics.os == TargetOs_windows) {
|
||||||
bc->link_flags = str_lit("-arch arm64 ");
|
switch (bc->metrics.arch) {
|
||||||
|
case TargetArch_amd64:
|
||||||
|
bc->link_flags = str_lit("/machine:x64 ");
|
||||||
break;
|
break;
|
||||||
case TargetOs_linux:
|
case TargetArch_i386:
|
||||||
bc->link_flags = str_lit("-arch aarch64 ");
|
bc->link_flags = str_lit("/machine:x86 ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (is_arch_wasm()) {
|
} else if (is_arch_wasm()) {
|
||||||
@@ -1595,8 +1539,20 @@ gb_internal void init_build_context(TargetMetrics *cross_target, Subtarget subta
|
|||||||
// Disallow on wasm
|
// Disallow on wasm
|
||||||
bc->use_separate_modules = false;
|
bc->use_separate_modules = false;
|
||||||
} else {
|
} else {
|
||||||
gb_printf_err("Compiler Error: Unsupported architecture\n");
|
bc->link_flags = concatenate3_strings(permanent_allocator(),
|
||||||
gb_exit(1);
|
str_lit("-target "), bc->metrics.target_triplet, str_lit(" "));
|
||||||
|
}
|
||||||
|
|
||||||
|
// NOTE: needs to be done after adding the -target flag to the linker flags so the linker
|
||||||
|
// does not annoy the user with version warnings.
|
||||||
|
if (metrics->os == TargetOs_darwin) {
|
||||||
|
if (!bc->minimum_os_version_string_given) {
|
||||||
|
bc->minimum_os_version_string = str_lit("11.0.0");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (subtarget == Subtarget_Default) {
|
||||||
|
bc->metrics.target_triplet = concatenate_strings(permanent_allocator(), bc->metrics.target_triplet, bc->minimum_os_version_string);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bc->ODIN_DEBUG && !bc->custom_optimization_level) {
|
if (bc->ODIN_DEBUG && !bc->custom_optimization_level) {
|
||||||
|
|||||||
Reference in New Issue
Block a user