mirror of
https://github.com/ctruLua/ctruLua.git
synced 2025-10-27 16:39:29 +00:00
The new image formats are loaded with stb_image, and the textures are saved with stb_image_write. https://github.com/nothings/stb You can now load GIFs (not animated), PSD, TGA, HDR, PIC and PNM. The texture loading still uses sfil for JPEG, PNG, and BMP. You can force the use of stbi by loading with the "type" argument in texture.load() set to 242 (or anything 5<x<250, but 242 is a good value). The :save() formats are PNG and BMP only.
270 lines
9.1 KiB
Makefile
270 lines
9.1 KiB
Makefile
#---------------------------------------------------------------------------------
|
|
.SUFFIXES:
|
|
#---------------------------------------------------------------------------------
|
|
|
|
ifeq ($(strip $(DEVKITARM)),)
|
|
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
|
|
endif
|
|
|
|
TOPDIR ?= $(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.
|
|
# 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
|
|
# ROMFS: if set, use the files at this path to build a ROMFS
|
|
#---------------------------------------------------------------------------------
|
|
TARGET := ctruLua
|
|
BUILD := build
|
|
SOURCES := source libs/lua-5.3.2/src libs/tremor
|
|
DATA := data
|
|
INCLUDES := include libs/lua-5.3.2/src libs/lzlib libs/tremor
|
|
#ROMFS := romfs
|
|
|
|
APP_TITLE := ctruLua
|
|
APP_DESCRIPTION := Lua for the 3DS. Yes, it works.
|
|
APP_AUTHOR := Reuh, Firew0lf and NegiAD
|
|
ICON := icon.png
|
|
APP_VERSION := $(shell git describe --abbrev=0 --tags)
|
|
LASTCOMMIT := $(shell git rev-parse HEAD)
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# options for code generation
|
|
#---------------------------------------------------------------------------------
|
|
ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard
|
|
|
|
CFLAGS := -g -Wall -O2 -mword-relocations -std=gnu11 \
|
|
-fomit-frame-pointer -ffast-math \
|
|
$(ARCH)
|
|
|
|
CFLAGS += $(INCLUDE) -DARM11 -D_3DS -DCTR_VERSION=\"$(APP_VERSION)\" -DCTR_BUILD=\"$(LASTCOMMIT)\"
|
|
|
|
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11
|
|
|
|
ASFLAGS := -g $(ARCH)
|
|
LDFLAGS = -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
|
|
|
LIBS := -lsfil -ljpeg -lsftd -lfreetype -lpng -lz -lsf2d -lctru -logg -lm
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# list of directories containing libraries, this must be the top level containing
|
|
# include and lib
|
|
#---------------------------------------------------------------------------------
|
|
LIBDIRS := $(CTRULIB) $(PORTLIBS) \
|
|
$(CURDIR)/libs/3ds_portlibs/build \
|
|
$(CURDIR)/libs/sf2dlib/libsf2d \
|
|
$(CURDIR)/libs/sftdlib/libsftd \
|
|
$(CURDIR)/libs/sfillib/libsfil \
|
|
$(CURDIR)/libs/stb
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# 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)))
|
|
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)) \
|
|
$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
|
|
|
|
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
|
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
|
-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
|
|
endif
|
|
else
|
|
export APP_ICON := $(TOPDIR)/$(ICON)
|
|
endif
|
|
|
|
ifeq ($(strip $(NO_SMDH)),)
|
|
export _3DSXFLAGS += --smdh=$(CURDIR)/$(TARGET).smdh
|
|
endif
|
|
|
|
ifneq ($(ROMFS),)
|
|
export _3DSXFLAGS += --romfs=$(CURDIR)/$(ROMFS)
|
|
CFLAGS += -DROMFS
|
|
endif
|
|
|
|
.PHONY: $(BUILD) clean all
|
|
|
|
#---------------------------------------------------------------------------------
|
|
all: $(BUILD)
|
|
|
|
$(BUILD):
|
|
@[ -d $(BUILD) ] || mkdir -p $(BUILD)
|
|
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
|
|
|
build-portlibs:
|
|
@make -C libs/3ds_portlibs zlib freetype libjpeg-turbo libpng libogg
|
|
|
|
build-sf2dlib:
|
|
@make -C libs/sf2dlib/libsf2d build
|
|
|
|
build-sftdlib:
|
|
@make -C libs/sftdlib/libsftd build
|
|
|
|
build-sfillib:
|
|
@make -C libs/sfillib/libsfil build
|
|
|
|
build-all:
|
|
@echo Building 3ds_portlibs...
|
|
@make build-portlibs
|
|
@echo Building sf2dlib...
|
|
@make build-sf2dlib
|
|
@echo Building sftdlib...
|
|
@make build-sftdlib
|
|
@echo Building sfillib...
|
|
@make build-sfillib
|
|
@echo Building ctruLua...
|
|
@make build
|
|
|
|
build-doc:
|
|
@echo Building HTML documentation...
|
|
@make build-doc-html
|
|
@echo Building SublimeText documentation...
|
|
@make build-doc-st
|
|
|
|
build-doc-html:
|
|
@cd doc/ && ldoc . && cd ..
|
|
|
|
build-doc-st:
|
|
@cd doc/ && ldoc . --template ./ --ext sublime-completions --dir ./sublimetext/ && cd ..
|
|
|
|
#---------------------------------------------------------------------------------
|
|
clean:
|
|
@rm -fr $(BUILD) $(TARGET).3dsx $(OUTPUT).smdh $(TARGET).elf
|
|
|
|
clean-portlibs:
|
|
@make -C libs/3ds_portlibs clean
|
|
|
|
clean-sf2dlib:
|
|
@make -C libs/sf2dlib/libsf2d clean
|
|
|
|
clean-sftdlib:
|
|
@make -C libs/sftdlib/libsftd clean
|
|
|
|
clean-sfillib:
|
|
@make -C libs/sfillib/libsfil clean
|
|
|
|
clean-all:
|
|
@echo Cleaning 3ds_portlibs...
|
|
@make clean-portlibs
|
|
@echo Cleaning sf2dlib...
|
|
@make clean-sf2dlib
|
|
@echo Cleaning sftdlib...
|
|
@make clean-sftdlib
|
|
@echo Cleaning sfillib...
|
|
@make clean-sfillib
|
|
@echo Cleaning ctruLua...
|
|
@make clean
|
|
|
|
clean-doc:
|
|
@echo Cleaning HTML documentation...
|
|
@make clean-doc-html
|
|
@echo Cleaning SublimeText documentation...
|
|
@make clean-doc-st
|
|
|
|
clean-doc-html:
|
|
@rm -rf doc/html
|
|
|
|
clean-doc-st:
|
|
@rm -rf doc/sublimetext
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
else
|
|
|
|
DEPENDS := $(OFILES:.o=.d)
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# main targets
|
|
#---------------------------------------------------------------------------------
|
|
ifeq ($(strip $(NO_SMDH)),)
|
|
$(OUTPUT).3dsx : $(OUTPUT).elf $(OUTPUT).smdh
|
|
else
|
|
$(OUTPUT).3dsx : $(OUTPUT).elf
|
|
endif
|
|
|
|
$(OUTPUT).elf : $(OFILES)
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# you need a rule like this for each extension you use as binary data
|
|
#---------------------------------------------------------------------------------
|
|
%.bin.o : %.bin
|
|
#---------------------------------------------------------------------------------
|
|
@echo $(notdir $<)
|
|
@$(bin2o)
|
|
|
|
#---------------------------------------------------------------------------------
|
|
%.ttf.o : %.ttf
|
|
#---------------------------------------------------------------------------------
|
|
@echo $(notdir $<)
|
|
@$(bin2o)
|
|
|
|
# WARNING: This is not the right way to do this! TODO: Do it right!
|
|
#---------------------------------------------------------------------------------
|
|
%.vsh.o : %.vsh
|
|
#---------------------------------------------------------------------------------
|
|
@echo $(notdir $<)
|
|
@python $(CURDIR)/libs/aemstro/aemstro_as.py $< ../$(notdir $<).shbin
|
|
@bin2s ../$(notdir $<).shbin | $(PREFIX)as -o $@
|
|
@echo "extern const u8" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(notdir $<).shbin | tr . _)`.h
|
|
@echo "extern const u8" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(notdir $<).shbin | tr . _)`.h
|
|
@echo "extern const u32" `(echo $(notdir $<).shbin | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(notdir $<).shbin | tr . _)`.h
|
|
@rm ../$(notdir $<).shbin
|
|
|
|
-include $(DEPENDS)
|
|
|
|
#---------------------------------------------------------------------------------------
|
|
endif
|
|
#---------------------------------------------------------------------------------------
|