stage2: object format affects whether LLVM can be used
This commit is contained in:
@@ -1024,10 +1024,6 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {
|
||||
if (options.use_llvm) |explicit|
|
||||
break :blk explicit;
|
||||
|
||||
// If we are outputting .c code we must use Zig backend.
|
||||
if (ofmt == .c)
|
||||
break :blk false;
|
||||
|
||||
// If emitting to LLVM bitcode object format, must use LLVM backend.
|
||||
if (options.emit_llvm_ir != null or options.emit_llvm_bc != null)
|
||||
break :blk true;
|
||||
@@ -1042,7 +1038,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {
|
||||
break :blk true;
|
||||
|
||||
// If LLVM does not support the target, then we can't use it.
|
||||
if (!target_util.hasLlvmSupport(options.target))
|
||||
if (!target_util.hasLlvmSupport(options.target, ofmt))
|
||||
break :blk false;
|
||||
|
||||
// Prefer LLVM for release builds.
|
||||
|
||||
@@ -204,7 +204,24 @@ pub fn hasValgrindSupport(target: std.Target) bool {
|
||||
/// The set of targets that LLVM has non-experimental support for.
|
||||
/// Used to select between LLVM backend and self-hosted backend when compiling in
|
||||
/// release modes.
|
||||
pub fn hasLlvmSupport(target: std.Target) bool {
|
||||
pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool {
|
||||
switch (ofmt) {
|
||||
// LLVM does not support these object formats:
|
||||
.c,
|
||||
.plan9,
|
||||
=> return false,
|
||||
|
||||
.coff,
|
||||
.elf,
|
||||
.macho,
|
||||
.wasm,
|
||||
.spirv,
|
||||
.hex,
|
||||
.raw,
|
||||
.nvptx,
|
||||
=> {},
|
||||
}
|
||||
|
||||
return switch (target.cpu.arch) {
|
||||
.arm,
|
||||
.armeb,
|
||||
|
||||
Reference in New Issue
Block a user