5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
/var
|
||||
*.o
|
||||
*.d
|
||||
*.sys
|
||||
*.iso
|
||||
19
README.md
Normal file
19
README.md
Normal file
@@ -0,0 +1,19 @@
|
||||
# The M1X operating system
|
||||
|
||||
M1X is an operating system partially inspired by Solaris aiming to provide a pragmatic
|
||||
capability based security environment. M1X follows the "(almost) everything is a file"
|
||||
philosophy in which machine resources and files are accessible through a unified file
|
||||
interface similar to those found in POSIX environments, however, the underlying file
|
||||
management mechanisms are to be handled orthogonally to machine resource managment.
|
||||
|
||||
The way this is to be done is by introducing the concept of filepath prefixes which
|
||||
allow the kernel to differentiate between machine resources and true files.
|
||||
|
||||
## Building M1X
|
||||
|
||||
To build M1X, start with obtaining required dependencies by executing the ``bootstrap.sh``
|
||||
script found within the top-level ``host/`` directory. After which, one may build the toolchain
|
||||
by invoking ``toolchain.sh`` which is found in the same directory.
|
||||
|
||||
Once the toolchain is complete, the world can be built by invoking the ``build.sh`` script located
|
||||
in the top-level ``host/`` directory.
|
||||
55
host/bootstrap.sh
Executable file
55
host/bootstrap.sh
Executable file
@@ -0,0 +1,55 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright (c) 2026, Mirocom Laboratories
|
||||
# Provided under the BSD-3 clause
|
||||
#
|
||||
|
||||
#
|
||||
# Check if a list of programs are installed on the system
|
||||
#
|
||||
# <@>: List of programs to check
|
||||
#
|
||||
check_deps() {
|
||||
for dep in $@; do
|
||||
printf "Checking if $dep is installed... "
|
||||
which $dep &>/dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "no"
|
||||
echo "Please install $dep!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "yes"
|
||||
done
|
||||
}
|
||||
|
||||
#
|
||||
# Obtain the Mirocom gcc toolchain
|
||||
#
|
||||
get_toolchain() {
|
||||
if [ ! -d var/cc/toolchain ]; then
|
||||
git clone https://git.mirocom.org/Mirocom/mirocom-toolchain --depth=1 var/cc/toolchain
|
||||
cd var/cc/toolchain
|
||||
tar -xzvf toolchain.tar.gz
|
||||
mv public/* .; rm -rf public/
|
||||
cd ../../../
|
||||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# Obtain all deps
|
||||
#
|
||||
get_deps() {
|
||||
get_toolchain
|
||||
}
|
||||
|
||||
# Make sure everything is installed
|
||||
check_deps \
|
||||
git \
|
||||
make \
|
||||
gcc \
|
||||
xorriso
|
||||
|
||||
# Obtain all the deps we need
|
||||
get_deps
|
||||
39
host/toolchain.sh
Executable file
39
host/toolchain.sh
Executable file
@@ -0,0 +1,39 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright (c) 2026, Mirocom Laboratories
|
||||
# Provided under the BSD-3 clause
|
||||
#
|
||||
|
||||
TARGET=x86_64-pc-mirocom
|
||||
MAKE=make
|
||||
|
||||
mkdir -p var/
|
||||
mkdir -p var/cc/root/usr/include/
|
||||
mkdir -p var/cc/root/usr/bin/
|
||||
|
||||
# Don't build again if the lock exists
|
||||
if [ -f var/cc/.lock ]; then
|
||||
echo "var/cc/.lock exists, skipping toolchain build"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
pushd var/cc/toolchain
|
||||
bash build.sh
|
||||
|
||||
mkdir -p gcc
|
||||
pushd gcc
|
||||
|
||||
# Configure gcc
|
||||
../gcc-patched/configure --target=$TARGET \
|
||||
--prefix=$(pwd) --with-sysroot=$(pwd)/../../root/ \
|
||||
--disable-nls --enable-languages=c --disable-multilib
|
||||
|
||||
# Build gcc
|
||||
$MAKE all-gcc
|
||||
$MAKE install-gcc
|
||||
|
||||
# Lock the directory
|
||||
popd
|
||||
popd
|
||||
touch var/cc/.lock
|
||||
37
src/mk/default.mk
Normal file
37
src/mk/default.mk
Normal file
@@ -0,0 +1,37 @@
|
||||
ARCH_TARGET = x86_64
|
||||
|
||||
CC = \
|
||||
../var/cc/toolchain/gcc/bin/$(ARCH_TARGET)-pc-mirocom-gcc
|
||||
LD = \
|
||||
../var/cc/toolchain/build-binutils/bin/$(ARCH_TARGET)-pc-mirocom-ld
|
||||
AR = \
|
||||
../var/cc/toolchain/build-binutils/bin/$(ARCH_TARGET)-pc-mirocom-ar
|
||||
|
||||
SYS_CFLAGS = \
|
||||
-nostdlib \
|
||||
-nostdinc \
|
||||
-ffreestanding \
|
||||
-fexceptions \
|
||||
--std=gnu11 \
|
||||
-mcmodel=kernel \
|
||||
-Wno-attributes \
|
||||
-fno-stack-protector\
|
||||
-D_M1X_MULTICORE
|
||||
|
||||
ifeq ($(ARCH_TARGET),x86_64)
|
||||
SYS_CFLAGS += \
|
||||
-mno-sse \
|
||||
-mno-sse2 \
|
||||
-mno-sse3 \
|
||||
-mno-avx \
|
||||
-mno-avx2 \
|
||||
-mno-80387 \
|
||||
-mno-3dnow \
|
||||
-mno-mmx
|
||||
endif
|
||||
|
||||
PASSDOWN_ARGS = \
|
||||
ARCH=$(ARCH_TARGET) \
|
||||
SYS_CC=$(CC) \
|
||||
SYS_LD=$(LD) \
|
||||
SYS_CFLAGS="$(SYS_CFLAGS)"
|
||||
Reference in New Issue
Block a user