157 lines
5.5 KiB
Makefile
157 lines
5.5 KiB
Makefile
# Makefile cheat sheet:
|
|
# https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html
|
|
|
|
all: build/henloader.iso
|
|
|
|
# Known-good JDK packages for Linux
|
|
# Source: https://github.com/adoptium/temurin8-binaries/releases
|
|
|
|
ARCH := $(shell uname -m)
|
|
ifeq ($(ARCH),aarch64)
|
|
JDK8_PACKAGE := thirdparty/OpenJDK8U-jdk_aarch64_linux_hotspot_8u462b08.tar.gz
|
|
JDK11_PACKAGE := thirdparty/OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.28_6.tar.gz
|
|
else ifeq ($(ARCH),x86_64)
|
|
JDK8_PACKAGE := thirdparty/OpenJDK8U-jdk_x64_linux_hotspot_8u462b08.tar.gz
|
|
JDK11_PACKAGE := thirdparty/OpenJDK11U-jdk_x64_linux_hotspot_11.0.28_6.tar.gz
|
|
else
|
|
$(error Unknown ARCH "$(ARCH)")
|
|
endif
|
|
|
|
# JDK8 is required for almost every part of the process
|
|
|
|
JDK8 := build/jdk8
|
|
JAVA8 := $(JDK8)/bin/java
|
|
$(JAVA8):
|
|
mkdir -p $(JDK8)
|
|
tar -xf $(JDK8_PACKAGE) -C $(JDK8) --strip-components=1
|
|
|
|
# A Linux port of NetBSD makefs is used to create the final UDF-format ISO image
|
|
|
|
MAKEFS := build/makefs
|
|
MAKEFS_SOURCES := $(wildcard thirdparty/makefs/* thirdparty/makefs/udf/*)
|
|
$(MAKEFS): $(MAKEFS_SOURCES)
|
|
$(MAKE) -C thirdparty/makefs
|
|
mkdir -p $(dir $(MAKEFS))
|
|
mv thirdparty/makefs/makefs $(MAKEFS)
|
|
|
|
# BD-J JAR files need to be signed with BDSigner
|
|
|
|
BDTOOLS := thirdparty/bd-tools
|
|
SECCPATH := $(BDTOOLS)/security.jar:$(BDTOOLS)/bcprov-jdk15-137.jar:$(BDTOOLS)/jdktools.jar
|
|
KEYSTORE := thirdparty/bd-certificates/keystore.store
|
|
BDSIGNER := $(JAVA8) -cp $(SECCPATH) net.java.bd.tools.security.BDSigner -keystore $(KEYSTORE)
|
|
|
|
# InitXlet is the initial Xlet that the PS4 loads. It always lives on the Blu-ray disc.
|
|
|
|
CPATH := thirdparty/bd-stubs/interactive.zip:thirdparty/topsecret/rt.jar:thirdparty/topsecret/bdjstack.jar:src
|
|
JFLAGS := -Xlint:all -Xlint:-static -Xlint:-serial -Xlint:-options -source 1.3 -target 1.3
|
|
|
|
LOADER_DSTDIR := build/henloader
|
|
LOADER_BD_PERM := org/bdj/bluray.InitXlet.perm
|
|
LOADER_SOURCES += org/bdj/sandbox/DisableSecurityManagerAction.java
|
|
LOADER_SOURCES += org/bdj/external/BinLoader.java
|
|
LOADER_SOURCES += org/bdj/external/Helper.java
|
|
LOADER_SOURCES += org/bdj/external/Kernel.java
|
|
LOADER_SOURCES += org/bdj/external/KernelOffset.java
|
|
LOADER_SOURCES += org/bdj/external/Poops.java
|
|
LOADER_SOURCES += org/bdj/InitXlet.java
|
|
LOADER_SOURCES += org/bdj/MessagesOutputStream.java
|
|
LOADER_SOURCES += org/bdj/Screen.java
|
|
|
|
build/henloader.jar: $(JAVA8) $(addprefix src/,$(LOADER_SOURCES)) src/$(LOADER_BD_PERM)
|
|
mkdir -p $(LOADER_DSTDIR)
|
|
mkdir -p $(LOADER_DSTDIR)/$(dir $(LOADER_BD_PERM))
|
|
cp src/$(LOADER_BD_PERM) $(LOADER_DSTDIR)/$(LOADER_BD_PERM)
|
|
mkdir -p $(LOADER_DSTDIR)/org/homebrew/
|
|
$(JDK8)/bin/javac -d $(LOADER_DSTDIR) -sourcepath src $(JFLAGS) -cp $(CPATH) $(addprefix src/,$(LOADER_SOURCES))
|
|
$(JDK8)/bin/jar cf $@ -C $(LOADER_DSTDIR) .
|
|
$(BDSIGNER) $@
|
|
-rm META-INF/SIG-BD00.RSA
|
|
-rm META-INF/SIG-BD00.SF
|
|
-rmdir META-INF
|
|
|
|
# Assemble the Blu-ray disc
|
|
|
|
DISC := build/disc
|
|
BD_JO := $(DISC)/BDMV/BDJO/00000.bdjo
|
|
BD_JAR := $(DISC)/BDMV/JAR/00000.jar
|
|
BD_FONT := $(DISC)/BDMV/AUXDATA/00000.otf
|
|
BD_FNTIDX := $(DISC)/BDMV/AUXDATA/dvb.fontindex
|
|
BD_HEN := $(DISC)/BDMV/AUXDATA/aiofix_USBpayload.elf
|
|
BD_META := $(DISC)/BDMV/META/DL/bdmt_eng.xml
|
|
BD_BANNER := $(DISC)/BDMV/META/DL/logo.jpg
|
|
BD_INDEX := $(DISC)/BDMV/index.bdmv
|
|
BD_MVOBJ := $(DISC)/BDMV/MovieObject.bdmv
|
|
BD_ID := $(DISC)/CERTIFICATE/id.bdmv
|
|
BD_ACRT := $(DISC)/CERTIFICATE/app.discroot.crt
|
|
BD_BCRT := $(DISC)/CERTIFICATE/bu.discroot.crt
|
|
|
|
# PKG files to include at root of BD
|
|
PKG_FILES := $(wildcard apps/*.pkg)
|
|
BD_PKGS := $(patsubst apps/%,$(DISC)/%,$(PKG_FILES))
|
|
|
|
BD_ALL := $(BD_JO) $(BD_JAR) $(BD_FONT) $(BD_FNTIDX) $(BD_META) $(BD_BANNER) \
|
|
$(BD_INDEX) $(BD_MVOBJ) $(BD_ID) $(BD_ACRT) $(BD_BCRT) $(BD_HEN) $(BD_PKGS)
|
|
|
|
# Create directories
|
|
$(DISC): $(sort $(dir $(BD_ALL)))
|
|
$(sort $(dir $(BD_ALL))):
|
|
mkdir -p $(dir $(BD_ALL))
|
|
|
|
# bdjo.xml/00000.bdjo tells the Blu-ray player which Xlet subclass to load
|
|
$(BD_JO): bd-metadata/bdjo.xml $(DISC) $(JAVA8)
|
|
$(JAVA8) -jar thirdparty/bd-tools/bdjo.jar $< $@
|
|
|
|
# Signed JAR containing the HenLoader Xlet
|
|
$(BD_JAR): build/henloader.jar $(DISC)
|
|
cp $< $@
|
|
|
|
# There needs to be at least one font file on the disc, if I understand correctly
|
|
$(BD_FONT): bd-metadata/OpenSans-Regular.otf $(DISC)
|
|
cp $< $@
|
|
$(BD_FNTIDX): bd-metadata/dvb.fontindex $(DISC)
|
|
cp $< $@
|
|
$(BD_HEN): bd-metadata/aiofix_USBpayload.elf $(DISC)
|
|
cp $< $@
|
|
|
|
# Metadata about the disc, including user-visible name and banner
|
|
$(BD_META): bd-metadata/bdmt_eng.xml $(DISC)
|
|
cp $< $@
|
|
$(BD_BANNER): bd-metadata/logo.jpg $(DISC)
|
|
cp $< $@
|
|
|
|
# Blu-ray index that points the player towards MovieObject
|
|
$(BD_INDEX): bd-metadata/index.xml $(DISC) $(JAVA8)
|
|
$(JAVA8) -jar thirdparty/bd-tools/index.jar $< $@
|
|
|
|
# Blu-ray movie object that somehow tells the player to run the BD-J xlet? Extremely cursed
|
|
$(BD_MVOBJ): bd-metadata/movieobject.xml $(DISC) $(JAVA8)
|
|
$(JAVA8) -jar thirdparty/bd-tools/movieobject.jar $< $@
|
|
|
|
# Just an orgId really, needs to match bdjo and perm
|
|
$(BD_ID): bd-metadata/id.xml $(DISC) $(JAVA8)
|
|
$(JAVA8) -jar thirdparty/bd-tools/id.jar $< $@
|
|
|
|
# Certificates are taken from BDJ-SDK, need to match the keystore
|
|
$(BD_ACRT): thirdparty/bd-certificates/app.discroot.crt $(DISC)
|
|
cp $< $@
|
|
$(BD_BCRT): thirdparty/bd-certificates/bu.discroot.crt $(DISC)
|
|
cp $< $@
|
|
|
|
# Copy PKG files to root of BD
|
|
$(BD_PKGS): $(DISC)/%.pkg: apps/%.pkg $(DISC)
|
|
cp $< $@
|
|
|
|
# Generate the final ISO containing HenLoader
|
|
|
|
DISC_LABEL := NiklasCFW PS4 Jailbreak 12.52
|
|
|
|
build/henloader.iso: $(MAKEFS) $(BD_ALL)
|
|
$(MAKEFS) -m 256m -t udf -o "T=bdre,v=2.50,L=$(DISC_LABEL)" $@ $(DISC)
|
|
|
|
# Cleaning just means deleting the build directory
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -r build
|