mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
Move the compiler's LLVM bitcode builder to std.zig.llvm.
This commit is contained in:
parent
dea72d15da
commit
5c44934e20
@ -500,6 +500,11 @@ set(ZIG_STAGE2_SOURCES
|
||||
lib/std/zig/system/NativePaths.zig
|
||||
lib/std/zig/system/x86.zig
|
||||
lib/std/zig/tokenizer.zig
|
||||
lib/std/zig/llvm.zig
|
||||
lib/std/zig/llvm/BitcodeReader.zig
|
||||
lib/std/zig/llvm/Builder.zig
|
||||
lib/std/zig/llvm/bitcode_writer.zig
|
||||
lib/std/zig/llvm/ir.zig
|
||||
src/Air.zig
|
||||
src/Builtin.zig
|
||||
src/Compilation.zig
|
||||
@ -567,11 +572,7 @@ set(ZIG_STAGE2_SOURCES
|
||||
src/codegen/c.zig
|
||||
src/codegen/c/Type.zig
|
||||
src/codegen/llvm.zig
|
||||
src/codegen/llvm/BitcodeReader.zig
|
||||
src/codegen/llvm/Builder.zig
|
||||
src/codegen/llvm/bindings.zig
|
||||
src/codegen/llvm/bitcode_writer.zig
|
||||
src/codegen/llvm/ir.zig
|
||||
src/codegen/spirv.zig
|
||||
src/codegen/spirv/Assembler.zig
|
||||
src/codegen/spirv/Module.zig
|
||||
|
||||
@ -24,6 +24,7 @@ pub const LibCInstallation = @import("zig/LibCInstallation.zig");
|
||||
pub const WindowsSdk = @import("zig/WindowsSdk.zig");
|
||||
pub const LibCDirs = @import("zig/LibCDirs.zig");
|
||||
pub const target = @import("zig/target.zig");
|
||||
pub const llvm = @import("zig/llvm.zig");
|
||||
|
||||
// Character literal parsing
|
||||
pub const ParsedCharLiteral = string_literal.ParsedCharLiteral;
|
||||
|
||||
3
lib/std/zig/llvm.zig
Normal file
3
lib/std/zig/llvm.zig
Normal file
@ -0,0 +1,3 @@
|
||||
pub const BitcodeReader = @import("llvm/BitcodeReader.zig");
|
||||
pub const bitcode_writer = @import("llvm/bitcode_writer.zig");
|
||||
pub const Builder = @import("llvm/Builder.zig");
|
||||
@ -510,6 +510,6 @@ const Abbrev = struct {
|
||||
};
|
||||
|
||||
const assert = std.debug.assert;
|
||||
const std = @import("std");
|
||||
const std = @import("../../std.zig");
|
||||
|
||||
const BitcodeReader = @This();
|
||||
@ -13168,7 +13168,12 @@ fn metadataConstantAssumeCapacity(self: *Builder, constant: Constant) Metadata {
|
||||
return @enumFromInt(gop.index);
|
||||
}
|
||||
|
||||
pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]const u32 {
|
||||
pub const Producer = struct {
|
||||
name: []const u8,
|
||||
version: std.SemanticVersion,
|
||||
};
|
||||
|
||||
pub fn toBitcode(self: *Builder, allocator: Allocator, producer: Producer) bitcode_writer.Error![]const u32 {
|
||||
const BitcodeWriter = bitcode_writer.BitcodeWriter(&.{ Type, FunctionAttributes });
|
||||
var bitcode = BitcodeWriter.init(allocator, .{
|
||||
std.math.log2_int_ceil(usize, self.type_items.items.len),
|
||||
@ -13187,14 +13192,15 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
|
||||
const Identification = ir.Identification;
|
||||
var identification_block = try bitcode.enterTopBlock(Identification);
|
||||
|
||||
const producer = try std.fmt.allocPrint(self.gpa, "zig {d}.{d}.{d}", .{
|
||||
build_options.semver.major,
|
||||
build_options.semver.minor,
|
||||
build_options.semver.patch,
|
||||
const producer_str = try std.fmt.allocPrint(self.gpa, "{s} {d}.{d}.{d}", .{
|
||||
producer.name,
|
||||
producer.version.major,
|
||||
producer.version.minor,
|
||||
producer.version.patch,
|
||||
});
|
||||
defer self.gpa.free(producer);
|
||||
defer self.gpa.free(producer_str);
|
||||
|
||||
try identification_block.writeAbbrev(Identification.Version{ .string = producer });
|
||||
try identification_block.writeAbbrev(Identification.Version{ .string = producer_str });
|
||||
try identification_block.writeAbbrev(Identification.Epoch{ .epoch = 0 });
|
||||
|
||||
try identification_block.end();
|
||||
@ -15216,10 +15222,9 @@ pub fn toBitcode(self: *Builder, allocator: Allocator) bitcode_writer.Error![]co
|
||||
const Allocator = std.mem.Allocator;
|
||||
const assert = std.debug.assert;
|
||||
const bitcode_writer = @import("bitcode_writer.zig");
|
||||
const build_options = @import("build_options");
|
||||
const Builder = @This();
|
||||
const builtin = @import("builtin");
|
||||
const DW = std.dwarf;
|
||||
const ir = @import("ir.zig");
|
||||
const log = std.log.scoped(.llvm);
|
||||
const std = @import("std");
|
||||
const std = @import("../../std.zig");
|
||||
@ -1,4 +1,4 @@
|
||||
const std = @import("std");
|
||||
const std = @import("../../std.zig");
|
||||
|
||||
pub const AbbrevOp = union(enum) {
|
||||
literal: u32, // 0
|
||||
@ -1,4 +1,4 @@
|
||||
const std = @import("std");
|
||||
const std = @import("../../std.zig");
|
||||
const Builder = @import("Builder.zig");
|
||||
const bitcode_writer = @import("bitcode_writer.zig");
|
||||
|
||||
@ -551,7 +551,6 @@ pub const CObject = struct {
|
||||
}
|
||||
|
||||
pub fn parse(gpa: Allocator, path: []const u8) !*Bundle {
|
||||
const BitcodeReader = @import("codegen/llvm/BitcodeReader.zig");
|
||||
const BlockId = enum(u32) {
|
||||
Meta = 8,
|
||||
Diag,
|
||||
@ -588,7 +587,7 @@ pub const CObject = struct {
|
||||
defer file.close();
|
||||
var br = std.io.bufferedReader(file.reader());
|
||||
const reader = br.reader();
|
||||
var bc = BitcodeReader.init(gpa, .{ .reader = reader.any() });
|
||||
var bc = std.zig.llvm.BitcodeReader.init(gpa, .{ .reader = reader.any() });
|
||||
defer bc.deinit();
|
||||
|
||||
var file_names: std.AutoArrayHashMapUnmanaged(u32, []const u8) = .empty;
|
||||
|
||||
@ -6261,7 +6261,7 @@ pub const Alignment = enum(u6) {
|
||||
return n + 1;
|
||||
}
|
||||
|
||||
const LlvmBuilderAlignment = @import("codegen/llvm/Builder.zig").Alignment;
|
||||
const LlvmBuilderAlignment = std.zig.llvm.Builder.Alignment;
|
||||
|
||||
pub fn toLlvm(this: @This()) LlvmBuilderAlignment {
|
||||
return @enumFromInt(@intFromEnum(this));
|
||||
|
||||
@ -6,7 +6,7 @@ const log = std.log.scoped(.codegen);
|
||||
const math = std.math;
|
||||
const DW = std.dwarf;
|
||||
|
||||
const Builder = @import("llvm/Builder.zig");
|
||||
const Builder = std.zig.llvm.Builder;
|
||||
const llvm = if (build_options.have_llvm)
|
||||
@import("llvm/bindings.zig")
|
||||
else
|
||||
@ -1216,7 +1216,10 @@ pub const Object = struct {
|
||||
}
|
||||
}
|
||||
|
||||
const bitcode = try o.builder.toBitcode(o.gpa);
|
||||
const bitcode = try o.builder.toBitcode(o.gpa, .{
|
||||
.name = "zig",
|
||||
.version = build_options.semver,
|
||||
});
|
||||
defer o.gpa.free(bitcode);
|
||||
o.builder.clearAndFree();
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user