diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f9585d5..762f18f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,11 +17,8 @@ jobs: - name: nasm run: brew install nasm - - name: setup - run: ./setup.sh - - - name: build - run: ./build.sh + - name: make + run: make all build-ubuntu: runs-on: ubuntu-latest @@ -34,8 +31,5 @@ jobs: - name: install nasm run: sudo apt install nasm - - name: setup - run: ./setup.sh - - - name: build - run: ./build.sh \ No newline at end of file + - name: make + run: make all diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e683a7d --- /dev/null +++ b/Makefile @@ -0,0 +1,44 @@ + +# ============================================================================= +# BareMetal -- a 64-bit OS written in Assembly for x86-64 systems +# Copyright (C) 2025 Tom Everett -- see LICENSE.TXT +# +# Version 1.0 +# ============================================================================= + +include mk/build.mk + +# curl +ifneq ("/usr/bin/curl,"") +CURL_EXISTS = 1 +else +CURL_EXISTS = 0 +endif + +OBJDIR=bin +SRCDIR=src +BAREMETAL_REPO=https://raw.githubusercontent.com/ReturnInfinity/BareMetal/master + +all: apps + +apps: $(OBJDIR)/monitor.bin + +$(OBJDIR)/monitor.bin: objdir $(SRCDIR)/monitor.asm $(SRCDIR)/api/libBareMetal.asm + $(NASM) $(SRCDIR)/monitor.asm -o $(OBJDIR)/monitor.bin -l $(OBJDIR)/monitor-debug.txt -I $(SRCDIR) + +$(SRCDIR)/api/libBareMetal.asm: + mkdir $(SRCDIR)/api +ifeq ($(CURL_EXISTS), 1) + curl -s -o $(SRCDIR)/api/libBareMetal.asm $(BAREMETAL_REPO)/api/libBareMetal.asm +else + wget -q $(BAREMETAL_REPO)/api/libBareMetal.asm + mv libBareMetal.asm $(SRCDIR)/api/ +endif +clean: + rm -rf $(OBJDIR) + rm -rf $(SRCDIR)/api/ + +objdir: + mkdir -p $(OBJDIR) + + diff --git a/build.sh b/build.sh deleted file mode 100755 index 1d8f281..0000000 --- a/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -cd src -nasm monitor.asm -o ../bin/monitor.bin -l ../bin/monitor-debug.txt diff --git a/clean.sh b/clean.sh deleted file mode 100755 index 8360e72..0000000 --- a/clean.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -rm -rf src/api/ -rm -rf bin/ diff --git a/mk/build.mk b/mk/build.mk new file mode 100644 index 0000000..ad62d65 --- /dev/null +++ b/mk/build.mk @@ -0,0 +1,15 @@ + +# ============================================================================= +# BareMetal -- a 64-bit OS written in Assembly for x86-64 systems +# Copyright (C) 2025 Tom Everett -- see LICENSE.TXT +# +# Version 1.0 +# ============================================================================= + +# detect build platform +UNAME := $(shell uname) +ifeq ($(UNAME),Darwin) +include mk/gcc-i386-darwin.mk +else +include mk/gcc-i386-linux.mk +endif \ No newline at end of file diff --git a/mk/gcc-i386-darwin.mk b/mk/gcc-i386-darwin.mk new file mode 100644 index 0000000..91dc4d8 --- /dev/null +++ b/mk/gcc-i386-darwin.mk @@ -0,0 +1,28 @@ + +# ============================================================================= +# BareMetal -- a 64-bit OS written in Assembly for x86-64 systems +# Copyright (C) 2025 Tom Everett -- see LICENSE.TXT +# +# Version 1.0 +# ============================================================================= + +# requires 'brew install x86_64-elf-gcc' + +CC=x86_64-elf-gcc +LD=x86_64-elf-ld +CFLAGS=-c -m64 -nostdlib -nostartfiles -nodefaultlibs -ffreestanding -fomit-frame-pointer -mno-red-zone -fno-builtin -mcmodel=large +LDFLAGS= +NASM=nasm + +# objcopy +OBJCOPY=x86_64-elf-objcopy +OBJCOPYFLAGS=-O binary + +# strip +STRIP=x86_64-elf-strip +STRIPFLAGS= + +# ar +AR=x86_64-elf-ar +ARFLAGS=-crs + diff --git a/mk/gcc-i386-linux.mk b/mk/gcc-i386-linux.mk new file mode 100644 index 0000000..fa1d707 --- /dev/null +++ b/mk/gcc-i386-linux.mk @@ -0,0 +1,26 @@ + +# ============================================================================= +# BareMetal -- a 64-bit OS written in Assembly for x86-64 systems +# Copyright (C) 2025 Tom Everett -- see LICENSE.TXT +# +# Version 1.0 +# ============================================================================= + +CC=gcc +LD=ld +CFLAGS=-c -m64 -nostdlib -nostartfiles -nodefaultlibs -ffreestanding -fomit-frame-pointer -mno-red-zone -fno-builtin +LDFLAGS= +NASM=nasm + +# objcopy +OBJCOPY=objcopy +OBJCOPYFLAGS=-O binary + +# strip +STRIP=strip +STRIPFLAGS= + + +# ar +AR=ar +ARFLAGS=-crs diff --git a/setup.sh b/setup.sh deleted file mode 100755 index 686b761..0000000 --- a/setup.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -./clean.sh - -mkdir src/api -cd src/api -if [ -x "$(command -v curl)" ]; then - curl -s -o libBareMetal.asm https://raw.githubusercontent.com/ReturnInfinity/BareMetal/master/api/libBareMetal.asm -else - wget -q https://raw.githubusercontent.com/ReturnInfinity/BareMetal/master/api/libBareMetal.asm -fi -cd ../.. - -mkdir bin - -./build.sh