superconfigure
is a collection of programs ported to run as fat binaries using
Cosmopolitan Libc. This repository includes build scripts for popular
software such as bash
, lua
, emacs
, GNU Coreutils, sed
, gcc-11
, curl
,
clang-15
, and others. For each of these, the source code is downloaded from
the upstream sources, compiled for x86_64
and aarch64
, and finally combined
into a fat binary using Cosmopolitan Libc's apelink
program.
The Releases
page
should have the most recent builds of executables in this repo, built via Github
Actions.
If you'd like to add your own software build scripts, submit a PR! Read up
config/README.md
how all of this works.
The build scripts assume Debian/Ubuntu, and also use things like bash
, find
,
wget
, git
, GNU make
, patch
, cp
, mkdir
etc. (you also need sudo
access to setup a /zip
folder). You can follow the steps in
.github/workflows/release.yml
on your machine:
- clone this repository
- create a folder
/zip
on your system that provides read/write access to everyone - install necessary build dependencies:
qemu
to run aarch64 ELF binaries- SSL certificates
- clone the cosmopolitan libc repository within this repository
- build the
cosmopolitan
toolchain by running./.github/scripts/cosmo
git clone https://github.com/ahgamut/superconfigure
cd superconfigure
git clone --depth=1 https://github.com/jart/cosmopolitan
# install build dependencies
bash ./.github/scripts/setup
bash ./.github/scripts/cosmo
- to build
bash
,less
,find
,tree
, and GNU coreutils runmake -j4 cli
- to build
vim
,emacs
, andnano
runmake -j4 editor
- to build CPython3.11.4 with
datasette
1.0.0a6 runmake -j4 datasette
- to build the GCC collection for
x86_64
runmake -j4 x86_64-gcc
you can run ./.github/scripts/collectzip
to store all build results in a
ZIP file.
You can build fat binaries using the Makefile as well! After setting up the
toolchain, if you want to get the binaries for the web
folder, run
# assume ./.github/scripts/setup has already been run
# assume ./.github/scripts/cosmo has already been run
export MAXPROC=4
make -j4 web
ls -al results/bin/*
Let's say you wanted to build bash
. The steps are:
# assume ./.github/scripts/setup has already been run
# assume ./.github/scripts/cosmo has already been run
export MAXPROC=4
make -j2 o/cli/bash/built.fat
ls -al results/bin/bash*
If you'd like to add new Python scripts or pure-Python packages to the python
executables:
mkdir -p ./Lib/site-packages
cd Lib/site-packages
# add your code
cp -r your_script.py
unzip your_lib.whl
cd ../../
zip -r ./python.com Lib/
# test if the package loads
./python.com -c "import your_lib"
A similar process can be followed to add your own vimrc
, wgetrc
, nanorc
etc. to the respective binaries.