64 lines
1.4 KiB
Makefile
64 lines
1.4 KiB
Makefile
# Directory layout
|
|
SRCDIR = src
|
|
OBJDIR = obj
|
|
INCDIR = include
|
|
|
|
# Compiler and flags
|
|
CC = wcc386
|
|
LD = wlink
|
|
CFLAGS = -zq -i=$(INCDIR)
|
|
|
|
# Project name (root) — everything else derives from this
|
|
NAME = dspace
|
|
TARGET = $(NAME).exe
|
|
IMG = $(NAME).img
|
|
|
|
# Deploy location for testing in DOSBox-X
|
|
DOSBOX_DRIVE = ~/DosBox-x/C_Drive
|
|
|
|
# OpenWatcom DOS extender stub, needed on the disk image alongside TARGET
|
|
DOS4GW = ~/openwatcom_c/binw/dos4gw.exe
|
|
|
|
# Disk image geometry (1.44MB floppy, FAT12)
|
|
IMG_BLOCKS = 1440
|
|
IMG_FAT = 12
|
|
|
|
# Source and object files
|
|
SRCS = $(wildcard $(SRCDIR)/*.c)
|
|
OBJS = $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SRCS))
|
|
DEPS = $(OBJS:.o=.d)
|
|
|
|
# Default target
|
|
all: $(TARGET)
|
|
|
|
# Link object files into executable
|
|
$(TARGET): $(OBJS)
|
|
$(LD) system dos4g name $@ file { $(OBJS) }
|
|
|
|
# Compile .c files to .o files, with auto-dependency generation
|
|
$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)
|
|
$(CC) -fo=$@ $(CFLAGS) -ad=$(@:.o=.d) -adfs $<
|
|
|
|
# Ensure obj/ exists before any compile runs
|
|
$(OBJDIR):
|
|
mkdir -p $(OBJDIR)
|
|
|
|
# Pull in auto-generated header dependencies (silently ignored if missing)
|
|
-include $(DEPS)
|
|
|
|
# Clean up build artifacts
|
|
clean:
|
|
rm -f $(OBJS) $(DEPS) $(TARGET) $(IMG)
|
|
|
|
test: $(TARGET)
|
|
cp $(TARGET) $(DOSBOX_DRIVE)/
|
|
echo 'Ready to test'
|
|
|
|
image: $(TARGET)
|
|
rm -f $(IMG)
|
|
dd if=/dev/zero of=$(IMG) bs=1024 count=$(IMG_BLOCKS)
|
|
mkfs.vfat -F $(IMG_FAT) $(IMG)
|
|
mcopy -i $(IMG) $(TARGET) ::
|
|
mcopy -i $(IMG) $(DOS4GW) ::
|
|
|
|
.PHONY: all clean test image
|