mirror of
https://github.com/EmiiBytee/np2kai-ps4.git
synced 2026-10-06 10:00:13 +02:00
155 lines
6.1 KiB
Makefile
155 lines
6.1 KiB
Makefile
# Package metadata.
|
|
TITLE := NP2kai PS4
|
|
RELEASE_VERSION := 1.0
|
|
VERSION := 01.00
|
|
TITLE_ID := BREW00984
|
|
CONTENT_ID := IV0000-BREW00984_00-NP2KAIBOOTSTRAP0
|
|
|
|
# NP2kai and libretro-common static libraries.
|
|
CORE_DIR := third_party/NP2kai/sdl
|
|
CORE_LIB := $(CORE_DIR)/np2kai_libretro_ps4.a
|
|
COMMON_LIB := build/ps4-libretro-common/libretro_common_ps4.a
|
|
CORE_INCLUDE := $(CORE_DIR)/libretro/libretro-common/include
|
|
|
|
# Libraries linked into the ELF.
|
|
LIBS := -lc -lkernel -lc++ -lSceUserService -lSceVideoOut -lSceAudioOut -lScePad -lSceSysmodule -lSceKeyboard -lSceFreeType -lSDL2 -lSDL2_image
|
|
|
|
# Additional compile flags.
|
|
EXTRAFLAGS := -Ithird_party/NP2kai/sdl/libretro/libretro-common/include -O3 -DNDEBUG -march=btver2 -mtune=btver2 -fomit-frame-pointer
|
|
|
|
# Asset and module directories.
|
|
ASSETS := $(shell find assets -type f ! -path 'assets/games/*' ! -path 'assets/system/np2kai/*.rom' ! -path 'assets/system/np2kai/*.ROM' ! -path 'assets/system/np2kai/font.bmp')
|
|
LIBMODULES := sce_module/libc.prx sce_module/libSceFios2.prx
|
|
OPENORBIS_MODULE_DIR = $(TOOLCHAIN)/src/modules
|
|
|
|
# Root vars.
|
|
TOOLCHAIN := $(OO_PS4_TOOLCHAIN)
|
|
PROJDIR := SDL2
|
|
COMMONDIR := $(TOOLCHAIN)/samples/_common
|
|
INTDIR := $(PROJDIR)/x64/Debug
|
|
|
|
# Define objects to build.
|
|
CFILES := $(wildcard $(PROJDIR)/*.c)
|
|
CPPFILES := $(wildcard $(PROJDIR)/*.cpp)
|
|
COMMONFILES :=
|
|
OBJS := $(patsubst $(PROJDIR)/%.c, $(INTDIR)/%.o, $(CFILES)) $(patsubst $(PROJDIR)/%.cpp, $(INTDIR)/%.o, $(CPPFILES)) $(patsubst $(COMMONDIR)/%.cpp, $(INTDIR)/%.o, $(COMMONFILES))
|
|
|
|
# Define final C/C++ flags.
|
|
CFLAGS := --target=x86_64-pc-freebsd12-elf -fPIC -funwind-tables -c $(EXTRAFLAGS) -isysroot $(TOOLCHAIN) -isystem $(TOOLCHAIN)/include
|
|
CXXFLAGS := $(CFLAGS) -isystem $(TOOLCHAIN)/include/c++/v1
|
|
LDFLAGS := -m elf_x86_64 -pie --script $(TOOLCHAIN)/link.x --eh-frame-hdr -L$(TOOLCHAIN)/lib $(LIBS) $(TOOLCHAIN)/lib/crt1.o
|
|
|
|
# Create the intermediate directory.
|
|
_unused := $(shell mkdir -p $(INTDIR))
|
|
|
|
# Check for Linux vs macOS and account for clang/ld path.
|
|
UNAME_S := $(shell uname -s)
|
|
|
|
ifeq ($(UNAME_S),Linux)
|
|
CC := clang
|
|
CCX := clang++
|
|
LD := ld.lld
|
|
CDIR := linux
|
|
endif
|
|
|
|
ifeq ($(UNAME_S),Darwin)
|
|
CC := /usr/local/opt/llvm/bin/clang
|
|
CCX := /usr/local/opt/llvm/bin/clang++
|
|
LD := /usr/local/opt/llvm/bin/ld.lld
|
|
CDIR := macos
|
|
endif
|
|
|
|
all: $(CONTENT_ID).pkg
|
|
|
|
.PHONY: prepare-openorbis-modules
|
|
prepare-openorbis-modules: sce_sys/about/right.sprx $(LIBMODULES)
|
|
|
|
sce_sys/about/right.sprx:
|
|
@mkdir -p $(@D)
|
|
@test -f "$(OPENORBIS_MODULE_DIR)/right.sprx" || \
|
|
(echo "ERROR: falta $(OPENORBIS_MODULE_DIR)/right.sprx" >&2; exit 1)
|
|
cp "$(OPENORBIS_MODULE_DIR)/right.sprx" "$@"
|
|
|
|
sce_module/libc.prx:
|
|
@mkdir -p $(@D)
|
|
@test -f "$(OPENORBIS_MODULE_DIR)/libc.prx" || \
|
|
(echo "ERROR: falta $(OPENORBIS_MODULE_DIR)/libc.prx" >&2; exit 1)
|
|
cp "$(OPENORBIS_MODULE_DIR)/libc.prx" "$@"
|
|
|
|
sce_module/libSceFios2.prx:
|
|
@mkdir -p $(@D)
|
|
@test -f "$(OPENORBIS_MODULE_DIR)/libSceFios2.prx" || \
|
|
(echo "ERROR: falta $(OPENORBIS_MODULE_DIR)/libSceFios2.prx" >&2; exit 1)
|
|
cp "$(OPENORBIS_MODULE_DIR)/libSceFios2.prx" "$@"
|
|
|
|
.PHONY: validate-package-metadata
|
|
validate-package-metadata: prepare-openorbis-modules
|
|
python3 tools/validate-ps4-package-metadata.py \
|
|
--version "$(VERSION)" \
|
|
--title-id "$(TITLE_ID)" \
|
|
--content-id "$(CONTENT_ID)" \
|
|
--right-sprx sce_sys/about/right.sprx \
|
|
--icon sce_sys/icon0.png
|
|
|
|
$(CONTENT_ID).pkg: pkg.gp4
|
|
$(TOOLCHAIN)/bin/$(CDIR)/PkgTool.Core pkg_build $< .
|
|
|
|
pkg.gp4: eboot.bin sce_sys/about/right.sprx sce_sys/param.sfo sce_sys/icon0.png $(LIBMODULES) $(ASSETS) | validate-package-metadata
|
|
$(TOOLCHAIN)/bin/$(CDIR)/create-gp4 -out $@ --content-id=$(CONTENT_ID) --files "$^"
|
|
./repair-gp4-rootdir.py $@
|
|
|
|
sce_sys/param.sfo: Makefile
|
|
$(TOOLCHAIN)/bin/$(CDIR)/PkgTool.Core sfo_new $@
|
|
$(TOOLCHAIN)/bin/$(CDIR)/PkgTool.Core sfo_setentry $@ APP_TYPE --type Integer --maxsize 4 --value 1
|
|
$(TOOLCHAIN)/bin/$(CDIR)/PkgTool.Core sfo_setentry $@ APP_VER --type Utf8 --maxsize 8 --value '$(VERSION)'
|
|
$(TOOLCHAIN)/bin/$(CDIR)/PkgTool.Core sfo_setentry $@ ATTRIBUTE --type Integer --maxsize 4 --value 0
|
|
$(TOOLCHAIN)/bin/$(CDIR)/PkgTool.Core sfo_setentry $@ CATEGORY --type Utf8 --maxsize 4 --value 'gd'
|
|
$(TOOLCHAIN)/bin/$(CDIR)/PkgTool.Core sfo_setentry $@ CONTENT_ID --type Utf8 --maxsize 48 --value '$(CONTENT_ID)'
|
|
$(TOOLCHAIN)/bin/$(CDIR)/PkgTool.Core sfo_setentry $@ DOWNLOAD_DATA_SIZE --type Integer --maxsize 4 --value 0
|
|
$(TOOLCHAIN)/bin/$(CDIR)/PkgTool.Core sfo_setentry $@ SYSTEM_VER --type Integer --maxsize 4 --value 0
|
|
$(TOOLCHAIN)/bin/$(CDIR)/PkgTool.Core sfo_setentry $@ TITLE --type Utf8 --maxsize 128 --value '$(TITLE)'
|
|
$(TOOLCHAIN)/bin/$(CDIR)/PkgTool.Core sfo_setentry $@ TITLE_ID --type Utf8 --maxsize 12 --value '$(TITLE_ID)'
|
|
$(TOOLCHAIN)/bin/$(CDIR)/PkgTool.Core sfo_setentry $@ VERSION --type Utf8 --maxsize 8 --value '$(VERSION)'
|
|
|
|
$(CORE_LIB):
|
|
./build-ps4-core.sh
|
|
|
|
$(COMMON_LIB):
|
|
./build-libretro-common-ps4.sh
|
|
|
|
eboot.bin: $(INTDIR) $(OBJS) $(CORE_LIB) $(COMMON_LIB)
|
|
$(LD) $(INTDIR)/*.o \
|
|
--whole-archive $(CORE_LIB) --no-whole-archive \
|
|
--start-group $(COMMON_LIB) --end-group \
|
|
-o $(INTDIR)/$(PROJDIR).elf $(LDFLAGS)
|
|
$(TOOLCHAIN)/bin/$(CDIR)/create-fself -in=$(INTDIR)/$(PROJDIR).elf -out=$(INTDIR)/$(PROJDIR).oelf --eboot "eboot.bin" --paid 0x3800000000000011
|
|
|
|
$(INTDIR)/%.o: $(PROJDIR)/%.c
|
|
$(CC) $(CFLAGS) -o $@ $<
|
|
|
|
$(INTDIR)/%.o: $(PROJDIR)/%.cpp
|
|
$(CCX) $(CXXFLAGS) -o $@ $<
|
|
|
|
$(INTDIR)/%.o: $(COMMONDIR)/%.c
|
|
$(CCX) $(CXXFLAGS) -o $@ $<
|
|
|
|
$(INTDIR)/%.o: $(COMMONDIR)/%.cpp
|
|
$(CCX) $(CXXFLAGS) -o $@ $<
|
|
|
|
clean:
|
|
rm -f $(CONTENT_ID).pkg pkg.gp4 pkg/sce_sys/param.sfo eboot.bin \
|
|
$(INTDIR)/$(PROJDIR).elf $(INTDIR)/$(PROJDIR).oelf $(OBJS)
|
|
|
|
clean-common:
|
|
rm -rf build/ps4-libretro-common
|
|
|
|
.PHONY: clean-openorbis-modules
|
|
clean-openorbis-modules:
|
|
rm -f sce_module/libc.prx sce_module/libSceFios2.prx sce_sys/about/right.sprx
|
|
|
|
# v0.37 downloaded external sources into these directories. Nothing writes
|
|
# them any more; the rule stays so an upgraded tree can be cleaned in place.
|
|
.PHONY: clean-native-keyboard
|
|
clean-native-keyboard:
|
|
rm -rf build/native-keyboard third_party/native-keyboard-src
|