From fdcb46d6f2c5b9154566525c713a1f0201ef0250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Lov=C3=A9n?= Date: Sun, 2 Jan 2022 16:49:01 +0100 Subject: [PATCH] Initial commit --- .gitignore | 3 +++ Makefile | 14 ++++++++++++ dbg | 3 +++ emu | 3 +++ make | 3 +++ toolchain/Dockerfile.build | 11 +++++++++ toolchain/Dockerfile.run | 8 +++++++ toolchain/build-toolchain.sh | 44 ++++++++++++++++++++++++++++++++++++ toolchain/docker-compose.yml | 29 ++++++++++++++++++++++++ toolchain/gdbinit | 16 +++++++++++++ 10 files changed, 134 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100755 dbg create mode 100755 emu create mode 100755 make create mode 100644 toolchain/Dockerfile.build create mode 100644 toolchain/Dockerfile.run create mode 100755 toolchain/build-toolchain.sh create mode 100644 toolchain/docker-compose.yml create mode 100644 toolchain/gdbinit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..840d338 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +dist/ +build/ +sysroot/ \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6328a18 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +ifeq ($(BUILDROOT),) +$(error BUILDROOT IS NOT SET!) +endif + +SYSROOT := $(BUILDROOT)/sysroot + +DIST := $(BUILDROOT)/dist/mittos.iso + +$(DIST): + grub-mkrescue -o $@ $(SYSROOT) + +install: $(DIST) + +.PHONY: install \ No newline at end of file diff --git a/dbg b/dbg new file mode 100755 index 0000000..9fc8b18 --- /dev/null +++ b/dbg @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +docker-compose -f toolchain/docker-compose.yml run --rm dbg "$@" \ No newline at end of file diff --git a/emu b/emu new file mode 100755 index 0000000..4eb3a1c --- /dev/null +++ b/emu @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +docker-compose -f toolchain/docker-compose.yml run --rm --name emul emul "$@" \ No newline at end of file diff --git a/make b/make new file mode 100755 index 0000000..dd1199d --- /dev/null +++ b/make @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +docker-compose -f toolchain/docker-compose.yml run --rm make "$@" \ No newline at end of file diff --git a/toolchain/Dockerfile.build b/toolchain/Dockerfile.build new file mode 100644 index 0000000..6033871 --- /dev/null +++ b/toolchain/Dockerfile.build @@ -0,0 +1,11 @@ +FROM alpine + +ADD build-toolchain.sh /opt/build-toolchain.sh + +RUN /opt/build-toolchain.sh + +ENV PATH "/opt/toolchain:$PATH" +ENV MITTOS64 "true" +ENV BUILDROOT "/opt" + +WORKDIR /opt \ No newline at end of file diff --git a/toolchain/Dockerfile.run b/toolchain/Dockerfile.run new file mode 100644 index 0000000..e44b89f --- /dev/null +++ b/toolchain/Dockerfile.run @@ -0,0 +1,8 @@ +FROM alpine + +RUN apk --update --no-cache add qemu-system-x86_64 qemu-ui-curses gdb && rm -rf /var/cache/apk/* + +ENV MITTOS64 "true" +ENV BUILDROOT "/opt" + +WORKDIR "/opt" \ No newline at end of file diff --git a/toolchain/build-toolchain.sh b/toolchain/build-toolchain.sh new file mode 100755 index 0000000..78d10c2 --- /dev/null +++ b/toolchain/build-toolchain.sh @@ -0,0 +1,44 @@ +#!/bin/sh -e + +apk --update add build-base +apk add gmp-dev mpfr-dev mpc1-dev + +apk add make +apk add grub-bios xorriso + +rm -rf /var/cache/apk/* + +target=x86_64-elf +binutils=binutils-2.37 +gcc=gcc-11.2.0 + +cd /opt +wget http://ftp.gnu.org/gnu/binutils/${binutils}.tar.gz +tar -xf ${binutils}.tar.gz +mkdir binutils-build && cd binutils-build +../${binutils}/configure \ + --target=${target} \ + --disable-nls \ + --disable-werror \ + --with-sysroot \ + +make -j 4 +make install + +cd /opt +wget http://ftp.gnu.org/gnu/gcc/${gcc}/${gcc}.tar.gz +tar -xf ${gcc}.tar.gz +mkdir gcc-build && cd gcc-build +../${gcc}/configure \ + --target=${target} \ + --disable-nls \ + --enable-languages=c \ + --without-headers \ + +make all-gcc all-target-libgcc -j 4 +make install-gcc install-target-libgcc + +apk del build-base + +cd / +rm -rf /opt \ No newline at end of file diff --git a/toolchain/docker-compose.yml b/toolchain/docker-compose.yml new file mode 100644 index 0000000..28778a2 --- /dev/null +++ b/toolchain/docker-compose.yml @@ -0,0 +1,29 @@ +version: "3.5" + +services: + make: + image: thomasloven/mittos-build + build: + context: . + dockerfile: Dockerfile.build + volumes: + - ..:/opt + command: make + + emul: + image: thomasloven/mittos-run + build: + context: . + dockerfile: Dockerfile.run + volumes: + - ..:/opt + command: qemu-system-x86_64 -s -S -cdrom /opt/dist/mittos.iso -curses + + dbg: + image: thomasloven/mittos-run + build: + context: . + dockerfile: Dockerfile.run + volumes: + - ..:/opt + command: gdb -q -x /opt/toolchain/gdbinit \ No newline at end of file diff --git a/toolchain/gdbinit b/toolchain/gdbinit new file mode 100644 index 0000000..4c381b6 --- /dev/null +++ b/toolchain/gdbinit @@ -0,0 +1,16 @@ +set prompt \033[31m(gdb) \033[0m +set disassembly-flavor intel + +target remote emul:1234 + +define q +monitor quit +end + +define reg +monitor info registers +end + +define reset +monitor system_reset +end \ No newline at end of file