Commit ea7142c43f

Andrew Kelley <andrew@ziglang.org>
2022-05-03 06:35:03
LLVM: set module PIC, PIE, and CodeModel
Some simple code from stage1 ported over to stage2.
1 parent defda62
Changed files (2)
src
src/codegen/llvm/bindings.zig
@@ -310,6 +310,15 @@ pub const Module = opaque {
     pub const setModuleDataLayout = LLVMSetModuleDataLayout;
     extern fn LLVMSetModuleDataLayout(*const Module, *const TargetData) void;
 
+    pub const setModulePICLevel = ZigLLVMSetModulePICLevel;
+    extern fn ZigLLVMSetModulePICLevel(module: *const Module) void;
+
+    pub const setModulePIELevel = ZigLLVMSetModulePIELevel;
+    extern fn ZigLLVMSetModulePIELevel(module: *const Module) void;
+
+    pub const setModuleCodeModel = ZigLLVMSetModuleCodeModel;
+    extern fn ZigLLVMSetModuleCodeModel(module: *const Module, code_model: CodeModel) void;
+
     pub const addFunction = LLVMAddFunction;
     extern fn LLVMAddFunction(*const Module, Name: [*:0]const u8, FunctionTy: *const Type) *const Value;
 
src/codegen/llvm.zig
@@ -340,6 +340,10 @@ pub const Object = struct {
 
         llvm_module.setModuleDataLayout(target_data);
 
+        if (options.pic) llvm_module.setModulePICLevel();
+        if (options.pie) llvm_module.setModulePIELevel();
+        if (code_model != .Default) llvm_module.setModuleCodeModel(code_model);
+
         return Object{
             .gpa = gpa,
             .module = options.module.?,