aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/llvm_backend.cpp')
-rw-r--r--src/llvm_backend.cpp36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp
index 921f996f6..10d37a08b 100644
--- a/src/llvm_backend.cpp
+++ b/src/llvm_backend.cpp
@@ -11872,9 +11872,12 @@ void lb_generate_code(lbGenerator *gen) {
}
}
+ // GB_ASSERT_MSG(LLVMTargetHasAsmBackend(target));
+
LLVMTargetMachineRef target_machine = LLVMCreateTargetMachine(target, target_triple, llvm_cpu, llvm_features, LLVMCodeGenLevelNone, LLVMRelocDefault, code_mode);
defer (LLVMDisposeTargetMachine(target_machine));
+
LLVMSetModuleDataLayout(mod, LLVMCreateTargetDataLayout(target_machine));
{ // Debug Info
@@ -12461,18 +12464,25 @@ void lb_generate_code(lbGenerator *gen) {
defer (gb_free(heap_allocator(), filepath_ll.text));
String filepath_obj = {};
- switch (build_context.metrics.os) {
- case TargetOs_windows:
- filepath_obj = concatenate_strings(heap_allocator(), gen->output_base, STR_LIT(".obj"));
- break;
- case TargetOs_darwin:
- case TargetOs_linux:
- case TargetOs_essence:
- filepath_obj = concatenate_strings(heap_allocator(), gen->output_base, STR_LIT(".o"));
- break;
- case TargetOs_js:
- filepath_obj = concatenate_strings(heap_allocator(), gen->output_base, STR_LIT(".wasm-obj"));
- break;
+ LLVMCodeGenFileType code_gen_file_type = LLVMObjectFile;
+
+ if (build_context.build_mode == BuildMode_Assembly) {
+ filepath_obj = concatenate_strings(heap_allocator(), gen->output_base, STR_LIT(".S"));
+ code_gen_file_type = LLVMAssemblyFile;
+ } else {
+ switch (build_context.metrics.os) {
+ case TargetOs_windows:
+ filepath_obj = concatenate_strings(heap_allocator(), gen->output_base, STR_LIT(".obj"));
+ break;
+ case TargetOs_darwin:
+ case TargetOs_linux:
+ case TargetOs_essence:
+ filepath_obj = concatenate_strings(heap_allocator(), gen->output_base, STR_LIT(".o"));
+ break;
+ case TargetOs_js:
+ filepath_obj = concatenate_strings(heap_allocator(), gen->output_base, STR_LIT(".wasm-obj"));
+ break;
+ }
}
@@ -12492,8 +12502,6 @@ void lb_generate_code(lbGenerator *gen) {
TIME_SECTION("LLVM Object Generation");
- LLVMCodeGenFileType code_gen_file_type = LLVMObjectFile;
-
if (LLVMTargetMachineEmitToFile(target_machine, mod, cast(char *)filepath_obj.text, code_gen_file_type, &llvm_error)) {
gb_printf_err("LLVM Error: %s\n", llvm_error);
gb_exit(1);