https://github.com/dm0-/gnuxc
GNU OS Cross-Compiler
https://github.com/dm0-/gnuxc
distro gnu hurd
Last synced: about 2 months ago
JSON representation
GNU OS Cross-Compiler
- Host: GitHub
- URL: https://github.com/dm0-/gnuxc
- Owner: dm0-
- Created: 2013-09-27T17:18:32.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2017-12-26T05:06:58.000Z (about 8 years ago)
- Last Synced: 2024-07-02T11:07:38.143Z (over 1 year ago)
- Topics: distro, gnu, hurd
- Language: Makefile
- Size: 843 KB
- Stars: 13
- Watchers: 6
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome - gnuxc - Compiler (Uncategorized / Uncategorized)
- awesome - gnuxc - compiler, (Inactive / Custom)
README
# GNU OS Cross-Compiler
## About
This project is a GNU operating system cross-compiler, named `gnuxc` for short,
tailored to run on Fedora as the build system. It can create a free, portable,
Hurd-based, desktop OS from scratch.
There are two distinct components for building a working operating system:
1. *Sysroot libraries and cross-tools*: These are packaged into RPMs for the
latest Fedora release. They provide a GNU Hurd cross-compiling environment
on the build system, a standard base of software to run and link against
when compiling software for the operating system itself. Their build files
are located in `specs` and `patches`.
2. *Operating system compilation rules*: The options and procedures used to
build all of the OS software are contained in `make.pkg.d` and `patches`.
These files are mostly reusable on the GNU system to rebuild or upgrade
packages at runtime.
A documentation file `BUILD.md` is provided to walk-through the entire build
procedure and how to test running the OS virtually. All sample commands in the
documentation can be pasted directly into a `bash` prompt. Some of the
commands require your account to have `sudo` access, for example to install
system packages or work with loop devices.
The file `RUNTIME.md` documents how to use and configure the main environments
at runtime, especially the aspects that are unique to the `gnuxc` project.
## Requirements
*Operating system*: Fedora 27 is the current release targeted by this code.
*Disk space*: At least 20 GiB of total available storage is required when
building everything on the same machine, plus however much space is desired for
creating a virtual disk image. Using solid-state storage for the working
directories will greatly improve build times.
* Installing only the packages necessary to build the complete OS requires
half a gigabyte. This is the default action of the sysroot builder script.
* The sysroot builder script leaves RPMs, SRPMs, and source archives on the
disk after it finishes, requiring about 2 GiB of disk space. (This space
can be reclaimed by removing the RPM build environment after installation.)
* The main working directory will use around 17 GiB after compilation.
*Memory*: The build is usually tested on systems with at least 8 GiB of RAM.
*Processor(s)*: The build has been tested on various CPUs ranging from 2-cores
under 2 GHz to 8-cores around 5 GHz. Bigger is better. The CPU should support
hosting a virtual `x86` guest with KVM for best results with running the OS.
## Install
The `gnuxc` source directory is self-contained, and it is functional from any
file system location. To install it at a certain path, simply move or copy the
whole directory into place.
An unprivileged user account can run everything out of its home directory. If
a shared install is desired, the `gnuxc` directory can be placed in a read-only
system location such as `/usr/share/gnuxc`.
## Usage
Calling the main `GNUmakefile` will build the projects in your current working
directory, or the path given to GNU Make with its `-C` option.
All commands in this documentation assume that your current directory is your
desired build path, so change to that directory before pasting any commands.
The given commands also assume your working directory is the `gnuxc` directory,
unless you set the `SOURCE_DIR` variable to its location. (Note that this
variable is only a convention for the example commands; it is never used in the
actual project code.) For example, run the following if `gnuxc` was installed
into `/usr/share`.
SOURCE_DIR=/usr/share/gnuxc
See `BUILD.md` for a detailed walk-through of building the complete OS.
## License
Files written specifically for this cross-compilation system (i.e., not patches
to other projects) are distributed under `GPLv3+` terms. The full text of this
license is included in a `COPYING` file under the `patches` directory.
The changes in the patch files should be considered under the same license as
the files they modify, to ease applying the patches upstream if appropriate.
Most patches are too trivial to warrant any copyright or licensing concerns.
## Quick Update Guide
The following steps can be run after updating the `gnuxc` files to rebuild the
entire updated OS from scratch. You *must* run the full build process at least
once before this will work. See `BUILD.md` for complete instructions.
**Remove old packages.**
rm -fr "$(rpm -E %_rpmdir)" "$(rpm -E %_srcrpmdir)"
sudo dnf -y remove 'gnuxc-*'
gmake clean
**Update RPM source files.**
ln -fst "$(rpm -E %_sourcedir)" "${SOURCE_DIR:-$PWD}"/patches/*
ln -fst "$(rpm -E %_specdir)" "${SOURCE_DIR:-$PWD}"/specs/*
**Rebuild the system.** This assumes that you've mounted your target disk over
`gnu-root` beforehand. Don't forget to run the ownership correction step after
installation.
time make -f "${SOURCE_DIR:-.}/setup-sysroot.scm" $(rpm -E %_smp_mflags) -k
time ( gmake download && gmake $(rpm -E %_smp_mflags) && gmake install )