@@ -793,7 +793,7 @@ pub fn linkFrameworkWeak(c: *Compile, name: []const u8) void {
793
793
c .root_module .linkFramework (name , .{ .weak = true });
794
794
}
795
795
796
- /// Handy when you have many C/C++ source files and want them all to have the same flags.
796
+ /// Handy when you have many non-Zig source files and want them all to have the same flags.
797
797
pub fn addCSourceFiles (compile : * Compile , options : Module.AddCSourceFilesOptions ) void {
798
798
compile .root_module .addCSourceFiles (options );
799
799
}
@@ -1243,47 +1243,72 @@ fn getZigArgs(compile: *Compile, fuzz: bool) ![][]const u8 {
1243
1243
.c_source_file = > | c_source_file | l : {
1244
1244
if (! my_responsibility ) break :l ;
1245
1245
1246
- if (c_source_file .flags .len == 0 ) {
1247
- if (prev_has_cflags ) {
1248
- try zig_args .append ("-cflags" );
1249
- try zig_args .append ("--" );
1250
- prev_has_cflags = false ;
1251
- }
1252
- } else {
1246
+ if (prev_has_cflags or c_source_file .flags .len != 0 ) {
1253
1247
try zig_args .append ("-cflags" );
1254
1248
for (c_source_file .flags ) | arg | {
1255
1249
try zig_args .append (arg );
1256
1250
}
1257
1251
try zig_args .append ("--" );
1258
- prev_has_cflags = true ;
1259
1252
}
1253
+ prev_has_cflags = (c_source_file .flags .len != 0 );
1254
+
1255
+ if (c_source_file .language != .find_by_file_extension ) {
1256
+ try zig_args .append ("-x" );
1257
+ try zig_args .append (switch (c_source_file .language ) {
1258
+ .find_by_file_extension = > unreachable ,
1259
+ .c = > "c" ,
1260
+ .cpp = > "c++" ,
1261
+ .assembly = > "assembler" ,
1262
+ .assembly_with_cpp = > "assembler-with-cpp" ,
1263
+ .objc = > "objective-c" ,
1264
+ .objcpp = > "objective-c++" ,
1265
+ });
1266
+ }
1267
+
1260
1268
try zig_args .append (c_source_file .file .getPath2 (dep .module .owner , step ));
1269
+
1270
+ if (c_source_file .language != .find_by_file_extension ) {
1271
+ try zig_args .append ("-x" );
1272
+ try zig_args .append ("none" );
1273
+ }
1261
1274
total_linker_objects += 1 ;
1262
1275
},
1263
1276
1264
1277
.c_source_files = > | c_source_files | l : {
1265
1278
if (! my_responsibility ) break :l ;
1266
1279
1267
- if (c_source_files .flags .len == 0 ) {
1268
- if (prev_has_cflags ) {
1269
- try zig_args .append ("-cflags" );
1270
- try zig_args .append ("--" );
1271
- prev_has_cflags = false ;
1272
- }
1273
- } else {
1280
+ if (prev_has_cflags or c_source_files .flags .len != 0 ) {
1274
1281
try zig_args .append ("-cflags" );
1275
- for (c_source_files .flags ) | flag | {
1276
- try zig_args .append (flag );
1282
+ for (c_source_files .flags ) | arg | {
1283
+ try zig_args .append (arg );
1277
1284
}
1278
1285
try zig_args .append ("--" );
1279
- prev_has_cflags = true ;
1286
+ }
1287
+ prev_has_cflags = (c_source_files .flags .len != 0 );
1288
+
1289
+ if (c_source_files .language != .find_by_file_extension ) {
1290
+ try zig_args .append ("-x" );
1291
+ try zig_args .append (switch (c_source_files .language ) {
1292
+ .find_by_file_extension = > unreachable ,
1293
+ .c = > "c" ,
1294
+ .cpp = > "c++" ,
1295
+ .assembly = > "assembler" ,
1296
+ .assembly_with_cpp = > "assembler-with-cpp" ,
1297
+ .objc = > "objective-c" ,
1298
+ .objcpp = > "objective-c++" ,
1299
+ });
1280
1300
}
1281
1301
1282
1302
const root_path = c_source_files .root .getPath2 (dep .module .owner , step );
1283
1303
for (c_source_files .files ) | file | {
1284
1304
try zig_args .append (b .pathJoin (&.{ root_path , file }));
1285
1305
}
1286
1306
1307
+ if (c_source_files .language != .find_by_file_extension ) {
1308
+ try zig_args .append ("-x" );
1309
+ try zig_args .append ("none" );
1310
+ }
1311
+
1287
1312
total_linker_objects += c_source_files .files .len ;
1288
1313
},
1289
1314
0 commit comments