| ... | ... | @@ -746,6 +746,18 @@ const SystemLib = struct { |
| 746 | 746 | } |
| 747 | 747 | }; |
| 748 | 748 | |
| 749 | const CliModule = struct { |
| 750 | mod: *Package, |
| 751 | /// still in CLI arg format |
| 752 | deps_str: []const u8, |
| 753 | }; |
| 754 | |
| 755 | fn cleanupModules(modules: *std.StringArrayHashMap(CliModule)) void { |
| 756 | var it = modules.iterator(); |
| 757 | while (it.next()) |kv| kv.value_ptr.mod.destroy(modules.allocator); |
| 758 | modules.deinit(); |
| 759 | } |
| 760 | |
| 749 | 761 | fn buildOutputType( |
| 750 | 762 | gpa: Allocator, |
| 751 | 763 | arena: Allocator, |
| ... | ... | @@ -893,62 +905,30 @@ fn buildOutputType( |
| 893 | 905 | var error_tracing: ?bool = null; |
| 894 | 906 | var pdb_out_path: ?[]const u8 = null; |
| 895 | 907 | var dwarf_format: ?std.dwarf.Format = null; |
| 896 | | |
| 897 | 908 | // e.g. -m3dnow or -mno-outline-atomics. They correspond to std.Target llvm cpu feature names. |
| 898 | 909 | // This array is populated by zig cc frontend and then has to be converted to zig-style |
| 899 | 910 | // CPU features. |
| 900 | | var llvm_m_args = std.ArrayList([]const u8).init(gpa); |
| 901 | | defer llvm_m_args.deinit(); |
| 902 | | |
| 911 | var llvm_m_args = std.ArrayList([]const u8).init(arena); |
| 903 | 912 | var system_libs = std.StringArrayHashMap(SystemLib).init(arena); |
| 904 | | |
| 905 | | var wasi_emulated_libs = std.ArrayList(wasi_libc.CRTFile).init(gpa); |
| 906 | | defer wasi_emulated_libs.deinit(); |
| 907 | | |
| 908 | | var clang_argv = std.ArrayList([]const u8).init(gpa); |
| 909 | | defer clang_argv.deinit(); |
| 910 | | |
| 911 | | var extra_cflags = std.ArrayList([]const u8).init(gpa); |
| 912 | | defer extra_cflags.deinit(); |
| 913 | | |
| 913 | var wasi_emulated_libs = std.ArrayList(wasi_libc.CRTFile).init(arena); |
| 914 | var clang_argv = std.ArrayList([]const u8).init(arena); |
| 915 | var extra_cflags = std.ArrayList([]const u8).init(arena); |
| 914 | 916 | // These are before resolving sysroot. |
| 915 | 917 | var lib_dir_args = std.ArrayList([]const u8).init(arena); |
| 916 | | |
| 917 | | var rpath_list = std.ArrayList([]const u8).init(gpa); |
| 918 | | defer rpath_list.deinit(); |
| 919 | | |
| 918 | var rpath_list = std.ArrayList([]const u8).init(arena); |
| 920 | 919 | var symbol_wrap_set: std.StringArrayHashMapUnmanaged(void) = .{}; |
| 921 | | |
| 922 | | var c_source_files = std.ArrayList(Compilation.CSourceFile).init(gpa); |
| 923 | | defer c_source_files.deinit(); |
| 924 | | |
| 925 | | var link_objects = std.ArrayList(Compilation.LinkObject).init(gpa); |
| 926 | | defer link_objects.deinit(); |
| 927 | | |
| 928 | | var framework_dirs = std.ArrayList([]const u8).init(gpa); |
| 929 | | defer framework_dirs.deinit(); |
| 930 | | |
| 920 | var c_source_files = std.ArrayList(Compilation.CSourceFile).init(arena); |
| 921 | var link_objects = std.ArrayList(Compilation.LinkObject).init(arena); |
| 922 | var framework_dirs = std.ArrayList([]const u8).init(arena); |
| 931 | 923 | var frameworks: std.StringArrayHashMapUnmanaged(Compilation.Framework) = .{}; |
| 932 | | |
| 933 | 924 | // null means replace with the test executable binary |
| 934 | | var test_exec_args = std.ArrayList(?[]const u8).init(gpa); |
| 935 | | defer test_exec_args.deinit(); |
| 936 | | |
| 937 | | var linker_export_symbol_names = std.ArrayList([]const u8).init(gpa); |
| 938 | | defer linker_export_symbol_names.deinit(); |
| 939 | | |
| 925 | var test_exec_args = std.ArrayList(?[]const u8).init(arena); |
| 926 | var linker_export_symbol_names = std.ArrayList([]const u8).init(arena); |
| 940 | 927 | // Contains every module specified via --mod. The dependencies are added |
| 941 | 928 | // after argument parsing is completed. We use a StringArrayHashMap to make |
| 942 | 929 | // error output consistent. |
| 943 | | var modules = std.StringArrayHashMap(struct { |
| 944 | | mod: *Package, |
| 945 | | deps_str: []const u8, // still in CLI arg format |
| 946 | | }).init(gpa); |
| 947 | | defer { |
| 948 | | var it = modules.iterator(); |
| 949 | | while (it.next()) |kv| kv.value_ptr.mod.destroy(gpa); |
| 950 | | modules.deinit(); |
| 951 | | } |
| 930 | var modules = std.StringArrayHashMap(CliModule).init(gpa); |
| 931 | defer cleanupModules(&modules); |
| 952 | 932 | |
| 953 | 933 | // The dependency string for the root package |
| 954 | 934 | var root_deps_str: ?[]const u8 = null; |