115 lines
4.1 KiB
Makefile
115 lines
4.1 KiB
Makefile
# Amiga (Bebbo m68k-amigaos-gcc) build rules.
|
|
|
|
include $(dir $(lastword $(MAKEFILE_LIST)))/common.mk
|
|
|
|
PLATFORM := amiga
|
|
BUILD := $(REPO_DIR)/build/$(PLATFORM)
|
|
LIBDIR := $(BUILD)/lib
|
|
BINDIR := $(BUILD)/bin
|
|
|
|
# PTPlayer is staged by toolchains/install.sh into PTPLAYER_DIR; we
|
|
# reference its ptplayer.asm + header from there rather than copying
|
|
# them into the source tree, so install.sh can refresh / version it
|
|
# independently. -I on $(SRC_PORT)/amiga lets ptplayer.h resolve
|
|
# <SDI_compiler.h> from the port-local shim alongside our HAL code.
|
|
PTPLAYER_DIR := $(REPO_DIR)/toolchains/amiga/ptplayer
|
|
CFLAGS := $(COMMON_CFLAGS) -DJOEYLIB_PLATFORM_AMIGA -m68000 -fomit-frame-pointer -noixemul -D__OSCOMPAT -I$(SRC_PORT)/amiga -I$(PTPLAYER_DIR)
|
|
# OSCOMPAT=1 selects PTPlayer's audio.device-friendly variant (uses
|
|
# CIA-B + audio.device interrupts via the OS rather than taking over
|
|
# Paula directly), matching the way our HAL cooperates with Intuition.
|
|
# -Fhunk matches Bebbo gcc-amigaos's AmigaOS HUNK object format. ELF
|
|
# objects from vasm cannot be linked into a HUNK libjoey.a (the ar
|
|
# "file format not recognized" failure mode is silent at archive time
|
|
# and surfaces as undefined references at every binary's link step).
|
|
ASFLAGS := -Fhunk -m68000 -quiet -DOSCOMPAT=1
|
|
# --allow-multiple-definition lets our user-space tzset stub
|
|
# (src/port/amiga/libinit.c) win over libnix's version in
|
|
# __gmtoffset.o. libnix's tzset dereferences a possibly-NULL
|
|
# LocaleBase; our no-op skips the deref.
|
|
LDFLAGS := -noixemul -Wl,--allow-multiple-definition
|
|
|
|
PORT_C_SRCS := $(wildcard $(SRC_PORT)/amiga/*.c)
|
|
PORT_S_SRCS := $(wildcard $(SRC_PORT)/amiga/*.s)
|
|
SHARED_S := $(wildcard $(SRC_68K)/*.s)
|
|
|
|
# Amiga uses PTPlayer's mt_playfx for SFX, not the libxmp+overlay
|
|
# combo that DOS and ST share, so the shared SFX overlay mixer in
|
|
# src/core/audioSfxMix.c is unused here. Filter it out to keep dead
|
|
# code out of every Amiga binary.
|
|
CORE_C_SRCS_AMIGA := $(filter-out %/audioSfxMix.c, $(CORE_C_SRCS))
|
|
|
|
LIB_OBJS := \
|
|
$(patsubst $(SRC_CORE)/%.c,$(BUILD)/obj/core/%.o,$(CORE_C_SRCS_AMIGA)) \
|
|
$(patsubst $(SRC_PORT)/amiga/%.c,$(BUILD)/obj/port/%.o,$(PORT_C_SRCS)) \
|
|
$(patsubst $(SRC_PORT)/amiga/%.s,$(BUILD)/obj/port/%.o,$(PORT_S_SRCS)) \
|
|
$(patsubst $(SRC_68K)/%.s,$(BUILD)/obj/68k/%.o,$(SHARED_S)) \
|
|
$(BUILD)/obj/port/ptplayer.o
|
|
|
|
LIB := $(LIBDIR)/libjoey.a
|
|
|
|
HELLO_SRC := $(EXAMPLES)/hello/hello.c
|
|
HELLO_BIN := $(BINDIR)/Hello
|
|
PATTERN_SRC := $(EXAMPLES)/pattern/pattern.c
|
|
PATTERN_BIN := $(BINDIR)/Pattern
|
|
KEYS_SRC := $(EXAMPLES)/keys/keys.c
|
|
KEYS_BIN := $(BINDIR)/Keys
|
|
JOY_SRC := $(EXAMPLES)/joy/joy.c
|
|
JOY_BIN := $(BINDIR)/Joy
|
|
SPRITE_SRC := $(EXAMPLES)/sprite/sprite.c
|
|
SPRITE_BIN := $(BINDIR)/Sprite
|
|
AUDIO_SRC := $(EXAMPLES)/audio/audio.c
|
|
AUDIO_BIN := $(BINDIR)/Audio
|
|
|
|
.PHONY: all amiga clean-amiga
|
|
all amiga: $(LIB) $(HELLO_BIN) $(PATTERN_BIN) $(KEYS_BIN) $(JOY_BIN) $(SPRITE_BIN) $(AUDIO_BIN)
|
|
|
|
$(BUILD)/obj/core/%.o: $(SRC_CORE)/%.c
|
|
@mkdir -p $(dir $@)
|
|
$(AMIGA_CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(BUILD)/obj/port/%.o: $(SRC_PORT)/amiga/%.c
|
|
@mkdir -p $(dir $@)
|
|
$(AMIGA_CC) $(CFLAGS) -c $< -o $@
|
|
|
|
$(BUILD)/obj/port/%.o: $(SRC_PORT)/amiga/%.s
|
|
@mkdir -p $(dir $@)
|
|
$(AMIGA_AS) $(ASFLAGS) $< -o $@
|
|
|
|
$(BUILD)/obj/port/ptplayer.o: $(PTPLAYER_DIR)/ptplayer.asm
|
|
@mkdir -p $(dir $@)
|
|
$(AMIGA_AS) $(ASFLAGS) $< -o $@
|
|
|
|
$(BUILD)/obj/68k/%.o: $(SRC_68K)/%.s
|
|
@mkdir -p $(dir $@)
|
|
$(AMIGA_AS) $(ASFLAGS) $< -o $@
|
|
|
|
$(LIB): $(LIB_OBJS)
|
|
@mkdir -p $(dir $@)
|
|
$(AMIGA_AR) rcs $@ $^
|
|
|
|
$(HELLO_BIN): $(HELLO_SRC) $(LIB)
|
|
@mkdir -p $(dir $@)
|
|
$(AMIGA_CC) $(CFLAGS) $< $(LIB) -o $@ $(LDFLAGS)
|
|
|
|
$(PATTERN_BIN): $(PATTERN_SRC) $(LIB)
|
|
@mkdir -p $(dir $@)
|
|
$(AMIGA_CC) $(CFLAGS) $< $(LIB) -o $@ $(LDFLAGS)
|
|
|
|
$(KEYS_BIN): $(KEYS_SRC) $(LIB)
|
|
@mkdir -p $(dir $@)
|
|
$(AMIGA_CC) $(CFLAGS) $< $(LIB) -o $@ $(LDFLAGS)
|
|
|
|
$(JOY_BIN): $(JOY_SRC) $(LIB)
|
|
@mkdir -p $(dir $@)
|
|
$(AMIGA_CC) $(CFLAGS) $< $(LIB) -o $@ $(LDFLAGS)
|
|
|
|
$(SPRITE_BIN): $(SPRITE_SRC) $(LIB)
|
|
@mkdir -p $(dir $@)
|
|
$(AMIGA_CC) $(CFLAGS) $< $(LIB) -o $@ $(LDFLAGS)
|
|
|
|
$(AUDIO_BIN): $(AUDIO_SRC) $(LIB)
|
|
@mkdir -p $(dir $@)
|
|
$(AMIGA_CC) $(CFLAGS) $< $(LIB) -o $@ $(LDFLAGS)
|
|
|
|
clean-amiga:
|
|
rm -rf $(BUILD)
|