diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e59181d --- /dev/null +++ b/Makefile @@ -0,0 +1,48 @@ +AS := as +LD := ld +ASFLAGS := --64 + +EXAMPLES := exit hello-world fizzbuzz +BINARIES := $(addprefix bin/,$(EXAMPLES)) + +.PHONY: build help run clean + +## Build all binaries (default target) +build: $(BINARIES) + +## Display this help screen +help: + @awk ' \ + /^##/ { doc = substr($$0, 4); next } \ + /^[a-zA-Z0-9_-]+:/ && doc { \ + split($$1, target, ":"); \ + printf "\033[36m%-20s\033[0m %s\n", target[1], doc; \ + doc = "" \ + } \ + ' $(MAKEFILE_LIST) + +## Build the exit example +bin/exit: exit/exit.s + $(AS) $(ASFLAGS) -o $@.o $< + $(LD) -o $@ $@.o + rm -f $@.o + +## Build the hello-world example +bin/hello-world: hello-world/hello.s + $(AS) $(ASFLAGS) -o $@.o $< + $(LD) -o $@ $@.o + rm -f $@.o + +## Build the fizzbuzz example +bin/fizzbuzz: fizzbuzz/fizzbuzz.s + $(AS) $(ASFLAGS) -o $@.o $< + $(LD) -o $@ $@.o + rm -f $@.o + +## Run the specified CMD example (use CMD="fizzbuzz") +run: clean bin/$(CMD) + ./bin/$(CMD) + +## Remove build artifacts +clean: + rm -f bin/*