| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 | export DEVKITPRO=/opt/devkitproexport DEVKITARM=/opt/devkitpro/devkitARM#---------------------------------------------------------------------------------.SUFFIXES:#---------------------------------------------------------------------------------ifeq ($(strip $(DEVKITARM)),)$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")endifTOPDIR ?= $(CURDIR)include $(DEVKITARM)/3ds_rules#---------------------------------------------------------------------------------# TARGET is the name of the output# BUILD is the directory where object files & intermediate files will be placed# SOURCES is a list of directories containing source code# DATA is a list of directories containing data files# INCLUDES is a list of directories containing header files## NO_SMDH: if set to anything, no SMDH file is generated.# ROMFS is the directory which contains the RomFS, relative to the Makefile (Optional)# APP_TITLE is the name of the app stored in the SMDH file (Optional)# APP_DESCRIPTION is the description of the app stored in the SMDH file (Optional)# APP_AUTHOR is the author of the app stored in the SMDH file (Optional)# ICON is the filename of the icon (.png), relative to the project folder.#   If not set, it attempts to use one of the following (in this order):#     - <Project name>.png#     - icon.png#     - <libctru folder>/default_icon.png#---------------------------------------------------------------------------------TARGET		:=	sdlpalBUILD		:=	buildSOURCES		:=	. .. ../adplug ../libmadAPP_TITLE	:=	SDLPALAPP_DESCRIPTION :=	Pal DOS for 3DSAPP_AUTHOR	:=	Ported by ZephRayICON		:=	icon.png#---------------------------------------------------------------------------------# options for code generation#---------------------------------------------------------------------------------ARCH	:=	-march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=softCFLAGS	:=	-g -Wall -O2 -mword-relocations \			-fomit-frame-pointer -ffunction-sections \			$(ARCH)CFLAGS	+=	$(INCLUDE) -DARM11 -D_3DS -D__3DS__ -D__N3DS__ -DPAL_HAS_PLATFORM_SPECIFIC_UTILS -I.CXXFLAGS	:= $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++14ASFLAGS	:=	-g $(ARCH)LDFLAGS	=	-specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)LIBS	:= -lSDL -lcitro3d -lctru -lm#---------------------------------------------------------------------------------# list of directories containing libraries, this must be the top level containing# include and lib#---------------------------------------------------------------------------------LIBDIRS	:= $(CTRULIB) $(PORTLIBS)#---------------------------------------------------------------------------------# no real need to edit anything past this point unless you need to add additional# rules for different file extensions#---------------------------------------------------------------------------------ifneq ($(BUILD),$(notdir $(CURDIR)))#---------------------------------------------------------------------------------export OUTPUT	:=	$(CURDIR)/$(TARGET)export TOPDIR	:=	$(CURDIR)export VPATH	:=	$(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \			$(foreach dir,$(DATA),$(CURDIR)/$(dir))export DEPSDIR	:=	$(CURDIR)/$(BUILD)CFILES		:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))CPPFILES	:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))SFILES		:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))PICAFILES	:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.v.pica)))SHLISTFILES	:=	$(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.shlist)))BINFILES	:=	$(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))#---------------------------------------------------------------------------------# use CXX for linking C++ projects, CC for standard C#---------------------------------------------------------------------------------ifeq ($(strip $(CPPFILES)),)#---------------------------------------------------------------------------------	export LD	:=	$(CC)#---------------------------------------------------------------------------------else#---------------------------------------------------------------------------------	export LD	:=	$(CXX)#---------------------------------------------------------------------------------endif#---------------------------------------------------------------------------------export OFILES	:=	$(addsuffix .o,$(BINFILES)) \			$(PICAFILES:.v.pica=.shbin.o) $(SHLISTFILES:.shlist=.shbin.o) \			$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)export INCLUDE	:=	$(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \			$(foreach dir,$(LIBDIRS),-I$(dir)/include) \			$(foreach dir,$(LIBDIRS),-I$(dir)/include/SDL) \			-I$(CURDIR)/$(BUILD)export LIBPATHS	:=	$(foreach dir,$(LIBDIRS),-L$(dir)/lib)ifeq ($(strip $(ICON)),)	icons := $(wildcard *.png)	ifneq (,$(findstring $(TARGET).png,$(icons)))		export APP_ICON := $(TOPDIR)/$(TARGET).png	else		ifneq (,$(findstring icon.png,$(icons)))			export APP_ICON := $(TOPDIR)/icon.png		endif	endifelse	export APP_ICON := $(TOPDIR)/$(ICON)endififeq ($(strip $(NO_SMDH)),)	export _3DSXFLAGS += --smdh=$(CURDIR)/$(TARGET).smdhendififneq ($(ROMFS),)	export _3DSXFLAGS += --romfs=$(CURDIR)/$(ROMFS)endif.PHONY: $(BUILD) clean all#---------------------------------------------------------------------------------all: $(BUILD)$(BUILD):	@[ -d $@ ] || mkdir -p $@	@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile#---------------------------------------------------------------------------------clean:	@echo clean ...	@rm -fr $(BUILD) $(TARGET).3dsx $(OUTPUT).smdh $(TARGET).elf $(TARGET).cia $(TARGET)-strip.elf#---------------------------------------------------------------------------------$(TARGET)-strip.elf: $(BUILD)	@$(STRIP) $(TARGET).elf -o $(TARGET)-strip.elf#---------------------------------------------------------------------------------cci: $(TARGET)-strip.elf	@makerom -f cci -rsf resources/$(TARGET).rsf -target d -exefslogo -elf $(TARGET)-strip.elf -o $(TARGET).3ds	@echo "built ... 3ds"#---------------------------------------------------------------------------------cia: $(TARGET)-strip.elf	@makerom -f cia -o $(TARGET).cia -elf $(TARGET)-strip.elf -rsf $(TARGET).rsf -icon icon.bin -banner banner.bin -exefslogo -target t	@echo "built ... cia"#---------------------------------------------------------------------------------elseDEPENDS	:=	$(OFILES:.o=.d)#---------------------------------------------------------------------------------# main targets#---------------------------------------------------------------------------------ifeq ($(strip $(NO_SMDH)),)$(OUTPUT).3dsx	:	$(OUTPUT).elf $(OUTPUT).smdhelse$(OUTPUT).3dsx	:	$(OUTPUT).elfendif$(OUTPUT).elf	:	$(OFILES)#---------------------------------------------------------------------------------# you need a rule like this for each extension you use as binary data#---------------------------------------------------------------------------------%.bin.o	:	%.bin#---------------------------------------------------------------------------------	@echo $(notdir $<)	@$(bin2o)#---------------------------------------------------------------------------------# rules for assembling GPU shaders#---------------------------------------------------------------------------------define shader-as	$(eval CURBIN := $(patsubst %.shbin.o,%.shbin,$(notdir $@)))	picasso -o $(CURBIN) $1	bin2s $(CURBIN) | $(AS) -o $@	echo "extern const u8" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(CURBIN) | tr . _)`.h	echo "extern const u8" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(CURBIN) | tr . _)`.h	echo "extern const u32" `(echo $(CURBIN) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(CURBIN) | tr . _)`.hendef%.shbin.o : %.v.pica %.g.pica	@echo $(notdir $^)	@$(call shader-as,$^)%.shbin.o : %.v.pica	@echo $(notdir $<)	@$(call shader-as,$<)%.shbin.o : %.shlist	@echo $(notdir $<)	@$(call shader-as,$(foreach file,$(shell cat $<),$(dir $<)/$(file)))-include $(DEPENDS)#---------------------------------------------------------------------------------------endif#---------------------------------------------------------------------------------------
 |