dspace/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