| 
									
										
										
										
											2022-07-24 00:55:18 +02:00
										 |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | .SUFFIXES: | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ifeq ($(strip $(DEVKITARM)),) | 
					
						
							|  |  |  | $(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM") | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | include $(DEVKITARM)/3ds_rules | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export renderd7_MAJOR	:= 0 | 
					
						
							| 
									
										
										
										
											2022-12-09 14:55:19 +01:00
										 |  |  | export renderd7_MINOR	:= 9 | 
					
						
							|  |  |  | export renderd7_PATCH	:= 0 | 
					
						
							| 
									
										
										
										
											2022-07-24 00:55:18 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | VERSION	:=	$(renderd7_MAJOR).$(renderd7_MINOR).$(renderd7_PATCH) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # If on a tagged commit, use the tag instead of the commit
 | 
					
						
							|  |  |  | ifneq ($(shell echo $(shell git tag -l --points-at HEAD) | head -c 1),) | 
					
						
							|  |  |  | GIT_VER := $(shell git tag -l --points-at HEAD) | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  | GIT_VER := $(shell git rev-parse --short HEAD) | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TIME_TIME := $(shell date --iso=seconds) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | # 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
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | TARGET		:=	renderd7 | 
					
						
							|  |  |  | SOURCES		:=	source external/source external/libnsbmp/source | 
					
						
							|  |  |  | DATA		:=	data | 
					
						
							|  |  |  | INCLUDES	:=	include | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | # options for code generation
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | ARCH	:=	-march=armv6k -mtune=mpcore -mfloat-abi=hard -mtp=soft | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CFLAGS	:=	-g -Wall -Werror -mword-relocations -save-temps\
 | 
					
						
							|  |  |  | 			-DV_STRING=\"$(GIT_VER)\" \
 | 
					
						
							|  |  |  | 			-DV_TIME=\"$(TIME_TIME)\" \
 | 
					
						
							|  |  |  | 			-ffunction-sections -fdata-sections \
 | 
					
						
							|  |  |  | 			$(ARCH) $(BUILD_CFLAGS) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CFLAGS	+=	$(INCLUDE) -D__3DS__ -D_GNU_SOURCE=1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CXXFLAGS	:= $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++20 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ASFLAGS	:=	-g $(ARCH) $(DEFINES) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | # list of directories containing libraries, this must be the top level containing
 | 
					
						
							|  |  |  | # include and lib
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | LIBDIRS	:= $(PORTLIBS) $(CTRULIB) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | # 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 VPATH	:=	$(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
 | 
					
						
							|  |  |  | 			$(foreach dir,$(DATA),$(CURDIR)/$(dir)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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_SOURCES 	:=	$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export OFILES_BIN	:=	$(addsuffix .o,$(BINFILES)) \
 | 
					
						
							|  |  |  | 			$(PICAFILES:.v.pica=.shbin.o) $(SHLISTFILES:.shlist=.shbin.o) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export OFILES	:=	$(OFILES_BIN) $(OFILES_SOURCES) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export HFILES	:=	$(PICAFILES:.v.pica=_shbin.h) $(addsuffix .h,$(subst .,_,$(BINFILES))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export INCLUDE	:=	$(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
 | 
					
						
							|  |  |  | 			$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
 | 
					
						
							|  |  |  | 			-I. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PHONY: clean all doc | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | all: lib/librenderd7.a lib/librenderd7d.a | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | doc: | 
					
						
							|  |  |  | 	@doxygen Doxyfile | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | dist-bin: all | 
					
						
							|  |  |  | 	@tar --exclude=*~ -cjf $(TARGET)-$(VERSION).tar.bz2 include lib | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | dist-src: | 
					
						
							| 
									
										
										
										
											2022-07-24 01:17:22 +02:00
										 |  |  | 	@tar --exclude=*~ -cjf $(TARGET)-src-$(VERSION).tar.bz2 include $(SOURCES) Makefile | 
					
						
							| 
									
										
										
										
											2022-07-24 00:55:18 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | dist: dist-src dist-bin | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | install: dist-bin | 
					
						
							|  |  |  | 	mkdir -p $(DEPSDIR)$(DEVKITPRO)/libctru | 
					
						
							|  |  |  | 	bzip2 -cd $(TARGET)-$(VERSION).tar.bz2 | tar -xf - -C $(DEPSDIR)$(DEVKITPRO)/libctru | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | lib: | 
					
						
							|  |  |  | 	@[ -d $@ ] || mkdir -p $@ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | release: | 
					
						
							|  |  |  | 	@[ -d $@ ] || mkdir -p $@ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | debug: | 
					
						
							|  |  |  | 	@[ -d $@ ] || mkdir -p $@ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | lib/librenderd7.a : lib release $(SOURCES) $(INCLUDES) | 
					
						
							|  |  |  | 	@$(MAKE) BUILD=release OUTPUT=$(CURDIR)/$@ \
 | 
					
						
							|  |  |  | 	BUILD_CFLAGS="-DNDEBUG=1 -O2 -fomit-frame-pointer" \
 | 
					
						
							|  |  |  | 	DEPSDIR=$(CURDIR)/release \
 | 
					
						
							|  |  |  | 	--no-print-directory -C release \
 | 
					
						
							|  |  |  | 	-f $(CURDIR)/Makefile | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | lib/librenderd7d.a : lib debug $(SOURCES) $(INCLUDES) | 
					
						
							|  |  |  | 	@$(MAKE) BUILD=debug OUTPUT=$(CURDIR)/$@ \
 | 
					
						
							|  |  |  | 	BUILD_CFLAGS="-DDEBUG=1 -Og" \
 | 
					
						
							|  |  |  | 	DEPSDIR=$(CURDIR)/debug \
 | 
					
						
							|  |  |  | 	--no-print-directory -C debug \
 | 
					
						
							|  |  |  | 	-f $(CURDIR)/Makefile | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | clean: | 
					
						
							|  |  |  | 	@echo clean ... | 
					
						
							|  |  |  | 	@rm -fr release debug lib includes | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DEPENDS	:=	$(OFILES:.o=.d) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | # main targets
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | $(OUTPUT)	:	$(OFILES) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $(OFILES_SOURCES) : $(HFILES) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | # you need a rule like this for each extension you use as binary data
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | %.bin.o	%_bin.h :	%.bin | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | 	@echo $(notdir $<) | 
					
						
							|  |  |  | 	@$(bin2o) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | # rules for assembling GPU shaders
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | define shader-as | 
					
						
							|  |  |  | 	$(eval CURBIN := $*.shbin) | 
					
						
							|  |  |  | 	$(eval DEPSFILE := $(DEPSDIR)/$*.shbin.d) | 
					
						
							|  |  |  | 	echo "$(CURBIN).o: $< $1" > $(DEPSFILE) | 
					
						
							|  |  |  | 	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 . _)`.h | 
					
						
							|  |  |  | 	picasso -o $(CURBIN) $1 | 
					
						
							|  |  |  | 	bin2s $(CURBIN) | $(AS) -o $*.shbin.o | 
					
						
							|  |  |  | endef | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | %.shbin.o %_shbin.h : %.v.pica %.g.pica | 
					
						
							|  |  |  | 	@echo $(notdir $^) | 
					
						
							|  |  |  | 	@$(call shader-as,$^) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | %.shbin.o %_shbin.h : %.v.pica | 
					
						
							|  |  |  | 	@echo $(notdir $<) | 
					
						
							|  |  |  | 	@$(call shader-as,$<) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | %.shbin.o %_shbin.h : %.shlist | 
					
						
							|  |  |  | 	@echo $(notdir $<) | 
					
						
							|  |  |  | 	@$(call shader-as,$(foreach file,$(shell cat $<),$(dir $<)$(file))) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | -include $(DEPENDS) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | #---------------------------------------------------------------------------------------
 |