Add make toolchain script and reorganise source tree
This commit is contained in:
parent
d624a35427
commit
f7b0f240d3
42
Makefile
42
Makefile
@ -1,43 +1,7 @@
|
|||||||
CC = gcc
|
|
||||||
LD = ld
|
|
||||||
|
|
||||||
CFLAGS = -O2 -pipe -Wall -Wextra
|
|
||||||
|
|
||||||
INTERNAL_CFLAGS = \
|
|
||||||
-m32 \
|
|
||||||
-ffreestanding \
|
|
||||||
-nostdlib \
|
|
||||||
-masm=intel \
|
|
||||||
-fno-pic \
|
|
||||||
-mno-sse \
|
|
||||||
-mno-sse2 \
|
|
||||||
-ffreestanding \
|
|
||||||
-fno-stack-protector \
|
|
||||||
-I.
|
|
||||||
|
|
||||||
LDFLAGS =
|
|
||||||
|
|
||||||
INTERNAL_LDFLAGS = \
|
|
||||||
-m elf_i386 \
|
|
||||||
-nostdlib \
|
|
||||||
-Tlinker.ld
|
|
||||||
|
|
||||||
.PHONY: all clean
|
.PHONY: all clean
|
||||||
|
|
||||||
C_FILES := $(shell find ./ -type f -name '*.c')
|
all:
|
||||||
OBJ := $(C_FILES:.c=.o)
|
$(MAKE) -C src all
|
||||||
|
|
||||||
all: qloader2.bin
|
|
||||||
|
|
||||||
qloader2.bin: bootsect/bootsect.bin $(OBJ)
|
|
||||||
$(LD) $(LDFLAGS) $(INTERNAL_LDFLAGS) $(OBJ) -o stage2.bin
|
|
||||||
cat bootsect/bootsect.bin stage2.bin > $@
|
|
||||||
|
|
||||||
bootsect/bootsect.bin: bootsect/bootsect.asm
|
|
||||||
cd bootsect && nasm bootsect.asm -fbin -o bootsect.bin
|
|
||||||
|
|
||||||
%.o: %.c
|
|
||||||
$(CC) $(CFLAGS) $(INTERNAL_CFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(OBJ) bootsect/bootsect.bin
|
$(MAKE) -C src clean
|
||||||
|
@ -11,7 +11,7 @@ fi
|
|||||||
# Variables.
|
# Variables.
|
||||||
DEVICE="$1"
|
DEVICE="$1"
|
||||||
MBR="$(mktemp)"
|
MBR="$(mktemp)"
|
||||||
QLOADER2="qloader2.bin"
|
QLOADER2="src/qloader2.bin"
|
||||||
|
|
||||||
# Copy the loader to the device.
|
# Copy the loader to the device.
|
||||||
dd if="$DEVICE" of="$MBR" bs=1 count=64 skip=446
|
dd if="$DEVICE" of="$MBR" bs=1 count=64 skip=446
|
||||||
|
44
src/Makefile
Normal file
44
src/Makefile
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
CC = ../toolchain/bin/i386-elf-gcc
|
||||||
|
|
||||||
|
CFLAGS = -O2 -pipe -Wall -Wextra
|
||||||
|
|
||||||
|
INTERNAL_CFLAGS = \
|
||||||
|
-ffreestanding \
|
||||||
|
-masm=intel \
|
||||||
|
-fno-pic \
|
||||||
|
-mno-sse \
|
||||||
|
-mno-sse2 \
|
||||||
|
-mno-mmx \
|
||||||
|
-mno-80387 \
|
||||||
|
-ffreestanding \
|
||||||
|
-fno-stack-protector \
|
||||||
|
-I.
|
||||||
|
|
||||||
|
LDFLAGS = -O2
|
||||||
|
|
||||||
|
INTERNAL_LDFLAGS = \
|
||||||
|
-nostdlib \
|
||||||
|
-no-pie \
|
||||||
|
-lgcc \
|
||||||
|
-static-libgcc \
|
||||||
|
-Tlinker.ld
|
||||||
|
|
||||||
|
.PHONY: all clean
|
||||||
|
|
||||||
|
C_FILES := $(shell find ./ -type f -name '*.c')
|
||||||
|
OBJ := $(C_FILES:.c=.o)
|
||||||
|
|
||||||
|
all: qloader2.bin
|
||||||
|
|
||||||
|
qloader2.bin: bootsect/bootsect.bin $(OBJ)
|
||||||
|
$(CC) $(LDFLAGS) $(INTERNAL_LDFLAGS) $(OBJ) -o stage2.bin
|
||||||
|
cat bootsect/bootsect.bin stage2.bin > $@
|
||||||
|
|
||||||
|
bootsect/bootsect.bin: bootsect/bootsect.asm
|
||||||
|
cd bootsect && nasm bootsect.asm -fbin -o bootsect.bin
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) $(CFLAGS) $(INTERNAL_CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(OBJ) bootsect/bootsect.bin
|
3
toolchain/.gitignore
vendored
Normal file
3
toolchain/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
||||||
|
!make_toolchain.sh
|
58
toolchain/make_toolchain.sh
Executable file
58
toolchain/make_toolchain.sh
Executable file
@ -0,0 +1,58 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -x
|
||||||
|
|
||||||
|
PREFIX="$(pwd)"
|
||||||
|
TARGET=i386-elf
|
||||||
|
BINUTILSVERSION=2.33.1
|
||||||
|
GCCVERSION=9.2.0
|
||||||
|
|
||||||
|
if [ -z "$MAKEFLAGS" ]; then
|
||||||
|
MAKEFLAGS="$1"
|
||||||
|
fi
|
||||||
|
export MAKEFLAGS
|
||||||
|
|
||||||
|
export PATH="$PREFIX/bin:$PATH"
|
||||||
|
|
||||||
|
if [ -x "$(command -v gmake)" ]; then
|
||||||
|
mkdir -p "$PREFIX/bin"
|
||||||
|
cat <<EOF >"$PREFIX/bin/make"
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
gmake "\$@"
|
||||||
|
EOF
|
||||||
|
chmod +x "$PREFIX/bin/make"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
|
||||||
|
if [ ! -f binutils-$BINUTILSVERSION.tar.gz ]; then
|
||||||
|
wget https://ftp.gnu.org/gnu/binutils/binutils-$BINUTILSVERSION.tar.gz
|
||||||
|
fi
|
||||||
|
if [ ! -f gcc-$GCCVERSION.tar.gz ]; then
|
||||||
|
wget https://ftp.gnu.org/gnu/gcc/gcc-$GCCVERSION/gcc-$GCCVERSION.tar.gz
|
||||||
|
fi
|
||||||
|
|
||||||
|
tar -xf binutils-$BINUTILSVERSION.tar.gz
|
||||||
|
tar -xf gcc-$GCCVERSION.tar.gz
|
||||||
|
|
||||||
|
rm -rf build-gcc build-binutils
|
||||||
|
|
||||||
|
mkdir build-binutils
|
||||||
|
cd build-binutils
|
||||||
|
../binutils-$BINUTILSVERSION/configure --target=$TARGET --prefix="$PREFIX" --with-sysroot --disable-nls --disable-werror
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
cd gcc-$GCCVERSION
|
||||||
|
contrib/download_prerequisites
|
||||||
|
cd ..
|
||||||
|
mkdir build-gcc
|
||||||
|
cd build-gcc
|
||||||
|
../gcc-$GCCVERSION/configure --target=$TARGET --prefix="$PREFIX" --disable-nls --enable-languages=c --without-headers
|
||||||
|
make all-gcc
|
||||||
|
make all-target-libgcc
|
||||||
|
make install-gcc
|
||||||
|
make install-target-libgcc
|
Loading…
Reference in New Issue
Block a user