Commit 430077df1b

Layne Gustafson <lgustaf1@binghamton.edu>
2020-01-16 21:39:20
Allow target details with no LLVM support
1 parent 62e4cc0
Changed files (2)
lib
src-self-hosted
lib/std/target.zig
@@ -860,7 +860,7 @@ pub const x86 = @import("target/x86.zig");
 
 pub const Feature = struct {
     name: []const u8,
-    llvm_name: []const u8,
+    llvm_name: ?[]const u8,
     description: []const u8,
 
     dependencies: []*const Feature,
@@ -868,7 +868,7 @@ pub const Feature = struct {
 
 pub const Cpu = struct {
     name: []const u8,
-    llvm_name: []const u8,
+    llvm_name: ?[]const u8,
 
     dependencies: []*const Feature,
 };
src-self-hosted/stage1.zig
@@ -649,12 +649,14 @@ const Stage2TargetDetails = struct {
         try builtin_str_buffer.append(cpu.name);
         try builtin_str_buffer.append("};");
 
+        const cpu_string = cpu.llvm_name orelse "";
+
         return Self{
             .allocator = allocator,
             .target_details = .{
                 .cpu = cpu,
             },
-            .llvm_cpu_str = try toNullTerminatedStringAlloc(allocator, cpu.llvm_name),
+            .llvm_cpu_str = try toNullTerminatedStringAlloc(allocator, cpu_string),
             .llvm_features_str = null_terminated_empty_string,
             .builtin_str = builtin_str_buffer.toSliceConst(),
         };
@@ -670,21 +672,25 @@ const Stage2TargetDetails = struct {
         // First, disable all features.
         // This way, we only get the ones the user requests.
         for (std.target.getFeaturesForArch(arch)) |feature| {
-            try llvm_features_buffer.append("-");
-            try llvm_features_buffer.append(feature.llvm_name);
-            try llvm_features_buffer.append(",");
+            if (feature.llvm_name) |llvm_name| {
+                try llvm_features_buffer.append("-");
+                try llvm_features_buffer.append(llvm_name);
+                try llvm_features_buffer.append(",");
+            }
         }
 
         for (features) |feature| {
-            try llvm_features_buffer.append("+");
-            try llvm_features_buffer.append(feature.llvm_name);
-            try llvm_features_buffer.append(",");
-            
-            try builtin_str_buffer.append("&@import(\"std\").target.");
-            try builtin_str_buffer.append(@tagName(arch));
-            try builtin_str_buffer.append(".feature_");
-            try builtin_str_buffer.append(feature.name);
-            try builtin_str_buffer.append(",");
+            if (feature.llvm_name) |llvm_name| {
+                try llvm_features_buffer.append("+");
+                try llvm_features_buffer.append(llvm_name);
+                try llvm_features_buffer.append(",");
+                
+                try builtin_str_buffer.append("&@import(\"std\").target.");
+                try builtin_str_buffer.append(@tagName(arch));
+                try builtin_str_buffer.append(".feature_");
+                try builtin_str_buffer.append(feature.name);
+                try builtin_str_buffer.append(",");
+            }
         }
 
         try builtin_str_buffer.append("}};");