5 ms·
Zig has painless cross compilation, with gcc or clang it's a nightmare
by mishafb 5y ago
Zig has painless cross compilation, with gcc or clang it's a nightmare
- pjmlp 5y agoI would like to see that painless cross compilation for UWP applications. Truth is that cross compilation always breaks down in complex deployment use cases.
- int_19h 5y agoIn principle, why wouldn't it work for C++/WinRT, given that it doesn't use the WinMD metadata directly, but rather produces valid C++ headers from it? I think the problem for Zig is that they use MinGW as their Windows target, and the latter's standard library isn't really UWP compatible (yet?).
- pjmlp 5y agoBecause the whole build process to produce a MSIX or APPX requires a little more, like the whole Windows SDK, plus whatever might be fetch via NuGET via MSBuild, and the process to sign the packages?
- int_19h 5y agoI would compare building MSIX or APPX to building an apt or rpm package on Linux - that's the next step after building the actual executables, which is what Zig covers.
- dleslie 5y agoo.O Zig uses LLVM for cross compilation, and so does clang. It's really not any better. https://clang.llvm.org/docs/CrossCompilation.html https://clang.llvm.org/docs/CrossCompilation.html
- messe 5y agoThe part that Zig does well, is that it bundles C headers and standard library sources with it. This is the hard part of cross compilation. The default install can build standalone executables from C programs for any supported platform.
- dleslie 5y agoIf someone wanted to package clang to do that, they could. They do, in fact, that's how clang cross compilation packages work. But sure, to Zig's credit, they ship all the supported toolchains and so don't have many different cross compilation variants in the OS's package manager. But that's a bit like buying one of everything, even though you'll only use one or two.
- messe 5y ago> If someone wanted to package clang to do that, they could. They do, in fact, that's how clang cross compilation packages work. Clang doesn't bundle a C standard library implementation. > But sure, to Zig's credit, they ship all the supported toolchains and so don't have many different cross compilation variants in the OS's package manager. But that's a bit like buying one of everything, even though you'll only use one or two. Zig only bundles the sources, so it builds the C library on-demand. IIRC it's smaller than most cross compiler toolchains.
- dleslie 5y ago> Clang doesn't bundle a C standard library implementation. ... So? It can use most any you wish. > Zig only bundles the sources, so it builds the C library on-demand. Which it then caches, post-compilation, taking up binary space on disk comparable to if you just downloaded the pre-compiled target binaries.
- kristoff_it 5y ago> Which it then caches, post-compilation, taking up binary space on disk comparable to if you just downloaded the pre-compiled target binaries. I don't understand the point of this comeback. If you have the artifact cached it means that you compiled for that target, while the rest of the stdlibs remain in source form (also Zig deduplicates header files which is why everything fits in a 40mb tarball), and you didn't have to download anything manually. What else would you want exactly?