mirror of
https://github.com/ctruLua/ctruLua.git
synced 2025-10-27 16:39:29 +00:00
Added libogg, libvorbis and libvorbisfile to 3ds_portlibs. You will need to compile thems using make build-portlibs. Opening OGG files works but they play badly. Added a very simple error handler in main.lua Added audio example. Renamed isGfxInitialised to isGfxInitialized. Did you know? The audio module is the longest ctrµLua module.
249 lines
8.5 KiB
Makefile
249 lines
8.5 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
|
|
DATA := data
|
|
INCLUDES := include libs/lua-5.3.2/src libs/lzlib
|
|
#ROMFS := romfs
|
|
|
|
APP_TITLE := ctruLua
|
|
APP_DESCRIPTION := Lua for the 3DS. Yes, it works.
|
|
APP_AUTHOR := Reuh, Firew0lf and NegiAD
|
|
ICON := icon.png
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# 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
|
|
|
|
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 -lvorbisfile -lvorbis -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
|
|
|
|
#---------------------------------------------------------------------------------
|
|
# 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 libvorbis
|
|
|
|
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:
|
|
@cd doc/ && ldoc . && 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:
|
|
@rm -rf doc/html
|
|
|
|
|
|
#---------------------------------------------------------------------------------
|
|
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
|
|
#---------------------------------------------------------------------------------------
|