From e785aa1f833191578c43a616b450ac0e6d134507 Mon Sep 17 00:00:00 2001 From: Tom Everett Date: Sun, 13 Apr 2025 14:07:55 -0600 Subject: [PATCH 1/3] convert to makefile --- .github/workflows/main.yml | 14 ++++---------- Makefile | 31 +++++++++++++++++++++++++++++++ build.sh | 4 ---- clean.sh | 4 ---- mk/build.mk | 15 +++++++++++++++ mk/gcc-i386-darwin.mk | 27 +++++++++++++++++++++++++++ mk/gcc-i386-linux.mk | 26 ++++++++++++++++++++++++++ setup.sh | 16 ---------------- 8 files changed, 103 insertions(+), 34 deletions(-) create mode 100644 Makefile delete mode 100755 build.sh delete mode 100755 clean.sh create mode 100644 mk/build.mk create mode 100644 mk/gcc-i386-darwin.mk create mode 100644 mk/gcc-i386-linux.mk delete mode 100755 setup.sh 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..470e8fe --- /dev/null +++ b/Makefile @@ -0,0 +1,31 @@ + +# ============================================================================= +# 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 + +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: + curl -s -o $(SRCDIR)/api/libBareMetal.asm $(BAREMETAL_REPO)/api/libBareMetal.asm +clean: + rm -rf $(OBJDIR) + rm -f $(SRCDIR)/api/libBareMetal.asm + +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..027b962 --- /dev/null +++ b/mk/gcc-i386-darwin.mk @@ -0,0 +1,27 @@ + +# ============================================================================= +# 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 From c0024e7af1f709633413f4a67d909b1657a39178 Mon Sep 17 00:00:00 2001 From: Tom Everett Date: Sun, 13 Apr 2025 14:10:58 -0600 Subject: [PATCH 2/3] fix --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 470e8fe..4d50e4d 100644 --- a/Makefile +++ b/Makefile @@ -20,10 +20,11 @@ $(OBJDIR)/monitor.bin: objdir $(SRCDIR)/monitor.asm $(SRCDIR)/api/libBareMetal.a $(NASM) $(SRCDIR)/monitor.asm -o $(OBJDIR)/monitor.bin -l $(OBJDIR)/monitor-debug.txt -I $(SRCDIR) $(SRCDIR)/api/libBareMetal.asm: + mkdir $(SRCDIR)/api curl -s -o $(SRCDIR)/api/libBareMetal.asm $(BAREMETAL_REPO)/api/libBareMetal.asm clean: rm -rf $(OBJDIR) - rm -f $(SRCDIR)/api/libBareMetal.asm + rm -rf $(SRCDIR)/api/ objdir: mkdir -p $(OBJDIR) From 8600f7d9601418c4252c822294fdbccab1822d13 Mon Sep 17 00:00:00 2001 From: Tom Everett Date: Tue, 15 Apr 2025 16:31:35 -0600 Subject: [PATCH 3/3] curl/wget --- Makefile | 12 ++++++++++++ mk/gcc-i386-darwin.mk | 1 + 2 files changed, 13 insertions(+) diff --git a/Makefile b/Makefile index 4d50e4d..e683a7d 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,13 @@ 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 @@ -21,7 +28,12 @@ $(OBJDIR)/monitor.bin: objdir $(SRCDIR)/monitor.asm $(SRCDIR)/api/libBareMetal.a $(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/ diff --git a/mk/gcc-i386-darwin.mk b/mk/gcc-i386-darwin.mk index 027b962..91dc4d8 100644 --- a/mk/gcc-i386-darwin.mk +++ b/mk/gcc-i386-darwin.mk @@ -25,3 +25,4 @@ STRIPFLAGS= # ar AR=x86_64-elf-ar ARFLAGS=-crs +