build(tools): rewrite makefile to be more efficient and easy to understand

Signed-off-by: EnderIce2 <enderice2@protonmail.com>
This commit is contained in:
EnderIce2 2025-02-26 23:07:36 +00:00
parent aab84cd3ab
commit 88a5f06325
No known key found for this signature in database
GPG Key ID: 2EE20AF089811A5A
3 changed files with 97 additions and 225 deletions

View File

@ -11,7 +11,8 @@
"git.openRepositoryInParentFolders": "always", "git.openRepositoryInParentFolders": "always",
"C_Cpp.autoAddFileAssociations": false, "C_Cpp.autoAddFileAssociations": false,
"conventionalCommits.scopes": [ "conventionalCommits.scopes": [
"initrd" "initrd",
"tools"
] ]
} }
} }

View File

@ -5,18 +5,21 @@ export PATH := $(CROSS_DIR):$(PATH)
BINUTILS_TAG = binutils-2_43_1 BINUTILS_TAG = binutils-2_43_1
GCC_TAG = releases/gcc-14.2.0 GCC_TAG = releases/gcc-14.2.0
QEMU_TAG = v9.2.0 QEMU_TAG = v9.2.0
GRUB_TAG = grub-2.12
QEMU_CLONE_PATH = /tmp/qemu
GCC_CLONE_PATH = /tmp/gcc
BINUTILS_CLONE_PATH = /tmp/binutils-gdb
default: default:
$(error Please specify a target) $(error Please specify a target)
all: do_tools do_limine __clone_all do_binutils do_gcc do_qemu all: do_tools do_limine __clone_qemu __clone_all_no_qemu do_binutils do_gcc do_qemu
clean: clean:
rm -f rep ep rm -f rep ep
rm -rf binutils-gdb rm -rf $(BINUTILS_CLONE_PATH)
rm -rf gcc rm -rf $(GCC_CLONE_PATH)
rm -rf qemu rm -rf $(QEMU_CLONE_PATH)
do_tools: do_tools:
gcc -w ReadEthernetPackets.c -o rep gcc -w ReadEthernetPackets.c -o rep
@ -32,11 +35,11 @@ else
endif endif
__clone_qemu: __clone_qemu:
ifeq ("$(wildcard ./qemu)", "") ifeq ("$(wildcard $(QEMU_CLONE_PATH))", "")
git clone --depth 1 -b ${QEMU_TAG} --single-branch https://gitlab.com/qemu-project/qemu.git qemu git clone --depth 1 -b ${QEMU_TAG} --single-branch https://gitlab.com/qemu-project/qemu.git $(QEMU_CLONE_PATH)
else else
$(info > TOOLS: Reseting qemu...) $(info > TOOLS: Reseting qemu...)
cd qemu && \ cd $(QEMU_CLONE_PATH) && \
git fetch origin && \ git fetch origin && \
git reset --hard ${QEMU_TAG} && \ git reset --hard ${QEMU_TAG} && \
git clean -dfx git clean -dfx
@ -46,11 +49,11 @@ endif
.PHONY: all clean __clone_binutils __clone_gcc __prep_cross __patch_cross __patch_cross_binutils __patch_cross_gcc .PHONY: all clean __clone_binutils __clone_gcc __prep_cross __patch_cross __patch_cross_binutils __patch_cross_gcc
__clone_binutils: __clone_binutils:
ifeq ("$(wildcard ./binutils-gdb)", "") ifeq ("$(wildcard $(BINUTILS_CLONE_PATH))", "")
git clone --depth 1 -b $(BINUTILS_TAG) --single-branch git://sourceware.org/git/binutils-gdb.git binutils-gdb git clone --depth 1 -b $(BINUTILS_TAG) --single-branch git://sourceware.org/git/binutils-gdb.git $(BINUTILS_CLONE_PATH)
else else
$(info > TOOLS: Reseting binutils-gdb...) $(info > TOOLS: Reseting binutils-gdb...)
cd binutils-gdb && \ cd $(BINUTILS_CLONE_PATH) && \
git fetch origin && \ git fetch origin && \
git reset --hard $(BINUTILS_TAG) && \ git reset --hard $(BINUTILS_TAG) && \
git clean -dfx git clean -dfx
@ -58,60 +61,43 @@ else
endif endif
__clone_gcc: __clone_gcc:
ifeq ("$(wildcard ./gcc)", "") ifeq ("$(wildcard $(GCC_CLONE_PATH))", "")
git clone --depth 1 -b $(GCC_TAG) --single-branch git://gcc.gnu.org/git/gcc.git gcc git clone --depth 1 -b $(GCC_TAG) --single-branch git://gcc.gnu.org/git/gcc.git $(GCC_CLONE_PATH)
else else
$(info > TOOLS: Reseting gcc...) $(info > TOOLS: Reseting gcc...)
cd gcc && \ cd $(GCC_CLONE_PATH) && \
git fetch origin && \ git fetch origin && \
git reset --hard $(GCC_TAG) && \ git reset --hard $(GCC_TAG) && \
git clean -dfx git clean -dfx
$(info > TOOLS: Operation completed for gcc) $(info > TOOLS: Operation completed for gcc)
endif endif
__clone_grub:
ifeq ("$(wildcard ./grub)", "")
git clone --depth 1 -b $(GRUB_TAG) https://git.savannah.gnu.org/git/grub.git grub
else
$(info > TOOLS: Reseting grub...)
cd grub && \
git fetch origin && \
git reset --hard $(GRUB_TAG) && \
git clean -dfx
$(info > TOOLS: Operation completed for grub)
endif
__patch_cross_binutils: __clone_binutils __patch_cross_binutils: __clone_binutils
$(info > TOOLS: Patching binutils-gcc) $(info > TOOLS: Patching binutils-gcc)
cd binutils-gdb && git apply ../binutils-gdb.patch cd $(BINUTILS_CLONE_PATH) && git apply $(CURDIR)/binutils-gdb.patch
$(info > TOOLS: Running automake for binutils-gdb/ld) $(info > TOOLS: Running automake for binutils-gdb/ld)
cd binutils-gdb/ld && automake cd $(BINUTILS_CLONE_PATH)/ld && automake
__patch_cross_gcc: __clone_gcc __patch_cross_gcc: __clone_gcc
$(info > TOOLS: Patching gcc) $(info > TOOLS: Patching gcc)
cd gcc && git apply ../gcc.patch cd $(GCC_CLONE_PATH) && git apply $(CURDIR)/gcc.patch
cd gcc && ./contrib/download_prerequisites cd $(GCC_CLONE_PATH) && ./contrib/download_prerequisites
$(info > TOOLS: Running autoconf for gcc/libstdc++-v3) $(info > TOOLS: Running autoconf for gcc/libstdc++-v3)
cd gcc/libstdc++-v3 && autoconf cd $(GCC_CLONE_PATH)/libstdc++-v3 && autoconf
__patch_cross_grub: __clone_grub
$(info > TOOLS: Patching grub)
cd grub && git apply ../grub.patch
__patch_cross_qemu: __clone_qemu __patch_cross_qemu: __clone_qemu
$(info > TOOLS: Patching qemu) $(info > TOOLS: Patching qemu)
cd qemu && git apply ../qemu.patch cd $(QEMU_CLONE_PATH) && git apply $(CURDIR)/qemu.patch
__patch_cross: __patch_cross_binutils __patch_cross_gcc __patch_cross_grub __patch_cross: __patch_cross_binutils __patch_cross_gcc
__prep_cross: __prep_cross:
mkdir -p cross mkdir -p cross
mkdir -p binutils-gdb/__build mkdir -p $(BINUTILS_CLONE_PATH)/__build
mkdir -p gcc/__build mkdir -p $(GCC_CLONE_PATH)/__build
__clone_all_no_qemu: __clone_grub __clone_binutils __clone_gcc __clone_all_no_qemu: __clone_binutils __clone_gcc
__clone_all: __clone_qemu __clone_all_no_qemu
cross_dev: cross_dev:
$(MAKE) __clone_binutils $(MAKE) __clone_binutils
@ -131,190 +117,84 @@ endif
ifeq ("$(wildcard ./qemu.patch.bk)", "") ifeq ("$(wildcard ./qemu.patch.bk)", "")
mv qemu.patch qemu.patch.bk mv qemu.patch qemu.patch.bk
endif endif
ifeq ("$(wildcard ./grub.patch.bk)", "")
mv grub.patch grub.patch.bk
endif
# binutils-gdb # binutils-gdb
cd binutils-gdb && \ cd $(BINUTILS_CLONE_PATH) && \
git add . && \ git add . && \
git diff --cached > ../binutils-gdb.patch git diff --cached > $(CURDIR)/binutils-gdb.patch
# gcc # gcc
cd gcc && \ cd $(GCC_CLONE_PATH) && \
git add . && \ git add . && \
git diff --cached > ../gcc.patch git diff --cached > $(CURDIR)/gcc.patch
# qemu # qemu
cd qemu && \ cd $(QEMU_CLONE_PATH) && \
git add . && \ git add . && \
git diff --cached > ../qemu.patch git diff --cached > $(CURDIR)/qemu.patch
# grub
cd grub && \ __do_binutils:
git add . && \ mkdir -p $(BINUTILS_CLONE_PATH)/__build
git diff --cached > ../grub.patch $(MAKE) __patch_cross_binutils
$(MAKE) __prep_cross
cd $(BINUTILS_CLONE_PATH)/__build && \
../configure --target=$(BUILD_TARGET) --prefix="$(CROSS_DIR)" --quiet \
--disable-nls \
--with-sysroot \
--disable-werror \
--disable-shared \
--enable-static \
--enable-static-link \
--disable-shared-plugins \
--disable-dynamicplugin \
--disable-tls \
--disable-pie \
&& \
make --quiet all -j$(shell nproc) && \
make --quiet install
__do_gcc:
mkdir -p $(GCC_CLONE_PATH)/__build
$(MAKE) __patch_cross_gcc
$(MAKE) __prep_cross
cd $(GCC_CLONE_PATH)/__build && \
../configure --target=$(BUILD_TARGET) --prefix="$(CROSS_DIR)" --quiet \
--disable-nls \
--enable-default-pie \
--enable-languages=c,c++ \
--without-headers \
--disable-shared \
--enable-static \
--enable-static-link \
--disable-tls \
--disable-pie \
&& \
make --quiet all-gcc -j$(shell nproc) && \
make --quiet all-target-libgcc -j$(shell nproc) && \
make --quiet install-gcc -j$(shell nproc) && \
make --quiet install-target-libgcc -j$(shell nproc)
do_binutils:
$(MAKE) __do_binutils BUILD_TARGET="x86_64-fennix"
$(MAKE) __do_binutils BUILD_TARGET="i386-fennix"
$(MAKE) __do_binutils BUILD_TARGET="arm-fennix"
$(MAKE) __do_binutils BUILD_TARGET="aarch64-fennix"
do_gcc:
$(MAKE) __do_gcc BUILD_TARGET="x86_64-fennix"
$(MAKE) __do_gcc BUILD_TARGET="i386-fennix"
$(MAKE) __do_gcc BUILD_TARGET="arm-fennix"
$(MAKE) __do_gcc BUILD_TARGET="aarch64-fennix"
do_qemu: do_qemu:
$(MAKE) __patch_cross_qemu $(MAKE) __patch_cross_qemu
$(MAKE) __prep_cross $(MAKE) __prep_cross
cd qemu && \ cd $(QEMU_CLONE_PATH) && \
bash ./configure --target-list=x86_64-softmmu,i386-softmmu,arm-softmmu,aarch64-softmmu \ bash ./configure --target-list=x86_64-softmmu,i386-softmmu,arm-softmmu,aarch64-softmmu \
--prefix="$(CROSS_DIR)" \ --prefix="$(CROSS_DIR)" \
--enable-gtk --disable-tools \ --enable-gtk \
--disable-gio --disable-virtfs --disable-vnc \ --disable-tools \
--disable-opengl && \ --disable-gio \
make --quiet -j$(shell nproc) && make --quiet install --disable-virtfs \
--disable-vnc \
__do_binutils_x86_64: --disable-opengl \
mkdir -p binutils-gdb/__build && \
cd binutils-gdb/__build && \ make --quiet -j$(shell nproc) && \
../configure --target=x86_64-fennix \
--prefix="$(CROSS_DIR)" --disable-nls --quiet \
--with-sysroot --enable-shared --disable-werror && \
make --quiet all -j$(shell nproc) && \
make --quiet install make --quiet install
__do_binutils_i386:
mkdir -p binutils-gdb/__build
cd binutils-gdb/__build && \
../configure --target=i386-fennix \
--prefix="$(CROSS_DIR)" --disable-nls --quiet \
--with-sysroot --enable-shared --disable-werror && \
make --quiet all -j$(shell nproc) && \
make --quiet install
__do_binutils_arm:
mkdir -p binutils-gdb/__build
cd binutils-gdb/__build && \
../configure --target=arm-fennix \
--prefix="$(CROSS_DIR)" --disable-nls --quiet \
--with-sysroot --enable-shared --disable-werror && \
make --quiet all -j$(shell nproc) && \
make --quiet install
__do_binutils_aarch64:
mkdir -p binutils-gdb/__build
cd binutils-gdb/__build && \
../configure --target=aarch64-fennix \
--prefix="$(CROSS_DIR)" --disable-nls --quiet \
--with-sysroot --enable-shared --disable-werror && \
make --quiet all -j$(shell nproc) && \
make --quiet install
__reset_binutils:
$(MAKE) __patch_cross_binutils
$(MAKE) __prep_cross
do_binutils:
$(MAKE) __reset_binutils
$(MAKE) __do_binutils_x86_64
$(MAKE) __reset_binutils
$(MAKE) __do_binutils_i386
$(MAKE) __reset_binutils
$(MAKE) __do_binutils_arm
$(MAKE) __reset_binutils
$(MAKE) __do_binutils_aarch64
__do_gcc_x86_64:
mkdir -p gcc/__build
cd gcc/__build && \
../configure --target=x86_64-fennix --quiet \
--prefix="$(CROSS_DIR)" --disable-nls --enable-default-pie \
--enable-languages=c,c++ --enable-shared --without-headers && \
make --quiet all-gcc -j$(shell nproc) && \
make --quiet all-target-libgcc -j$(shell nproc) && \
make --quiet install-gcc -j$(shell nproc) && \
make --quiet install-target-libgcc -j$(shell nproc)
__do_gcc_i386:
mkdir -p gcc/__build
cd gcc/__build && \
../configure --target=i386-fennix --quiet \
--prefix="$(CROSS_DIR)" --disable-nls --enable-default-pie \
--enable-languages=c,c++ --enable-shared --without-headers && \
make --quiet all-gcc -j$(shell nproc) && \
make --quiet all-target-libgcc -j$(shell nproc) && \
make --quiet install-gcc -j$(shell nproc) && \
make --quiet install-target-libgcc -j$(shell nproc)
__do_gcc_arm:
mkdir -p gcc/__build
cd gcc/__build && \
../configure --target=arm-fennix --quiet \
--prefix="$(CROSS_DIR)" --disable-nls --enable-default-pie \
--enable-languages=c,c++ --enable-shared --without-headers && \
make --quiet all-gcc -j$(shell nproc) && \
make --quiet all-target-libgcc -j$(shell nproc) && \
make --quiet install-gcc -j$(shell nproc) && \
make --quiet install-target-libgcc -j$(shell nproc)
__do_gcc_aarch64:
cd gcc/__build && \
../configure --target=aarch64-fennix --quiet \
--prefix="$(CROSS_DIR)" --disable-nls --enable-default-pie \
--enable-languages=c,c++ --enable-shared --without-headers && \
make --quiet all-gcc -j$(shell nproc) && \
make --quiet all-target-libgcc -j$(shell nproc) && \
make --quiet install-gcc -j$(shell nproc) && \
make --quiet install-target-libgcc -j$(shell nproc)
__reset_gcc:
$(MAKE) __patch_cross_gcc
$(MAKE) __prep_cross
do_gcc:
$(MAKE) __reset_gcc
$(MAKE) __do_gcc_x86_64
$(MAKE) __reset_gcc
$(MAKE) __do_gcc_i386
$(MAKE) __reset_gcc
$(MAKE) __do_gcc_arm
$(MAKE) __reset_gcc
$(MAKE) __do_gcc_aarch64
__do_grub_x86_64:
cd grub && ./bootstrap
mkdir -p grub/__build
cd grub/__build && \
../configure --target=x86_64-linux \
--disable-nls && \
make all -j$(shell nproc) && \
make install
__do_grub_i386:
cd grub && ./bootstrap
mkdir -p grub/__build
cd grub/__build && \
../configure --target=i386-linux \
--disable-nls && \
make all -j$(shell nproc) && \
make install
__do_grub_arm:
cd grub && ./bootstrap
mkdir -p grub/__build
cd grub/__build && \
../configure --target=arm-linux \
--disable-nls && \
make all -j$(shell nproc) && \
make install
__do_grub_aarch64:
cd grub && ./bootstrap
mkdir -p grub/__build
cd grub/__build && \
../configure --target=aarch64-linux \
--disable-nls && \
make all -j$(shell nproc) && \
make install
__reset_grub:
$(MAKE) __patch_cross_grub
$(MAKE) __prep_cross
do_grub:
$(MAKE) __reset_grub
$(MAKE) __do_grub_x86_64
$(MAKE) __reset_grub
$(MAKE) __do_grub_i386
$(MAKE) __reset_grub
$(MAKE) __do_grub_arm
$(MAKE) __reset_grub
$(MAKE) __do_grub_aarch64

View File

@ -1,9 +0,0 @@
diff --git a/.gitignore b/.gitignore
index 2105d87..58fe53f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -281,3 +281,4 @@ widthspec.bin
/xfs_test
/xzcompress_test
/zfs_test
+/__build