| Crates.io | icedragon |
| lib.rs | icedragon |
| version | 0.0.1 |
| created_at | 2025-03-07 06:37:36.572275+00 |
| updated_at | 2025-03-07 06:37:36.572275+00 |
| description | Linux cross-compilation suite for building portable software |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1582423 |
| size | 107,474 |
Linux cross-compilation suite for building portable, statically linked software.
Currently supports the following languages:
Icedragon consists of two parts:
It's based on:
Let's start with similarities. Both icedragon and Alpine are using musl as the C standard library. Both can be used to build portable, statically linked binaries.
The most important difference is that icedragon is not a Linux distribution. It's just Gentoo with specific configuration, provided as ready to use containers. All packaging-related work necessary for icedragon to work is done upstream.
The second difference is that Alpine uses GCC and GNU C++ library. Icedragon uses LLVM and LLVM C++ library and doesn't come with GCC.
The last difference is strong focus on cross-compilation in icedragon, which provides sysroots and toolchains for foreign architectures out of the box. It does so thanks to crossdev, which allows management and installation of packages inside sysroots. There is no such tooling on Alpine.
Icedragon comes with a set of static libraries which can be considered "build essentials" for the most of C/C++ software on Linux, as well as for Rust crates, which don't vendor C dependencies and expect them to be present in the system.
musl aims to stay compatible with the [POSIX C standard] for the sake of portability. glibc, on the other hand, adds so called GNU extensions - additional modules and functions which are not part of the standard. As a result, software making use of GNU extensions doesn't build with musl.
However, there are projects which provide standalone, musl-compatible ports of various GNU extensions:
They still don't provide 100% compatibility with glibc, but they are good enough to make building of most Gentoo packages possible.
These ports can be linked statically and don't issue any dlopen calls.
A similar incompatibility exists between [compiler-rt] (the runtime library provided by LLVM, used in icedragon), and libgcc (a similar library provided by GCC). libgcc comes with extensions, which are not included by default in [compiler-rt]. It also exports symbols from libunwind (GCC's unwinder library).
LLVM community addressed that problem by creating llvm-libgcc subproject, which:
icedragon provides all the GNU extension ports mentioned above.