From: chaoskagami Date: Sat, 2 Jul 2016 13:48:12 +0000 (-0400) Subject: Future proofing - anti-root clutter. X-Git-Tag: v0.2.0~35 X-Git-Url: https://chaos.moe/g/?a=commitdiff_plain;h=349ec2338f911dbdbe2ead560f713a69aab8f03e;p=corbenik%2Fcorbenik.git Future proofing - anti-root clutter. Since nobody has decided what the hell to use yet, there's three types of paths supported here: * root=clusterfuck (default) - What you're used to. Clutter on the root. * root=shadowhand - @RShadowhand style paths - jailed in /homebrew/3ds. * root=cruel - @Cruel style paths - CFW relevant data in /3ds/apps folder and transient and user-supplied data in /3ds/appdata --- diff --git a/Makefile b/Makefile index b7e539b..6605d01 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,22 @@ fw_name ?= Corbenik # If unset, the primary folder is /corbenik. fw_folder ?= corbenik +# Other valid options: +# shadowhand +# cruel +root ?= clusterfuck + +ifeq "$(root)" "clusterfuck" + PATHARGS := -DPATH_ROOT=\"\" + PATHARGS += -DPATH_DATA=\"/$(fw_folder)\" +else ifeq "$(root)" "cruel" + PATHARGS := -DPATH_ROOT=\"/3ds/apps\" + PATHARGS += -DPATH_DATA=\"/3ds/appdata/$(fw_folder)\" +else ifeq "$(root)" "shadowhand" + PATHARGS := -DPATH_ROOT=\"/homebrew/3ds\" + PATHARGS += -DPATH_DATA=\"/homebrew/3ds/$(fw_folder)\" +endif + dir_source := source dir_data := data dir_build := build @@ -30,7 +46,7 @@ REL ?= master CHAINLOADER ?= 1 CROSS_ASFLAGS := -mlittle-endian -mcpu=arm946e-s -march=armv5te -CROSS_CFLAGS := -MMD -MP -Wall -Wextra -Werror -fomit-frame-pointer -Os $(ASFLAGS) -fshort-wchar -fno-builtin -std=gnu11 -DVERSION=\"$(REVISION)\" -DREL=\"$(REL)\" -DCHAINLOADER=$(CHAINLOADER) -DPATH_CFW=\"/$(fw_folder)\" -DFW_NAME=\"$(fw_name)\" +CROSS_CFLAGS := -MMD -MP -Wall -Wextra -Werror -fomit-frame-pointer -Os $(ASFLAGS) -fshort-wchar -fno-builtin -std=gnu11 -DVERSION=\"$(REVISION)\" -DREL=\"$(REL)\" -DCHAINLOADER=$(CHAINLOADER) -DPATH_CFW=\"/$(fw_folder)\" -DFW_NAME=\"$(fw_name)\" $(PATHARGS) CROSS_FLAGS := dir_out=$(abspath $(dir_out)) --no-print-directory CROSS_LDFLAGS := -nostdlib -Wl,-z,defs -lgcc -Wl,-Map,$(dir_build)/link.map @@ -55,7 +71,7 @@ release: .PHONY: hosttools hosttools: - make -C host/bdfe dir_out=$(dir_out) fw_folder=$(fw_folder) + make -C host/bdfe dir_out=$(dir_out) fw_folder=$(fw_folder) root=$(root) .PHONY: font font: hosttools @@ -71,15 +87,15 @@ full: all contrib $(dir_out)/$(fw_folder)/locale .PHONY: contrib contrib: - make -C contrib dir_out=$(dir_out) fw_name=$(fw_name) fw_folder=$(fw_folder) + make -C contrib dir_out=$(dir_out) fw_name=$(fw_name) fw_folder=$(fw_folder) root=$(root) .PHONY: external external: - make -C external dir_out=$(dir_out) fw_name=$(fw_name) fw_folder=$(fw_folder) CHAINLOADER=$(CHAINLOADER) + make -C external dir_out=$(dir_out) fw_name=$(fw_name) fw_folder=$(fw_folder) CHAINLOADER=$(CHAINLOADER) root=$(root) .PHONY: patch patch: - make -C patch dir_out=$(dir_out) fw_name=$(fw_name) fw_folder=$(fw_folder) + make -C patch dir_out=$(dir_out) fw_name=$(fw_name) fw_folder=$(fw_folder) root=$(root) .PHONY: a9lh a9lh: $(dir_out)/arm9loaderhax.bin @@ -96,9 +112,9 @@ $(dir_out)/$(fw_folder)/locale: all .PHONY: clean clean: rm -f host/{font-emit,font.h,font_prop.h,termfont.bin} - make -C external dir_out=$(dir_out) fw_folder=$(fw_folder) clean - make -C patch dir_out=$(dir_out) fw_folder=$(fw_folder) clean - make -C host/bdfe dir_out=$(dir_out) fw_folder=$(fw_folder) clean + make -C external dir_out=$(dir_out) fw_folder=$(fw_folder) root=$(root) clean + make -C patch dir_out=$(dir_out) fw_folder=$(fw_folder) root=$(root) clean + make -C host/bdfe dir_out=$(dir_out) fw_folder=$(fw_folder) root=$(root) clean rm -rf $(dir_out) $(dir_build) .PHONY: $(dir_out)/arm9loaderhax.bin diff --git a/external/Makefile b/external/Makefile index e421fe3..5cac09e 100644 --- a/external/Makefile +++ b/external/Makefile @@ -21,24 +21,24 @@ clean: clean_loader clean_bits clean_screeninit .PHONY: loader loader: - make -C loader + make -C loader dir_out=$(dir_out) fw_folder=$(fw_folder) root=$(root) .PHONY: bits bits: - make -C bits + make -C bits dir_out=$(dir_out) fw_folder=$(fw_folder) root=$(root) .PHONY: screeninit screeninit: - make -C screeninit + make -C screeninit dir_out=$(dir_out) fw_folder=$(fw_folder) root=$(root) .PHONY: clean_loader clean_loader: - make -C loader clean + make -C loader dir_out=$(dir_out) fw_folder=$(fw_folder) root=$(root) clean .PHONY: clean_bits clean_bits: - make -C bits clean + make -C bits dir_out=$(dir_out) fw_folder=$(fw_folder) root=$(root) clean .PHONY: clean_screeninit screeninit_clean: - make -C screeninit clean + make -C screeninit dir_out=$(dir_out) fw_folder=$(fw_folder) root=$(root) clean diff --git a/external/loader/Makefile b/external/loader/Makefile index b40f7fe..c014baf 100644 --- a/external/loader/Makefile +++ b/external/loader/Makefile @@ -10,9 +10,20 @@ endif TOPDIR ?= $(CURDIR) MAKEROM ?= makerom -PYTHON ?= python3 +PYTHON ?= python2 include $(DEVKITARM)/3ds_rules +ifeq "$(root)" "clusterfuck" + PATHARGS := -DPATH_ROOT=\"\" + PATHARGS += -DPATH_DATA=\"/$(fw_folder)\" +else ifeq "$(root)" "cruel" + PATHARGS := -DPATH_ROOT=\"/3ds/apps\" + PATHARGS += -DPATH_DATA=\"/3ds/appdata/$(fw_folder)\" +else ifeq "$(root)" "shadowhand" + PATHARGS := -DPATH_ROOT=\"/homebrew/3ds\" + PATHARGS += -DPATH_DATA=\"/homebrew/3ds/$(fw_folder)\" +endif + #--------------------------------------------------------------------------------- # TARGET is the name of the output # BUILD is the directory where object files & intermediate files will be placed @@ -36,7 +47,7 @@ CFLAGS := -flto -Wall -Os -mword-relocations $(ERROR) \ -fomit-frame-pointer -ffunction-sections -fdata-sections -fshort-wchar \ $(ARCH) -CFLAGS += $(INCLUDE) -DARM11 -D_3DS -DLOADER=1 -DPATH_CFW=\"/$(fw_folder)\" +CFLAGS += $(INCLUDE) -DARM11 -D_3DS -DLOADER=1 -DPATH_CFW=\"/$(fw_folder)\" $(PATHARGS) CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu99 diff --git a/source/patch_format.h b/source/patch_format.h index 3a91282..76b26e0 100644 --- a/source/patch_format.h +++ b/source/patch_format.h @@ -22,49 +22,58 @@ #define PATCH_DISABLED (1 << 2) // Do not allow changing this patch's status. With PATCH_MANDATORY, // this prevents disabling it. +#ifndef PATH_ROOT +#define PATH_ROOT "" // Root "storage" directory. Nothing by default (e.g. root clutter mode) +#endif + // You can redefine this in the Makefile, if you'd like. // Recommended names for being silly: // Windows // system -#ifndef PATH_CFW -#define PATH_CFW "/corbenik" // CFW root directory. -#endif -#define PATH_CONFIG_DIR PATH_CFW "/config" // Config file directory. -#define PATH_CONFIG PATH_CONFIG_DIR "/main.conf" // Config file. -#define PATH_CPU_CFG PATH_CONFIG_DIR "/cpu.conf" // CPU settings config +//#ifndef PATH_CFW +//#define PATH_CFW "/corbenik" // CFW root directory. +//#endif + +//#ifndef PATH_DATA +//#define PATH_DATA PATH_ROOT PATH_CFW // Data "storage" directory. Nothing by default (e.g. root clutter mode) +//#endif -#define PATH_LOCEMU PATH_CFW "/locale" // Locale emulation config +#define PATH_MODULES PATH_ROOT PATH_CFW "/module" // Sysmodule location +#define PATH_PATCHES PATH_ROOT PATH_CFW "/patch" // Patch binary folder. -#define PATH_PATCHES PATH_CFW "/patch" // Patch binary folder. -#define PATH_FIRMWARES PATH_CFW "/firmware" // Firmware folder. -#define PATH_MODULES PATH_CFW "/module" // Sysmodule location +#define PATH_BITS PATH_ROOT PATH_CFW "/bits" // Path to misc bits we need (emunand code, reboot code, etc) + +#define PATH_EMUNAND_CODE PATH_BITS "/emunand.bin" // Emunand hook. +#define PATH_SCREENINIT_CODE PATH_BITS "/screeninit.bin" // Screeninit code (ARM11) +#define PATH_BACKDOOR PATH_BITS "/backdoor.bin" // svcBackdoor +#define PATH_REBOOT_HOOK PATH_BITS "/reboot_hook.bin" // Reboot hook +#define PATH_REBOOT_CODE PATH_BITS "/reboot_code.bin" // Reboot entry code -#define PATH_CHAINS PATH_CFW "/chain" +#define PATH_CHAINS PATH_DATA "/chain" -#define PATH_TEMP PATH_CFW "/cache" // Files that are transient and used to speed operation +#define PATH_TEMP PATH_DATA "/cache" // Files that are transient and used to speed operation #define PATH_LOADER_CACHE PATH_TEMP "/loader" // Cached patch bytecode for loader. +#define PATH_LOCEMU PATH_DATA "/locale" // Locale emulation config +#define PATH_FIRMWARES PATH_DATA "/firmware" // Firmware folder. + +#define PATH_CONFIG_DIR PATH_DATA "/config" // Config file directory. +#define PATH_CONFIG PATH_CONFIG_DIR "/main.conf" // Config file. +#define PATH_CPU_CFG PATH_CONFIG_DIR "/cpu.conf" // CPU settings config + #define PATH_NATIVE_P PATH_TEMP "/p_native" #define PATH_AGB_P PATH_TEMP "/p_agb" #define PATH_TWL_P PATH_TEMP "/p_twl" -#define PATH_KEYS PATH_CFW "/keys" // Keyfiles will be loaded from this dir, and +#define PATH_KEYS PATH_DATA "/keys" // Keyfiles will be loaded from this dir, and // additionally the root if not found. -#define PATH_EXEFS PATH_CFW "/exe" // ExeFS overrides/dumps, named by titleid +#define PATH_EXEFS PATH_DATA "/exe" // ExeFS overrides/dumps, named by titleid #define PATH_EXEFS_TEXT PATH_EXEFS "/text" // Text segment overrides/dumps, named by titleid #define PATH_EXEFS_RO PATH_EXEFS "/ro" // RO segment overrides/dumps, named by titleid #define PATH_EXEFS_DATA PATH_EXEFS "/data" // Data segment overrides/dumps, named by titleid -#define PATH_BITS PATH_CFW "/bits" // Path to misc bits we need (emunand code, reboot code, etc) - -#define PATH_EMUNAND_CODE PATH_BITS "/emunand.bin" // Emunand hook. -#define PATH_SCREENINIT_CODE PATH_BITS "/screeninit.bin" // Screeninit code (ARM11) -#define PATH_BACKDOOR PATH_BITS "/backdoor.bin" // svcBackdoor -#define PATH_REBOOT_HOOK PATH_BITS "/reboot_hook.bin" // Reboot hook -#define PATH_REBOOT_CODE PATH_BITS "/reboot_code.bin" // Reboot entry code - #define PATH_NATIVE_F PATH_FIRMWARES "/native" #define PATH_AGB_F PATH_FIRMWARES "/agb" #define PATH_TWL_F PATH_FIRMWARES "/twl"