138 lines
4.8 KiB
Makefile
138 lines
4.8 KiB
Makefile
# Atari ST (m68k-atari-mint-gcc) build rules.
|
|
|
|
include $(dir $(lastword $(MAKEFILE_LIST)))/common.mk
|
|
|
|
PLATFORM := atarist
|
|
BUILD := $(REPO_DIR)/build/$(PLATFORM)
|
|
LIBDIR := $(BUILD)/lib
|
|
BINDIR := $(BUILD)/bin
|
|
|
|
CFLAGS := $(COMMON_CFLAGS) -DJOEYLIB_PLATFORM_ATARIST -m68000 -fomit-frame-pointer -I$(REPO_DIR)/toolchains/audio/libxmp-lite/include -I$(REPO_DIR)/toolchains/atarist/include-shim
|
|
LDFLAGS :=
|
|
|
|
# libxmp-lite shared with the DOS port. Built as a static archive that
|
|
# provides the Protracker pattern decoder for the ST audio HAL; the
|
|
# 68k 4-channel mixer + YM2149 PWM output stage layer on top.
|
|
LIBXMP_DIR := $(REPO_DIR)/toolchains/audio/libxmp-lite
|
|
LIBXMP_SRC := $(filter-out %/win32.c, $(wildcard $(LIBXMP_DIR)/src/*.c) $(wildcard $(LIBXMP_DIR)/src/loaders/*.c))
|
|
LIBXMP_OBJDIR := $(BUILD)/obj/libxmp-lite
|
|
LIBXMP_OBJS := $(patsubst $(LIBXMP_DIR)/src/%.c,$(LIBXMP_OBJDIR)/%.o,$(LIBXMP_SRC)) $(LIBXMP_OBJDIR)/math_shim.o
|
|
LIBXMP_AR := $(LIBDIR)/libxmplite.a
|
|
# LIBXMP_CORE_DISABLE_IT skips the IT-format filter code so libxmp-lite
|
|
# doesn't reach for math.h / libm -- mintlib doesn't ship either. We
|
|
# target MOD as the authoring format anyway, so dropping IT filter
|
|
# support has no impact on JoeyLib's audio.
|
|
LIBXMP_CFLAGS := -DLIBXMP_CORE_PLAYER -DLIBXMP_CORE_DISABLE_IT -DHAVE_FNMATCH=0 -I$(LIBXMP_DIR)/include -I$(LIBXMP_DIR)/include/libxmp-lite -I$(LIBXMP_DIR)/src -Wno-unused-parameter
|
|
|
|
PORT_C_SRCS := $(wildcard $(SRC_PORT)/atarist/*.c)
|
|
PORT_S_SRCS := $(wildcard $(SRC_PORT)/atarist/*.s)
|
|
SHARED_S := $(wildcard $(SRC_68K)/*.s)
|
|
|
|
# Sprite codegen: 68k emitter shared with the Amiga port.
|
|
CODEGEN_DIR := $(REPO_DIR)/src/codegen
|
|
|
|
LIB_OBJS := \
|
|
$(patsubst $(SRC_CORE)/%.c,$(BUILD)/obj/core/%.o,$(CORE_C_SRCS)) \
|
|
$(patsubst $(SRC_PORT)/atarist/%.c,$(BUILD)/obj/port/%.o,$(PORT_C_SRCS)) \
|
|
$(patsubst $(SRC_PORT)/atarist/%.s,$(BUILD)/obj/port/%.o,$(PORT_S_SRCS)) \
|
|
$(patsubst $(SRC_68K)/%.s,$(BUILD)/obj/68k/%.o,$(SHARED_S)) \
|
|
$(BUILD)/obj/codegen/spriteEmit68k.o \
|
|
$(BUILD)/obj/codegen/spriteCompile.o
|
|
|
|
LIB := $(LIBDIR)/libjoey.a
|
|
|
|
HELLO_SRC := $(EXAMPLES)/hello/hello.c
|
|
HELLO_BIN := $(BINDIR)/HELLO.PRG
|
|
PATTERN_SRC := $(EXAMPLES)/pattern/pattern.c
|
|
PATTERN_BIN := $(BINDIR)/PATTERN.PRG
|
|
KEYS_SRC := $(EXAMPLES)/keys/keys.c
|
|
KEYS_BIN := $(BINDIR)/KEYS.PRG
|
|
JOY_SRC := $(EXAMPLES)/joy/joy.c
|
|
JOY_BIN := $(BINDIR)/JOY.PRG
|
|
SPRITE_SRC := $(EXAMPLES)/sprite/sprite.c
|
|
SPRITE_BIN := $(BINDIR)/SPRITE.PRG
|
|
AUDIO_SRC := $(EXAMPLES)/audio/audio.c
|
|
AUDIO_BIN := $(BINDIR)/AUDIO.PRG
|
|
|
|
# Game data lives under bin/DATA/, alongside the binaries Hatari picks
|
|
# up when bin/ is mounted as the GEMDOS C: drive. audio.c fopens
|
|
# "DATA/test.mod" etc.
|
|
DATA_DIR := $(BINDIR)/DATA
|
|
DATA_FILES := $(DATA_DIR)/test.mod $(DATA_DIR)/test.sfx
|
|
|
|
.PHONY: all atarist clean-atarist
|
|
all atarist: $(LIB) $(LIBXMP_AR) $(HELLO_BIN) $(PATTERN_BIN) $(KEYS_BIN) $(JOY_BIN) $(SPRITE_BIN) $(AUDIO_BIN) $(DATA_FILES)
|
|
|
|
$(BUILD)/obj/core/%.o: $(SRC_CORE)/%.c
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(BUILD)/obj/port/%.o: $(SRC_PORT)/atarist/%.c
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) -c $< -o $@
|
|
|
|
# Hand-written 68k assembly: GAS syntax, fed through the gcc driver
|
|
# so the bundled m68k-atari-mint-as (binutils) does the work. No vasm
|
|
# dependency on the ST path.
|
|
$(BUILD)/obj/port/%.o: $(SRC_PORT)/atarist/%.s
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(BUILD)/obj/68k/%.o: $(SRC_68K)/%.s
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(BUILD)/obj/codegen/%.o: $(CODEGEN_DIR)/%.c
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) -I$(CODEGEN_DIR) -c $< -o $@
|
|
|
|
$(LIB): $(LIB_OBJS)
|
|
@mkdir -p $(dir $@)
|
|
$(ST_AR) rcs $@ $^
|
|
|
|
$(LIBXMP_OBJDIR)/%.o: $(LIBXMP_DIR)/src/%.c
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) $(LIBXMP_CFLAGS) -c $< -o $@
|
|
|
|
$(LIBXMP_OBJDIR)/math_shim.o: $(REPO_DIR)/toolchains/atarist/include-shim/math_shim.c
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(LIBXMP_AR): $(LIBXMP_OBJS)
|
|
@mkdir -p $(dir $@)
|
|
$(ST_AR) rcs $@ $^
|
|
|
|
$(HELLO_BIN): $(HELLO_SRC) $(LIB)
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) $< $(LIB) $(LIBXMP_AR) -o $@ $(LDFLAGS)
|
|
|
|
$(PATTERN_BIN): $(PATTERN_SRC) $(LIB)
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) $< $(LIB) $(LIBXMP_AR) -o $@ $(LDFLAGS)
|
|
|
|
$(KEYS_BIN): $(KEYS_SRC) $(LIB)
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) $< $(LIB) $(LIBXMP_AR) -o $@ $(LDFLAGS)
|
|
|
|
$(JOY_BIN): $(JOY_SRC) $(LIB)
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) $< $(LIB) $(LIBXMP_AR) -o $@ $(LDFLAGS)
|
|
|
|
$(SPRITE_BIN): $(SPRITE_SRC) $(LIB)
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) $< $(LIB) $(LIBXMP_AR) -o $@ $(LDFLAGS)
|
|
|
|
$(AUDIO_BIN): $(AUDIO_SRC) $(LIB)
|
|
@mkdir -p $(dir $@)
|
|
$(ST_CC) $(CFLAGS) $< $(LIB) $(LIBXMP_AR) -o $@ $(LDFLAGS)
|
|
|
|
$(DATA_DIR)/test.mod: $(REPO_DIR)/assets/test.mod
|
|
@mkdir -p $(DATA_DIR)
|
|
cp $< $@
|
|
|
|
$(DATA_DIR)/test.sfx: $(REPO_DIR)/assets/test.sfx
|
|
@mkdir -p $(DATA_DIR)
|
|
cp $< $@
|
|
|
|
clean-atarist:
|
|
rm -rf $(BUILD)
|