mirror of
https://github.com/libretro/RetroArch.git
synced 2026-11-07 08:36:02 -10:00
The 3DS, Vita and Switch build smb://: the SMB and Kerberos clients reach the network only through libretro-common's socket helpers, and the crypto they rest on draws on each console's hardware random number generator. The Wii U, whose crypto has only a clock to stir, is left out: SMB derives its signing and sealing keys from that randomness. The 3DS keeps its SMB transfers at 64 KiB, as it does NFS's. The compile matrix builds the SMB client, the Kerberos client and the SMB VFS backend for each of the three under their Makefiles' defines.
401 lines
10 KiB
Makefile
401 lines
10 KiB
Makefile
TARGET := retroarch_3ds
|
|
LIBRETRO =
|
|
|
|
DEBUG = 0
|
|
CONSOLE_LOG = 0
|
|
GRIFFIN_BUILD = 0
|
|
HAVE_STATIC_DUMMY ?= 0
|
|
WHOLE_ARCHIVE_LINK = 0
|
|
BUILD_3DSX = 1
|
|
BUILD_3DS = 0
|
|
BUILD_CIA = 1
|
|
LIBCTRU_NO_DEPRECATION = 1
|
|
USE_CTRULIB_2 ?= $(if $(shell grep -sl gspPresentBuffer $(or $(CTRULIB),$(DEVKITPRO)/libctru)/include/3ds/services/gspgpu.h),1,0)
|
|
LOAD_WITHOUT_CORE_INFO ?= 0
|
|
|
|
APP_TITLE = RetroArch 3DS
|
|
APP_DESCRIPTION = RetroArch 3DS
|
|
APP_AUTHOR = Team Libretro
|
|
APP_PRODUCT_CODE = RETROARCH-3DS
|
|
APP_UNIQUE_ID = 0xBAC00
|
|
APP_ICON = pkg/ctr/assets/default.png
|
|
APP_BANNER = pkg/ctr/assets/libretro_banner.png
|
|
APP_AUDIO = pkg/ctr/assets/silent.wav
|
|
APP_RSF = pkg/ctr/tools/template.rsf
|
|
APP_SYSTEM_MODE = 64MB
|
|
APP_SYSTEM_MODE_EXT = 124MB
|
|
APP_BIG_TEXT_SECTION = 0
|
|
APP_USE_SVCHAX = 0
|
|
|
|
include pkg/ctr/Makefile.cores
|
|
|
|
OBJ :=
|
|
OBJ += ctr/ctr_system.o
|
|
OBJ += ctr/ctr_memory.o
|
|
OBJ += ctr/ctr_linear.o
|
|
OBJ += ctr/gpu_old.o
|
|
OBJ += ctr/exec-3dsx/exec_cia.o \
|
|
ctr/exec-3dsx/exec_3dsx.o \
|
|
ctr/exec-3dsx/mini-hb-menu/launch.o \
|
|
ctr/exec-3dsx/mini-hb-menu/loaders/rosalina.o \
|
|
ctr/exec-3dsx/mini-hb-menu/loaders/hax2.o
|
|
|
|
ifeq ($(APP_BIG_TEXT_SECTION), 1)
|
|
APP_USE_SVCHAX = 1
|
|
LDFLAGS += -Wl,--defsym,__ctr_patch_services=__service_ptr
|
|
endif
|
|
|
|
ifeq ($(APP_USE_SVCHAX), 1)
|
|
OBJ += ctr/ctr_svchax.o
|
|
endif
|
|
|
|
DEFINES :=
|
|
ifeq ($(GRIFFIN_BUILD), 1)
|
|
OBJ += griffin/griffin.o
|
|
DEFINES += -DHAVE_GRIFFIN=1 -DHAVE_MENU -DHAVE_CONFIGFILE -DHAVE_RGUI -DHAVE_XMB -DHAVE_LIBRETRODB -DHAVE_CC_RESAMPLER
|
|
DEFINES += -DHAVE_7ZIP -DHAVE_RZSTD -DHAVE_RPNG -DHAVE_RWEBP -DHAVE_RDDS -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA
|
|
DEFINES += -DHAVE_NETWORKING -DHAVE_IFINFO -DHAVE_CHEEVOS -DRC_DISABLE_LUA -DHAVE_ONLINE_UPDATER -DHAVE_UPDATE_CORES
|
|
DEFINES += -DHAVE_UPDATE_CORE_INFO
|
|
#DEFINES += -DHAVE_UPDATE_ASSETS
|
|
DEFINES += -DHAVE_PATCH -DHAVE_RWAV
|
|
DEFINES += -DHAVE_SCREENSHOTS
|
|
DEFINES += -DHAVE_REWIND
|
|
DEFINES += -DHAVE_THREADS
|
|
DEFINES += -DHAVE_GFX_WIDGETS
|
|
DEFINES += -DHAVE_OVERLAY
|
|
DEFINES += -DHAVE_CORE_INFO_CACHE
|
|
#DEFINES += -DHAVE_SOCKET_LEGACY
|
|
CFLAGS += -I. \
|
|
-Ideps \
|
|
-Ideps/rcheevos/include \
|
|
-Ilibretro-common/include
|
|
else
|
|
HAVE_CC_RESAMPLER = 1
|
|
HAVE_MENU_COMMON = 1
|
|
HAVE_RTGA = 1
|
|
HAVE_RPNG = 1
|
|
HAVE_RWEBP = 1
|
|
HAVE_RDDS = 1
|
|
HAVE_RJPEG = 1
|
|
HAVE_RBMP = 1
|
|
HAVE_MENU = 1
|
|
HAVE_RGUI = 1
|
|
HAVE_7ZIP = 1
|
|
HAVE_LIBRETRODB = 1
|
|
HAVE_XMB = 1
|
|
HAVE_STATIC_VIDEO_FILTERS = 1
|
|
HAVE_STATIC_AUDIO_FILTERS = 1
|
|
HAVE_PATCH = 1
|
|
HAVE_SCREENSHOTS = 1
|
|
HAVE_REWIND = 1
|
|
HAVE_AUDIOMIXER = 1
|
|
HAVE_RWAV = 1
|
|
HAVE_CHEATS = 1
|
|
HAVE_VIDEO_FILTER = 1
|
|
HAVE_DSP_FILTER = 1
|
|
HAVE_CONFIGFILE = 1
|
|
HAVE_OVERLAY = 1
|
|
HAVE_GFX_WIDGETS = 1
|
|
HAVE_NETWORKING = 1
|
|
HAVE_IFINFO = 1
|
|
HAVE_CHEEVOS = 1
|
|
HAVE_THREADS = 1
|
|
# the cleanroom crypto, keychain and TLS client
|
|
HAVE_CRYPTO = 1
|
|
HAVE_KEYCHAIN = 1
|
|
HAVE_RETROSSL = 1
|
|
# the built-in NFS client (nfs://); it needs no crypto
|
|
HAVE_RETRONFS = 1
|
|
# the built-in SMB client (smb://), on the crypto above
|
|
HAVE_RETROSMB = 1
|
|
HAVE_CORE_INFO_CACHE = 1
|
|
HAVE_CLOUDSYNC = 1
|
|
|
|
include Makefile.common
|
|
CFLAGS += $(DEF_FLAGS) -I. $(INCLUDE_DIRS)
|
|
endif
|
|
|
|
ifeq ($(strip $(DEVKITPRO)),)
|
|
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitpro")
|
|
endif
|
|
ifeq ($(strip $(DEVKITARM)),)
|
|
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitarm")
|
|
endif
|
|
|
|
ifeq ($(strip $(CTRULIB)),)
|
|
CTRULIB = $(DEVKITPRO)/libctru
|
|
endif
|
|
|
|
ifeq ($(strip $(USE_CTRULIB_2)),1)
|
|
CFLAGS += -DUSE_CTRULIB_2
|
|
endif
|
|
|
|
ifeq ($(LOAD_WITHOUT_CORE_INFO),1)
|
|
CFLAGS += -DLOAD_WITHOUT_CORE_INFO
|
|
endif
|
|
|
|
ifeq ($(strip $(DEVKITTOOLS)),)
|
|
ifeq ($(strip $(USE_CTRULIB_2)),1)
|
|
DEVKITTOOLS = $(DEVKITPRO)/tools
|
|
else
|
|
DEVKITTOOLS = $(DEVKITARM)
|
|
endif
|
|
endif
|
|
|
|
CTR_PICASSO := $(firstword $(wildcard $(DEVKITTOOLS)/bin/picasso $(DEVKITTOOLS)/bin/picasso.exe))
|
|
CTR_BIN2S := $(firstword $(wildcard $(DEVKITTOOLS)/bin/bin2s $(DEVKITTOOLS)/bin/bin2s.exe))
|
|
|
|
ifeq ($(words $(CTR_PICASSO) $(CTR_BIN2S)),2)
|
|
OBJ += gfx/drivers/ctr_shaders/ctr_sprite.o
|
|
else
|
|
$(info CTR: picasso/bin2s unavailable, using prebuilt gfx/drivers/ctr_shaders/ctr_sprite_shbin.S)
|
|
$(info CTR: run 'make -f Makefile.ctr ctr-shaders' on a complete devkitPro install after editing any .vsh/.gsh)
|
|
OBJ += gfx/drivers/ctr_shaders/ctr_sprite_shbin.o
|
|
endif
|
|
|
|
APP_TITLE := $(shell echo "$(APP_TITLE)" | cut -c1-128)
|
|
APP_DESCRIPTION := $(shell echo "$(APP_DESCRIPTION)" | cut -c1-256)
|
|
APP_AUTHOR := $(shell echo "$(APP_AUTHOR)" | cut -c1-128)
|
|
APP_PRODUCT_CODE := $(shell echo $(APP_PRODUCT_CODE) | cut -c1-16)
|
|
APP_UNIQUE_ID := $(shell echo $(APP_UNIQUE_ID) | cut -c1-7)
|
|
|
|
APP_VERSION_MAJOR := $(shell shuf -i 0-63 -n 1)
|
|
APP_VERSION_MINOR := $(shell shuf -i 0-63 -n 1)
|
|
APP_VERSION_MICRO := $(shell shuf -i 0-15 -n 1)
|
|
|
|
MAKEROM_ARGS_COMMON = -rsf $(APP_RSF) -exefslogo -elf $(TARGET).elf -icon $(TARGET).icn -banner $(TARGET).bnr \
|
|
-DAPP_TITLE="$(APP_TITLE)" -DAPP_PRODUCT_CODE="$(APP_PRODUCT_CODE)" -DAPP_UNIQUE_ID=$(APP_UNIQUE_ID) \
|
|
-DAPP_SYSTEM_MODE=$(APP_SYSTEM_MODE) -DAPP_SYSTEM_MODE_EXT=$(APP_SYSTEM_MODE_EXT) \
|
|
-major "$(APP_VERSION_MAJOR)" -minor "$(APP_VERSION_MINOR)" -micro "$(APP_VERSION_MICRO)"
|
|
|
|
INCDIRS := -I$(CTRULIB)/include
|
|
LIBDIRS := -L. -L$(CTRULIB)/lib
|
|
|
|
ARCH := -march=armv6k -mtune=mpcore -mfloat-abi=hard -marm -mfpu=vfp -mtp=soft
|
|
|
|
CFLAGS += -mword-relocations $(ARCH)
|
|
CFLAGS += -DARM11 -D_3DS
|
|
|
|
ifeq ($(strip $(USE_CTRULIB_2)),1)
|
|
CFLAGS += -D__3DS__
|
|
endif
|
|
|
|
ifeq ($(DEBUG), 1)
|
|
CFLAGS += -O0 -g
|
|
else
|
|
CFLAGS += -fomit-frame-pointer -O3
|
|
endif
|
|
|
|
ifeq ($(CONSOLE_LOG), 1)
|
|
CFLAGS += -DCONSOLE_LOG
|
|
endif
|
|
|
|
ifeq ($(LIBCTRU_NO_DEPRECATION), 1)
|
|
CFLAGS += -DLIBCTRU_NO_DEPRECATION
|
|
endif
|
|
|
|
ifeq ($(WHOLE_ARCHIVE_LINK), 1)
|
|
WHOLE_START := -Wl,--whole-archive
|
|
WHOLE_END := -Wl,--no-whole-archive
|
|
endif
|
|
|
|
|
|
CFLAGS += -DRARCH_INTERNAL -DRARCH_CONSOLE
|
|
CFLAGS += -DHAVE_FILTERS_BUILTIN $(DEFINES)
|
|
CFLAGS += -DHAVE_ONLINE_UPDATER -DHAVE_UPDATE_CORES -DHAVE_UPDATE_CORE_INFO
|
|
|
|
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11
|
|
CFLAGS += -Werror=implicit-function-declaration
|
|
|
|
ASFLAGS := -g $(ARCH) -O3
|
|
LDFLAGS += -specs=ctr/3dsx_custom.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
|
|
CFLAGS += -std=gnu99
|
|
|
|
CFLAGS += -ffunction-sections -fdata-sections
|
|
LDFLAGS += -Wl,--gc-sections
|
|
|
|
LIB_CORE :=
|
|
LIB_CORE_FULL :=
|
|
|
|
ifeq ($(HAVE_STATIC_DUMMY),1)
|
|
DEFINES += -DHAVE_STATIC_DUMMY
|
|
else
|
|
LIB_CORE += -lretro_ctr
|
|
LIB_CORE_FULL += libretro_ctr.a
|
|
endif
|
|
|
|
LIBS := $(WHOLE_START) $(LIB_CORE) $(WHOLE_END) -lm
|
|
|
|
ifeq ($(DEBUG), 1)
|
|
LIBS += -lctrud
|
|
else
|
|
LIBS += -lctru
|
|
endif
|
|
|
|
ifneq ($(V),1)
|
|
Q := @
|
|
endif
|
|
|
|
ifeq ($(BUILD_3DSX), 1)
|
|
TARGET_3DSX := $(TARGET).3dsx $(TARGET).smdh
|
|
endif
|
|
|
|
ifeq ($(BUILD_3DS), 1)
|
|
TARGET_3DS := $(TARGET).3ds
|
|
endif
|
|
|
|
ifeq ($(BUILD_CIA), 1)
|
|
TARGET_CIA := $(TARGET).cia
|
|
endif
|
|
|
|
PREFIX := $(DEVKITARM)/bin/arm-none-eabi-
|
|
CC := $(PREFIX)gcc
|
|
CXX := $(PREFIX)g++
|
|
AS := $(PREFIX)as
|
|
AR := $(PREFIX)ar
|
|
OBJCOPY := $(PREFIX)objcopy
|
|
STRIP := $(PREFIX)strip
|
|
NM := $(PREFIX)nm
|
|
LD := $(CXX)
|
|
|
|
ifeq ($(strip $(CTRBANNERTOOL)),)
|
|
ifneq ($(findstring Linux,$(shell uname)),)
|
|
BANNERTOOL = pkg/ctr/tools/bannertool-linux
|
|
else ifneq ($(findstring Darwin,$(shell uname)),)
|
|
BANNERTOOL = pkg/ctr/tools/bannertool-mac
|
|
else
|
|
BANNERTOOL = pkg/ctr/tools/bannertool.exe
|
|
endif
|
|
else
|
|
BANNERTOOL = $(CTRBANNERTOOL)
|
|
endif
|
|
|
|
ifeq ($(strip $(CTRMAKEROM)),)
|
|
ifneq ($(findstring Linux,$(shell uname)),)
|
|
MAKEROM = pkg/ctr/tools/makerom-linux
|
|
else ifneq ($(findstring Darwin,$(shell uname)),)
|
|
MAKEROM = pkg/ctr/tools/makerom-mac
|
|
else
|
|
MAKEROM = pkg/ctr/tools/makerom.exe
|
|
endif
|
|
else
|
|
MAKEROM = $(CTRMAKEROM)
|
|
endif
|
|
|
|
.PHONY: $(BUILD) clean all
|
|
|
|
all: $(TARGET)
|
|
|
|
define INFO
|
|
AR: $(AR)
|
|
ASFLAGS: $(ASFLAGS)
|
|
CC: $(CC)
|
|
CFLAGS: $(CFLAGS)
|
|
CXX: $(CXX)
|
|
CXXFLAGS: $(CXXFLAGS)
|
|
INCDIRS: $(INCDIRS)
|
|
LD: $(LD)
|
|
LDFLAGS: $(LDFLAGS)
|
|
LIBDIRS: $(LIBDIRS)
|
|
LIBS: $(LIBS)
|
|
OBJ: $(OBJ)
|
|
endef
|
|
export INFO
|
|
|
|
info:
|
|
ifneq ($(V),1)
|
|
@echo "$$INFO"
|
|
endif
|
|
|
|
|
|
$(TARGET): $(TARGET_3DSX) $(TARGET_3DS) $(TARGET_CIA)
|
|
$(TARGET).3dsx: $(TARGET).elf
|
|
$(TARGET).elf: $(OBJ) $(LIB_CORE_FULL)
|
|
|
|
.PHONY: ctr-shaders
|
|
ctr-shaders:
|
|
@set -e; \
|
|
d=gfx/drivers/ctr_shaders; \
|
|
trap 'rm -f $$d/ctr_sprite.shbin $$d/ctr_sprite_shbin.S.tmp' EXIT; \
|
|
$(CTR_PICASSO) $$d/ctr_sprite.vsh $$d/ctr_sprite.gsh -o $$d/ctr_sprite.shbin; \
|
|
$(CTR_BIN2S) $$d/ctr_sprite.shbin > $$d/ctr_sprite_shbin.S.tmp; \
|
|
mv $$d/ctr_sprite_shbin.S.tmp $$d/ctr_sprite_shbin.S
|
|
|
|
%.o: %.vsh %.gsh
|
|
$(CTR_PICASSO) $^ -o $*.shbin
|
|
$(CTR_BIN2S) $*.shbin > $*.shbin.s
|
|
$(PREFIX)as -o $@ $*.shbin.s
|
|
rm $*.shbin $*.shbin.s
|
|
|
|
%.o: %.vsh
|
|
$(CTR_PICASSO) $^ -o $*.shbin
|
|
$(CTR_BIN2S) $*.shbin > $*.shbin.s
|
|
$(PREFIX)as -o $@ $*.shbin.s
|
|
rm $*.shbin $*.shbin.s
|
|
|
|
%.o: %.cpp
|
|
@$(if $(Q), $(shell echo echo CXX $<),)
|
|
$(Q)$(CXX) -c -o $@ $< $(CXXFLAGS) $(INCDIRS)
|
|
|
|
%.o: %.c
|
|
@$(if $(Q), $(shell echo echo CC $<),)
|
|
$(Q)$(CC) -c -o $@ $< $(CFLAGS) $(INCDIRS)
|
|
|
|
%.o: %.s
|
|
@$(if $(Q), $(shell echo echo CC $<),)
|
|
$(Q)$(CC) -c -o $@ $< $(ASFLAGS)
|
|
|
|
%.o: %.S
|
|
@$(if $(Q), $(shell echo echo CC $<),)
|
|
$(Q)$(CC) -c -o $@ $< $(ASFLAGS)
|
|
|
|
%.a:
|
|
@$(if $(Q), $(shell echo echo AR $<),)
|
|
$(Q)$(AR) -rc $@ $^
|
|
|
|
%.vsh:
|
|
|
|
$(TARGET).smdh: $(TARGET).elf $(APP_ICON)
|
|
$(DEVKITTOOLS)/bin/smdhtool --create "$(APP_TITLE)" "$(APP_DESCRIPTION)" "$(APP_AUTHOR)" $(APP_ICON) $@
|
|
|
|
$(TARGET).3dsx: $(TARGET).elf
|
|
ifeq ($(APP_BIG_TEXT_SECTION), 1)
|
|
cp pkg/ctr/big_text_section.xml $(TARGET).xml
|
|
else
|
|
rm -f $(TARGET).xml
|
|
endif
|
|
$(DEVKITTOOLS)/bin/3dsxtool $< $@ $(_3DSXFLAGS)
|
|
|
|
$(TARGET).elf: ctr/3dsx_custom_crt0.o
|
|
@$(if $(Q), $(shell echo echo LD $@),)
|
|
$(Q)$(LD) $(LDFLAGS) $(OBJ) $(LIBDIRS) $(LIBS) -o $@
|
|
$(NM) -CSn $@ > $(notdir $*.lst)
|
|
|
|
$(TARGET).bnr: $(TARGET).elf $(APP_BANNER) $(APP_AUDIO)
|
|
$(BANNERTOOL) makebanner -i "$(APP_BANNER)" -a "$(APP_AUDIO)" -o $@
|
|
|
|
$(TARGET).icn: $(TARGET).elf $(APP_ICON)
|
|
$(BANNERTOOL) makesmdh -s "$(APP_TITLE)" -l "$(APP_TITLE)" -p "$(APP_AUTHOR)" -i $(APP_ICON) -o $@
|
|
|
|
$(TARGET).3ds: $(TARGET).elf $(TARGET).bnr $(TARGET).icn $(APP_RSF)
|
|
$(MAKEROM) -f cci -o $@ $(MAKEROM_ARGS_COMMON) -DAPP_ENCRYPTED=true
|
|
|
|
$(TARGET).cia: $(TARGET).elf $(TARGET).bnr $(TARGET).icn $(APP_RSF)
|
|
$(MAKEROM) -f cia -o $@ $(MAKEROM_ARGS_COMMON) -DAPP_ENCRYPTED=false
|
|
|
|
clean:
|
|
@$(if $(Q), echo $@,)
|
|
$(Q)rm -f $(OBJ)
|
|
$(Q)rm -f $(TARGET).3dsx
|
|
$(Q)rm -f $(TARGET).elf
|
|
$(Q)rm -f $(TARGET).3ds
|
|
$(Q)rm -f $(TARGET).cia
|
|
$(Q)rm -f $(TARGET).smdh
|
|
$(Q)rm -f $(TARGET).bnr
|
|
$(Q)rm -f $(TARGET).icn
|
|
$(Q)rm -f ctr/ctr_config_*.o
|
|
$(Q)rm -f ctr/3dsx_custom_crt0.o
|
|
$(Q)rm -f gfx/drivers/ctr_shaders/*.shbin gfx/drivers/ctr_shaders/*.shbin.s
|
|
|
|
.PHONY: clean
|