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