Files
playdate-kit/Examples/HelloPlaydate/Makefile
T

55 lines
2.4 KiB
Makefile
Raw Normal View History

REPO_ROOT := $(shell git rev-parse --show-toplevel)
PRODUCT := HelloPlaydate.pdx
include $(REPO_ROOT)/Examples/swift.mk
# MARK: - Build PlaydateKit Wrapper Swift Module
# The wrapper sources are organized in nested domain folders, so collect
# them recursively (a plain *.swift glob would miss the subdirectories).
PLAYDATEKIT_SOURCES := $(shell find $(REPO_ROOT)/Sources/PlaydateKit -name '*.swift')
build/Modules/playdate_device.o: $(PLAYDATEKIT_SOURCES)
@mkdir -p build/Modules
$(SWIFT_EXEC) $(SWIFT_FLAGS) $(SWIFT_FLAGS_DEVICE) -c $^ -emit-module -o $@
build/Modules/playdate_simulator.o: $(PLAYDATEKIT_SOURCES)
@mkdir -p build/Modules
$(SWIFT_EXEC) $(SWIFT_FLAGS) $(SWIFT_FLAGS_SIMULATOR) -c $^ -emit-module -o $@
# MARK: - Build Game Swift Object
# The wrapper module is a normal prerequisite so wrapper edits also rebuild
# the game object; only the Swift sources are compiler inputs.
build/game_device.o: Sources/HelloPlaydate/*.swift build/Modules/playdate_device.o
$(SWIFT_EXEC) $(SWIFT_FLAGS) $(SWIFT_FLAGS_DEVICE) -c $(filter %.swift,$^) -o $@
$(OBJDIR)/pdex.elf: build/game_device.o
OBJS += build/game_device.o
# The wrapper object carries symbols that are not emitted into the game
# object, such as the posix_memalign shim the Embedded Swift runtime needs.
# common.mk expanded OBJS before this line, so the link prerequisite has to
# be added explicitly as well.
$(OBJDIR)/pdex.elf: build/Modules/playdate_device.o
OBJS += build/Modules/playdate_device.o
build/game_simulator.o: Sources/HelloPlaydate/*.swift build/Modules/playdate_simulator.o
$(SWIFT_EXEC) $(SWIFT_FLAGS) $(SWIFT_FLAGS_SIMULATOR) -c $(filter %.swift,$^) -o $@
$(OBJDIR)/pdex.${DYLIB_EXT}: build/game_simulator.o
SIMCOMPILER += build/game_simulator.o
# MARK: - Convenience Targets
# The SDK's common.mk (included via swift.mk) already provides the build
# targets, all packaging $(PRODUCT) with pdc:
# make device binary + simulator dylib (alias: all)
# make simulator simulator dylib only
# make device device binary only
.PHONY: run clean-swiftpm
# Build the simulator flavor and launch the pdx in the Playdate Simulator.
run: simulator
open -a "$(SDK)/bin/Playdate Simulator.app" $(PRODUCT)
# common.mk's clean removes the build folder, $(PRODUCT), and the binaries
# copied into Source/; also drop the .build folder SwiftPM leaves behind
# when building with build.sh.
clean: clean-swiftpm
clean-swiftpm:
-rm -rf .build