From cd3790cd95b21dfd9e3d211d4685d06bad262677 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Sun, 28 Jun 2026 16:22:36 -0400 Subject: [PATCH 01/10] Add sh scripts to build gcc cross compiler --- toolchain/.gitignore | 3 +++ toolchain/build_all.sh | 16 ++++++++++++++++ toolchain/build_binutils.sh | 27 +++++++++++++++++++++++++++ toolchain/build_gcc.sh | 37 +++++++++++++++++++++++++++++++++++++ toolchain/build_gdb.sh | 27 +++++++++++++++++++++++++++ 5 files changed, 110 insertions(+) create mode 100644 toolchain/.gitignore create mode 100755 toolchain/build_all.sh create mode 100755 toolchain/build_binutils.sh create mode 100755 toolchain/build_gcc.sh create mode 100755 toolchain/build_gdb.sh diff --git a/toolchain/.gitignore b/toolchain/.gitignore new file mode 100644 index 0000000..fb055a4 --- /dev/null +++ b/toolchain/.gitignore @@ -0,0 +1,3 @@ +* +!*.sh +!.gitignore diff --git a/toolchain/build_all.sh b/toolchain/build_all.sh new file mode 100755 index 0000000..c910032 --- /dev/null +++ b/toolchain/build_all.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +export TARGET=aarch64-unknown-elf +./build_binutils.sh +./build_gdb.sh +./build_gcc.sh + +export TARGET=i386-elf +./build_binutils.sh +./build_gdb.sh +./build_gcc.sh + +export TARGET=i686-elf +./build_binutils.sh +./build_gdb.sh +./build_gcc.sh diff --git a/toolchain/build_binutils.sh b/toolchain/build_binutils.sh new file mode 100755 index 0000000..20c0f06 --- /dev/null +++ b/toolchain/build_binutils.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -e + +BINUTILS_VERSION=${BINUTILS_VERSION:-"2.46.1"} + +BINUTILS_URL="https://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.xz" + +if [ ! -e "binutils-${BINUTILS_VERSION}.tar.xz" ]; then + wget $BINUTILS_URL + tar -xf "binutils-${BINUTILS_VERSION}.tar.xz" +fi + +export PREFIX=${PREFIX:-"$HOME/.local/opt/cross"} +export TARGET=${TARGET:-aarch64-unknown-elf} +export PATH="$PREFIX/bin:$PATH" + +mkdir -p "$PREFIX" + +cd "binutils-${BINUTILS_VERSION}" + +mkdir -p build-${TARGET} +cd build-${TARGET} + +../configure --target=${TARGET} --prefix="${PREFIX}" --with-sysroot --disable-nls --disable-werror --enable-default-execstack=no +make -j16 +make install diff --git a/toolchain/build_gcc.sh b/toolchain/build_gcc.sh new file mode 100755 index 0000000..c4d8580 --- /dev/null +++ b/toolchain/build_gcc.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +set -e + +GCC_VERSION=${GCC_VERSION:-"16.1.0"} + +GCC_URL="https://ftp.gnu.org/gnu/gcc/gcc-16.1.0/gcc-${GCC_VERSION}.tar.xz" + +if [ ! -e "gcc-${GCC_VERSION}.tar.xz" ]; then + wget $GCC_URL + tar -xf "gcc-${GCC_VERSION}.tar.xz" +fi + +export PREFIX=${PREFIX:-"$HOME/.local/opt/cross"} +export TARGET=${TARGET:-aarch64-unknown-elf} +export PATH="$PREFIX/bin:$PATH" + +if ! which -- ${TARGET}-as; then + echo ${TARGET}-as is not in the PATH + exit 1 +fi + +mkdir -p "$PREFIX" + +cd "gcc-${GCC_VERSION}" + +mkdir -p build-${TARGET} +cd build-${TARGET} + +../configure --target=${TARGET} --prefix="${PREFIX}" --disable-nls --enable-languages=c,c++ --without-headers --enable-initfini-array --disable-hosted-libstdcxx + +make all-gcc -j16 +make all-target-libgcc -j16 +make all-target-libstdc++-v3 -j16 +make install-gcc +make install-target-libgcc +make install-target-libstdc++-v3 diff --git a/toolchain/build_gdb.sh b/toolchain/build_gdb.sh new file mode 100755 index 0000000..446f1f0 --- /dev/null +++ b/toolchain/build_gdb.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -e + +GDB_VERSION=${GDB_VERSION:-"17.2"} + +GDB_URL="https://ftp.gnu.org/gnu/gdb/gdb-${GDB_VERSION}.tar.xz" + +if [ ! -e "gdb-${GDB_VERSION}.tar.xz" ]; then + wget $GDB_URL + tar -xf "gdb-${GDB_VERSION}.tar.xz" +fi + +export PREFIX=${PREFIX:-"$HOME/.local/opt/cross"} +export TARGET=${TARGET:-aarch64-unknown-elf} +export PATH="$PREFIX/bin:$PATH" + +mkdir -p "$PREFIX" + +cd "gdb-${GDB_VERSION}" + +mkdir -p build-${TARGET} +cd build-${TARGET} + +../configure --target=${TARGET} --prefix="${PREFIX}" --disable-werror +make all-gdb -j16 +make install-gdb From b87493c5afae0e69fc1c63a32a57257a4930c0b9 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Sun, 28 Jun 2026 16:40:18 -0400 Subject: [PATCH 02/10] Setup vars for gcc version and cross arch --- CMakeLists.txt | 3 ++- cmake/targets.cmake | 4 ++-- cmake/toolchain.cmake | 14 ++++++++------ 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5711e27..b628f32 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,8 @@ cmake_minimum_required(VERSION 3.15..3.20) set(CPU_ARCH i386) - +set(CROSS_ARCH ${CPU_ARCH}-elf) +set(CROSS_GCC_VERSION 16.1.0) set(CROSS_PREFIX "$ENV{HOME}/.local/opt/cross") set(CMAKE_TOOLCHAIN_FILE cmake/toolchain.cmake) diff --git a/cmake/targets.cmake b/cmake/targets.cmake index 1394917..b7548f5 100644 --- a/cmake/targets.cmake +++ b/cmake/targets.cmake @@ -29,7 +29,7 @@ function(cross_target_binary target) ${TARGET_LINK_FILES} --end-group -nostdlib - "-L${CROSS_PREFIX}/lib/gcc/i386-elf/12.2.0" + "-L${CROSS_PREFIX}/lib/gcc/${CROSS_ARCH}/${CROSS_GCC_VERSION}" -lgcc DEPENDS ${target} ${TARGET_LINK_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/link.ld) @@ -44,7 +44,7 @@ function(cross_target_binary target) ${TARGET_LINK_FILES} --end-group -nostdlib - "-L${CROSS_PREFIX}/lib/gcc/i386-elf/12.2.0" + "-L${CROSS_PREFIX}/lib/gcc/${CROSS_ARCH}/${CROSS_GCC_VERSION}" -lgcc DEPENDS ${target} ${TARGET_LINK_FILES}) diff --git a/cmake/toolchain.cmake b/cmake/toolchain.cmake index 8fb458f..f8e5e07 100644 --- a/cmake/toolchain.cmake +++ b/cmake/toolchain.cmake @@ -1,20 +1,22 @@ # set(CMAKE_SYSTEM_NAME Generic-ELF) set(CMAKE_SYSTEM_NAME Generic) -set(CMAKE_SYSTEM_PROCESSOR i386-elf) -set(CMAKE_SYSTEM_VERSION 12.2.0) +set(CMAKE_SYSTEM_PROCESSOR ${CROSS_ARCH}) +# TODO: does this do anything? +#set(CMAKE_SYSTEM_VERSION 12.2.0) +set(CMAKE_SYSTEM_VERSION ${CROSS_GCC_VERSION}) # set(tools /home/devel/gcc-4.7-linaro-rpi-gnueabihf) -set(CMAKE_C_COMPILER ${CROSS_PREFIX}/bin/i386-elf-gcc) +set(CMAKE_C_COMPILER ${CROSS_PREFIX}/bin/${CROSS_ARCH}-gcc) set(CMAKE_C_FLAGS "-g -Werror -ffreestanding") set(CMAKE_C_COMPILER_WORKS 1) -set(CMAKE_CXX_COMPILER ${CROSS_PREFIX}/bin/i386-elf-g++) +set(CMAKE_CXX_COMPILER ${CROSS_PREFIX}/bin/${CROSS_ARCH}-g++) set(CMAKE_CXX_FLAGS "-g -Werror -ffreestanding") set(CMAKE_CXX_COMPILER_WORKS 1) -set(CMAKE_AR "${CROSS_PREFIX}/bin/i386-elf-ar" CACHE FILEPATH "" FORCE) +set(CMAKE_AR "${CROSS_PREFIX}/bin/${CROSS_ARCH}-ar" CACHE FILEPATH "" FORCE) -set(CMAKE_LINKER "${CROSS_PREFIX}/bin/i386-elf-ld") +set(CMAKE_LINKER "${CROSS_PREFIX}/bin/${CROSS_ARCH}-ld") set(CMAKE_LINKER_FLAGS "HELLO WORLD") set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) From c308c8a2a04ddd87de1c8194a91fb31001856ec0 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Sun, 28 Jun 2026 16:42:27 -0400 Subject: [PATCH 03/10] Replace CPU_ARCH with CROSS_ARCH --- CMakeLists.txt | 3 +-- src/cpu/CMakeLists.txt | 2 +- src/cpu/{i386 => i386-elf}/CMakeLists.txt | 0 src/cpu/{i386 => i386-elf}/src/cpu.asm | 0 src/cpu/{i386 => i386-elf}/src/gdt.c | 0 src/cpu/{i386 => i386-elf}/src/idt.c | 0 src/cpu/{i386 => i386-elf}/src/interrupt.asm | 0 src/cpu/{i386 => i386-elf}/src/isr.c | 0 src/cpu/{i386 => i386-elf}/src/mmu.c | 0 src/cpu/{i386 => i386-elf}/src/paging.asm | 0 src/cpu/{i386 => i386-elf}/src/ports.asm | 0 src/cpu/{i386 => i386-elf}/src/tss.c | 0 12 files changed, 2 insertions(+), 3 deletions(-) rename src/cpu/{i386 => i386-elf}/CMakeLists.txt (100%) rename src/cpu/{i386 => i386-elf}/src/cpu.asm (100%) rename src/cpu/{i386 => i386-elf}/src/gdt.c (100%) rename src/cpu/{i386 => i386-elf}/src/idt.c (100%) rename src/cpu/{i386 => i386-elf}/src/interrupt.asm (100%) rename src/cpu/{i386 => i386-elf}/src/isr.c (100%) rename src/cpu/{i386 => i386-elf}/src/mmu.c (100%) rename src/cpu/{i386 => i386-elf}/src/paging.asm (100%) rename src/cpu/{i386 => i386-elf}/src/ports.asm (100%) rename src/cpu/{i386 => i386-elf}/src/tss.c (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index b628f32..8c7a874 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,6 @@ cmake_minimum_required(VERSION 3.15..3.20) -set(CPU_ARCH i386) -set(CROSS_ARCH ${CPU_ARCH}-elf) +set(CROSS_ARCH i386-elf) set(CROSS_GCC_VERSION 16.1.0) set(CROSS_PREFIX "$ENV{HOME}/.local/opt/cross") set(CMAKE_TOOLCHAIN_FILE cmake/toolchain.cmake) diff --git a/src/cpu/CMakeLists.txt b/src/cpu/CMakeLists.txt index 2e08f4f..ac7b942 100644 --- a/src/cpu/CMakeLists.txt +++ b/src/cpu/CMakeLists.txt @@ -1,5 +1,5 @@ set(TARGET cpu) -add_subdirectory(${CPU_ARCH}) # defined in root CMakeLists.txt +add_subdirectory(${CROSS_ARCH}) # defined in root CMakeLists.txt target_link_libraries(${TARGET} libc util kernel) target_include_directories(${TARGET} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/src/cpu/i386/CMakeLists.txt b/src/cpu/i386-elf/CMakeLists.txt similarity index 100% rename from src/cpu/i386/CMakeLists.txt rename to src/cpu/i386-elf/CMakeLists.txt diff --git a/src/cpu/i386/src/cpu.asm b/src/cpu/i386-elf/src/cpu.asm similarity index 100% rename from src/cpu/i386/src/cpu.asm rename to src/cpu/i386-elf/src/cpu.asm diff --git a/src/cpu/i386/src/gdt.c b/src/cpu/i386-elf/src/gdt.c similarity index 100% rename from src/cpu/i386/src/gdt.c rename to src/cpu/i386-elf/src/gdt.c diff --git a/src/cpu/i386/src/idt.c b/src/cpu/i386-elf/src/idt.c similarity index 100% rename from src/cpu/i386/src/idt.c rename to src/cpu/i386-elf/src/idt.c diff --git a/src/cpu/i386/src/interrupt.asm b/src/cpu/i386-elf/src/interrupt.asm similarity index 100% rename from src/cpu/i386/src/interrupt.asm rename to src/cpu/i386-elf/src/interrupt.asm diff --git a/src/cpu/i386/src/isr.c b/src/cpu/i386-elf/src/isr.c similarity index 100% rename from src/cpu/i386/src/isr.c rename to src/cpu/i386-elf/src/isr.c diff --git a/src/cpu/i386/src/mmu.c b/src/cpu/i386-elf/src/mmu.c similarity index 100% rename from src/cpu/i386/src/mmu.c rename to src/cpu/i386-elf/src/mmu.c diff --git a/src/cpu/i386/src/paging.asm b/src/cpu/i386-elf/src/paging.asm similarity index 100% rename from src/cpu/i386/src/paging.asm rename to src/cpu/i386-elf/src/paging.asm diff --git a/src/cpu/i386/src/ports.asm b/src/cpu/i386-elf/src/ports.asm similarity index 100% rename from src/cpu/i386/src/ports.asm rename to src/cpu/i386-elf/src/ports.asm diff --git a/src/cpu/i386/src/tss.c b/src/cpu/i386-elf/src/tss.c similarity index 100% rename from src/cpu/i386/src/tss.c rename to src/cpu/i386-elf/src/tss.c From bcb668a37ae74b1dc692d01eab9adab92ba5f870 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Sun, 28 Jun 2026 21:03:54 -0400 Subject: [PATCH 04/10] Set versions in build_all.sh --- toolchain/build_all.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/toolchain/build_all.sh b/toolchain/build_all.sh index c910032..1eb0de0 100755 --- a/toolchain/build_all.sh +++ b/toolchain/build_all.sh @@ -1,5 +1,11 @@ #!/bin/bash +set -e + +export BINUTILS_VERSION="2.46.1" +export GDB_VERSION="17.2" +export GCC_VERSION="16.1.0" + export TARGET=aarch64-unknown-elf ./build_binutils.sh ./build_gdb.sh From fd3848e3047129ad2aee489d874af5a0052b908a Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Mon, 29 Jun 2026 22:06:34 -0400 Subject: [PATCH 05/10] Update install_cross.sh to support different targets --- install_cross.sh | 174 ++++++++++++++++++++++++++--------------------- 1 file changed, 96 insertions(+), 78 deletions(-) diff --git a/install_cross.sh b/install_cross.sh index 2dde837..ba2f30f 100755 --- a/install_cross.sh +++ b/install_cross.sh @@ -2,45 +2,61 @@ set -e -CROSS_PREFIX=${CROSS_PREFIX:-${HOME}/.local/opt/cross} FORCE_DOWNLOAD=${FORCE_DOWNLOAD:-} -CROSS_ARCH=i386-elf -CROSS_BUILD=${PWD}/cross-build/${CROSS_ARCH} - # Make parallel -J="" +J=${J:-} # J="-j" # J="-j128" -export PREFIX=${CROSS_PREFIX} -export TARGET=i386-elf -export PATH=${CROSS_PREFIX}/bin:$PATH - -BINUTILS_VERSION=2.40 -BINUTILS_URL="http://ftpmirror.gnu.org/binutils/binutils-${BINUTILS_VERSION}.tar.xz" +export PREFIX=${PREFIX:-"$HOME/.local/opt/cross"} +export TARGET=${TARGET:-i386-elf} +export PATH="${PREFIX}/bin:$PATH" -GCC_VERSION=12.2.0 -GCC_URL="http://ftpmirror.gnu.org/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz" +BINUTILS_VERSION=${BINUTILS_VERSION:-"2.46.1"} +GCC_VERSION=${GCC_VERSION:-"16.1.0"} +GDB_VERSION=${GDB_VERSION:-"17.2"} -GDB_VERSION=11.1 -GDB_URL="http://ftpmirror.gnu.org/gdb/gdb-${GDB_VERSION}.tar.xz" +CROSS_BUILD=${PWD}/cross-build COLOR_GREEN="\033[0;32m" COLOR_BLUE="\033[0;34m" COLOR_WHITE="\033[1;37m" COLOR_RESET="\033[0m" - -echo_section() { - echo -e "${COLOR_BLUE}:: ${COLOR_WHITE}$*${COLOR_RESET}" -} - -echo_task() { - echo -e "${COLOR_GREEN}==> ${COLOR_WHITE}$*${COLOR_RESET}" -} - -echo_step() { - echo -e " ${COLOR_BLUE} -> ${COLOR_RESET}$*" +echo_section() { echo -e "${COLOR_BLUE}:: ${COLOR_WHITE}$*${COLOR_RESET}"; } +echo_task() { echo -e "${COLOR_GREEN}==> ${COLOR_WHITE}$*${COLOR_RESET}"; } +echo_step() { echo -e " ${COLOR_BLUE} -> ${COLOR_RESET}$*"; } + +echo_section Building with Configuration + +echo PREFIX=${PREFIX} +echo TARGET=${TARGET} +echo J=${J} +echo FORCE_DOWNLOAD=${FORCE_DOWNLOAD} +echo BINUTILS_VERSION=${BINUTILS_VERSION} +echo GCC_VERSION=${GCC_VERSION} +echo GDB_VERSION=${GDB_VERSION} +echo CROSS_BUILD=${CROSS_BUILD} + +install_dependencies() { + echo_section "Installing dependencies" + + echo_step "Updating package cache" + sudo apt-get update >/dev/null + + echo_step "Installing dependencies" + sudo apt-get install -y \ + build-essential \ + wget \ + gcc \ + xz-utils \ + bison \ + flex \ + libgmp3-dev \ + libgmp-dev \ + libmpfr-dev \ + texinfo \ + >/dev/null } download_and_extract() { @@ -50,39 +66,43 @@ download_and_extract() { echo_task Fetch ${name} from ${url} + cd "${CROSS_BUILD}" + if [ ! -e ${name} ] || [ ! -z ${FORCE_DOWNLOAD} ]; then echo_step "Downloading ${url}" wget -O ${name} ${url} + else + echo_step "Archive ${name} already exists" fi - if [ ! -e ${1} ] || [ ! -z ${FORCE_DOWNLOAD} ] || [ -z ${FORCE_EXTRACT} ]; then + if [ ! -e ${1} ] || [ ! -z ${FORCE_DOWNLOAD} ]; then echo_step "Extracting ${name}" tar -xf ${name} + else + echo_step "Source directory ${1} already exists" fi } install_binutils() { local name build_dir name=binutils-${BINUTILS_VERSION} - build_dir=i386-${name}-build + build_dir=build-${TARGET} echo_section "Build & Install ${name}" - download_and_extract ${name} ${BINUTILS_URL} - - cd ${name} + cd "${CROSS_BUILD}/${name}" echo_task "Creating build dir ${build_dir}" # Create temporary build dir - mkdir -p ${build_dir} - cd ${build_dir} + mkdir -p "${build_dir}" + cd "${build_dir}" echo_task Configure project ../configure \ - --prefix="${CROSS_PREFIX}" \ - --target=i386-elf \ + --prefix="${PREFIX}" \ + --target=${TARGET} \ --with-sysroot \ --disable-nls \ --disable-werror \ @@ -107,113 +127,111 @@ install_binutils() { echo_task "Finished ${name}" } -install_gcc() { +install_gdb() { local name build_dir - name=gcc-${GCC_VERSION} - build_dir=i386-${name}-build + name=gdb-${GDB_VERSION} + build_dir=build-${TARGET} echo_section "Build & Install ${name}" - download_and_extract ${name} ${GCC_URL} + download_and_extract ${name} ${GDB_URL} cd ${name} - echo_task Installing project dependencies - - ./contrib/download_prerequisites - echo_task "Creating build dir ${build_dir}" # Create temporary build dir - mkdir -p ${build_dir} - cd ${build_dir} + mkdir -p "${build_dir}" + cd "${build_dir}" echo_task Configure project ../configure \ - --prefix="$PREFIX" \ - --target=i386-elf \ - --disable-nls \ - --disable-werror \ - --disable-multilib \ - --without-headers \ - --enable-languages=c,c++ + --target=${TARGET} \ + --prefix="${PREFIX}" echo_task Building... # Build - make all-gcc - make all-target-libgcc + make ${J} echo_task Installing... # Package - make ${J} install-gcc - make ${J} install-target-libgcc + make install echo_task "Finished ${name}" } -install_gdb() { +install_gcc() { local name build_dir - name=gdb-${GDB_VERSION} - build_dir=i386-${name}-build + name=gcc-${GCC_VERSION} + build_dir=build-${TARGET} echo_section "Build & Install ${name}" - download_and_extract ${name} ${GDB_URL} + cd "${CROSS_BUILD}/${name}" - cd ${name} + echo_task Installing project dependencies + + ./contrib/download_prerequisites echo_task "Creating build dir ${build_dir}" # Create temporary build dir - mkdir -p ${build_dir} - cd ${build_dir} + mkdir -p "${build_dir}" + cd "${build_dir}" echo_task Configure project ../configure \ - --target=i386-elf \ - --prefix="$PREFIX" \ - --program-prefix=i386-elf- + --prefix="${PREFIX}" \ + --target=${TARGET} \ + --disable-nls \ + --disable-werror \ + --disable-multilib \ + --without-headers \ + --enable-languages=c,c++ echo_task Building... # Build - make ${J} + make all-gcc ${J} + make all-target-libgcc ${J} echo_task Installing... # Package - make install + make install-gcc + make install-target-libgcc echo_task "Finished ${name}" } START_TIME=${SECONDS} +install_dependencies + echo_section "Create directories" -echo_step "Create cross target install prefix ${CROSS_PREFIX}" -mkdir -p ${CROSS_PREFIX} +echo_step "Create cross target install prefix ${PREFIX}" +mkdir -p ${PREFIX} echo_step "Create cross target build directory ${CROSS_BUILD}" mkdir -p ${CROSS_BUILD} echo '*' > ${CROSS_BUILD}/.gitignore +echo_step "Enter cross target build directory ${CROSS_BUILD}" cd ${CROSS_BUILD} -echo_section "Installing dependencies..." - -echo_step "Updating package cache" -sudo apt-get update >/dev/null +echo_section "Downloading Source" -echo_step "Installing dependencies" -sudo apt-get install -y wget gcc xz-utils texinfo libgmp-dev >/dev/null +download_and_extract binutils-${BINUTILS_VERSION} "https://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.xz" +download_and_extract gdb-${GDB_VERSION} "https://ftp.gnu.org/gnu/gdb/gdb-${GDB_VERSION}.tar.xz" +download_and_extract gcc-${GCC_VERSION} "https://ftp.gnu.org/gnu/gcc/gcc-16.1.0/gcc-${GCC_VERSION}.tar.xz" -# install_binutils -# install_gdb +install_binutils +install_gdb install_gcc ELAPSED=$((SECONDS - START_TIME)) From 1aaa3ccf0b146aa07530f4e6fc6adff4552a12a9 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Mon, 29 Jun 2026 22:06:53 -0400 Subject: [PATCH 06/10] Remove toolchain/ --- toolchain/.gitignore | 3 --- toolchain/build_all.sh | 22 ---------------------- toolchain/build_binutils.sh | 27 --------------------------- toolchain/build_gcc.sh | 37 ------------------------------------- toolchain/build_gdb.sh | 27 --------------------------- 5 files changed, 116 deletions(-) delete mode 100644 toolchain/.gitignore delete mode 100755 toolchain/build_all.sh delete mode 100755 toolchain/build_binutils.sh delete mode 100755 toolchain/build_gcc.sh delete mode 100755 toolchain/build_gdb.sh diff --git a/toolchain/.gitignore b/toolchain/.gitignore deleted file mode 100644 index fb055a4..0000000 --- a/toolchain/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!*.sh -!.gitignore diff --git a/toolchain/build_all.sh b/toolchain/build_all.sh deleted file mode 100755 index 1eb0de0..0000000 --- a/toolchain/build_all.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -set -e - -export BINUTILS_VERSION="2.46.1" -export GDB_VERSION="17.2" -export GCC_VERSION="16.1.0" - -export TARGET=aarch64-unknown-elf -./build_binutils.sh -./build_gdb.sh -./build_gcc.sh - -export TARGET=i386-elf -./build_binutils.sh -./build_gdb.sh -./build_gcc.sh - -export TARGET=i686-elf -./build_binutils.sh -./build_gdb.sh -./build_gcc.sh diff --git a/toolchain/build_binutils.sh b/toolchain/build_binutils.sh deleted file mode 100755 index 20c0f06..0000000 --- a/toolchain/build_binutils.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -set -e - -BINUTILS_VERSION=${BINUTILS_VERSION:-"2.46.1"} - -BINUTILS_URL="https://ftp.gnu.org/gnu/binutils/binutils-${BINUTILS_VERSION}.tar.xz" - -if [ ! -e "binutils-${BINUTILS_VERSION}.tar.xz" ]; then - wget $BINUTILS_URL - tar -xf "binutils-${BINUTILS_VERSION}.tar.xz" -fi - -export PREFIX=${PREFIX:-"$HOME/.local/opt/cross"} -export TARGET=${TARGET:-aarch64-unknown-elf} -export PATH="$PREFIX/bin:$PATH" - -mkdir -p "$PREFIX" - -cd "binutils-${BINUTILS_VERSION}" - -mkdir -p build-${TARGET} -cd build-${TARGET} - -../configure --target=${TARGET} --prefix="${PREFIX}" --with-sysroot --disable-nls --disable-werror --enable-default-execstack=no -make -j16 -make install diff --git a/toolchain/build_gcc.sh b/toolchain/build_gcc.sh deleted file mode 100755 index c4d8580..0000000 --- a/toolchain/build_gcc.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash - -set -e - -GCC_VERSION=${GCC_VERSION:-"16.1.0"} - -GCC_URL="https://ftp.gnu.org/gnu/gcc/gcc-16.1.0/gcc-${GCC_VERSION}.tar.xz" - -if [ ! -e "gcc-${GCC_VERSION}.tar.xz" ]; then - wget $GCC_URL - tar -xf "gcc-${GCC_VERSION}.tar.xz" -fi - -export PREFIX=${PREFIX:-"$HOME/.local/opt/cross"} -export TARGET=${TARGET:-aarch64-unknown-elf} -export PATH="$PREFIX/bin:$PATH" - -if ! which -- ${TARGET}-as; then - echo ${TARGET}-as is not in the PATH - exit 1 -fi - -mkdir -p "$PREFIX" - -cd "gcc-${GCC_VERSION}" - -mkdir -p build-${TARGET} -cd build-${TARGET} - -../configure --target=${TARGET} --prefix="${PREFIX}" --disable-nls --enable-languages=c,c++ --without-headers --enable-initfini-array --disable-hosted-libstdcxx - -make all-gcc -j16 -make all-target-libgcc -j16 -make all-target-libstdc++-v3 -j16 -make install-gcc -make install-target-libgcc -make install-target-libstdc++-v3 diff --git a/toolchain/build_gdb.sh b/toolchain/build_gdb.sh deleted file mode 100755 index 446f1f0..0000000 --- a/toolchain/build_gdb.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -set -e - -GDB_VERSION=${GDB_VERSION:-"17.2"} - -GDB_URL="https://ftp.gnu.org/gnu/gdb/gdb-${GDB_VERSION}.tar.xz" - -if [ ! -e "gdb-${GDB_VERSION}.tar.xz" ]; then - wget $GDB_URL - tar -xf "gdb-${GDB_VERSION}.tar.xz" -fi - -export PREFIX=${PREFIX:-"$HOME/.local/opt/cross"} -export TARGET=${TARGET:-aarch64-unknown-elf} -export PATH="$PREFIX/bin:$PATH" - -mkdir -p "$PREFIX" - -cd "gdb-${GDB_VERSION}" - -mkdir -p build-${TARGET} -cd build-${TARGET} - -../configure --target=${TARGET} --prefix="${PREFIX}" --disable-werror -make all-gdb -j16 -make install-gdb From dc202cfeaf60eca40a8ed01452c254e3742d7548 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Tue, 30 Jun 2026 22:27:55 -0400 Subject: [PATCH 07/10] Go back to gcc 12 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c7a874..d1c548d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.15..3.20) set(CROSS_ARCH i386-elf) -set(CROSS_GCC_VERSION 16.1.0) +set(CROSS_GCC_VERSION 12.2.0) set(CROSS_PREFIX "$ENV{HOME}/.local/opt/cross") set(CMAKE_TOOLCHAIN_FILE cmake/toolchain.cmake) From 8c67c8191782a3cb8ac41006851fbccdc9d3c78a Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Tue, 30 Jun 2026 22:29:32 -0400 Subject: [PATCH 08/10] Downgrade cross compiler versions --- install_cross.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/install_cross.sh b/install_cross.sh index ba2f30f..6c41654 100755 --- a/install_cross.sh +++ b/install_cross.sh @@ -13,9 +13,9 @@ export PREFIX=${PREFIX:-"$HOME/.local/opt/cross"} export TARGET=${TARGET:-i386-elf} export PATH="${PREFIX}/bin:$PATH" -BINUTILS_VERSION=${BINUTILS_VERSION:-"2.46.1"} -GCC_VERSION=${GCC_VERSION:-"16.1.0"} -GDB_VERSION=${GDB_VERSION:-"17.2"} +BINUTILS_VERSION=${BINUTILS_VERSION:-"2.40"} +GCC_VERSION=${GCC_VERSION:-"12.2.0"} +GDB_VERSION=${GDB_VERSION:-"11.1"} CROSS_BUILD=${PWD}/cross-build From 2bea96c8a124671b3fbdfc71d46b2d05085d4cda Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Tue, 30 Jun 2026 22:37:31 -0400 Subject: [PATCH 09/10] Fix cpu target path --- tests/src/cpu/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/src/cpu/CMakeLists.txt b/tests/src/cpu/CMakeLists.txt index 8e88efd..35b396b 100644 --- a/tests/src/cpu/CMakeLists.txt +++ b/tests/src/cpu/CMakeLists.txt @@ -1,11 +1,11 @@ unit_test( TARGET test_mmu TEST_FILES test_mmu.cpp - TARGET_FILES cpu/i386/src/mmu.c + TARGET_FILES cpu/i386-elf/src/mmu.c ) unit_test( TARGET test_gdt TEST_FILES test_gdt.cpp - TARGET_FILES cpu/i386/src/gdt.c + TARGET_FILES cpu/i386-elf/src/gdt.c ) From d83b481c053c186d9042adde2bf8da4bcb5a63c9 Mon Sep 17 00:00:00 2001 From: Thomas Harrison Date: Tue, 30 Jun 2026 22:37:37 -0400 Subject: [PATCH 10/10] Disable test jobs --- .github/workflows/ci.yml | 49 ++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6945409..ddc9bee 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,33 +16,33 @@ env: TEST_DIR: "${{ github.workspace }}/tests" jobs: - test: - runs-on: ubuntu-latest + # test: + # runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 + # steps: + # - uses: actions/checkout@v6 - - name: Install dependencies - run: sudo apt-get install -y build-essential gcc-multilib g++-multilib + # - name: Install dependencies + # run: sudo apt-get install -y build-essential gcc-multilib g++-multilib - - name: Install gcovr - run: pip install gcovr + # - name: Install gcovr + # run: pip install gcovr - - name: Setup project - run: cmake -S ${TEST_DIR} -B ${BUILD_DIR} -DCMAKE_BUILD_TYPE=Debug + # - name: Setup project + # run: cmake -S ${TEST_DIR} -B ${BUILD_DIR} -DCMAKE_BUILD_TYPE=Debug - - name: Build - run: cmake --build ${BUILD_DIR} + # - name: Build + # run: cmake --build ${BUILD_DIR} - # TODO reenable testing once arch. is stable again - # - name: Test - # working-directory: build - # run: ctest -V + # # TODO reenable testing once arch. is stable again + # # - name: Test + # # working-directory: build + # # run: ctest -V - # TODO re-enable this once coverage is complete - # - name: Test with Coverage - # working-directory: build - # run: cmake --build ${BUILD_DIR} --target os_test_coverage + # # TODO re-enable this once coverage is complete + # # - name: Test with Coverage + # # working-directory: build + # # run: cmake --build ${BUILD_DIR} --target os_test_coverage lint: runs-on: ubuntu-latest @@ -69,7 +69,9 @@ jobs: with: dry-run: ${{ github.ref != 'refs/heads/main' }} - needs: [test, lint] + needs: + # - test + - lint permissions: contents: write @@ -78,7 +80,10 @@ jobs: runs-on: ubuntu-latest if: always() - needs: [test, lint, increment_version] + needs: + # - test + - lint + - increment_version timeout-minutes: 1