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