Skip to content
Merged
64 changes: 43 additions & 21 deletions src/base/CreatePBP.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

cmake_minimum_required(VERSION 3.10)

option(PBOOT "Generates a PBOOT.PBP instead of EBOOT.PBP" OFF)
option(PSPEMU "Does VITA PSPemu specific processes when needed" OFF)
option(BUILD_PRX "Build a PRX for use with PSPLink" OFF)
option(ENC_PRX "Encrypt the PRX to allow running on official firmware" OFF)

Expand All @@ -23,11 +25,13 @@ macro(create_pbp_file)
VERSION # optional, adds version information to PARAM.SFO
OUTPUT_DIR # optional, set the output directory for the EBOOT.PBP
MEMSIZE # optional, set to 1 by default for allowing access to all available memory. Can be set to 2 for better Vita compatibility, but limited memory access
)
)
set(options
PBOOT # optional, generates a PBOOT.PBP instead of EBOOT.PBP
PSPEMU # optional, does VITA PSPemu specific processes when needed
BUILD_PRX # optional, generates and uses PRX file instead of ELF in EBOOT.PBP
ENC_PRX # optional, replaces PRX file with encrypted version.
)
)
cmake_parse_arguments("ARG" "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})

# set mksfoex parameter if VERSION was not defined
Expand All @@ -40,6 +44,12 @@ macro(create_pbp_file)
set(ARG_SFO_PATH "")
endif()

if (PBOOT)
set(PBP_FILENAME "PBOOT.PBP")
else()
set(PBP_FILENAME "EBOOT.PBP")
endif()

# set output directory to where the target is build if not set
if (NOT DEFINED ARG_OUTPUT_DIR)
set(ARG_OUTPUT_DIR $<TARGET_FILE_DIR:${ARG_TARGET}>)
Expand Down Expand Up @@ -91,27 +101,27 @@ macro(create_pbp_file)
POST_BUILD COMMAND
"${PSPDEV}/bin/psp-strip" "$<TARGET_FILE:${ARG_TARGET}>"
COMMENT "Stripping binary for target ${ARG_TARGET}"
)
)
elseif(${ARG_BUILD_PRX})
add_custom_command(
TARGET ${ARG_TARGET}
POST_BUILD COMMAND
${CMAKE_COMMAND} -E cmake_echo_color --cyan "Not stripping binary for target ${ARG_TARGET} because building PRX."
)
)
else()
add_custom_command(
TARGET ${ARG_TARGET}
POST_BUILD COMMAND
${CMAKE_COMMAND} -E cmake_echo_color --cyan "Not stripping binary for target ${ARG_TARGET}, build type is ${CMAKE_BUILD_TYPE}."
)
)
endif()

add_custom_command(
TARGET ${ARG_TARGET}
POST_BUILD COMMAND
"$ENV{PSPDEV}/bin/psp-fixup-imports" "$<TARGET_FILE:${ARG_TARGET}>"
COMMENT "Calling psp-fixup-imports for target ${ARG_TARGET}"
)
)

if (${ARG_BUILD_PRX})
add_custom_command(
Expand All @@ -120,22 +130,28 @@ macro(create_pbp_file)
"${PSPDEV}/bin/psp-prxgen" "$<TARGET_FILE:${ARG_TARGET}>"
"$<TARGET_FILE:${ARG_TARGET}>.prx"
COMMENT "Calling prxgen for target ${ARG_TARGET}"
)
)

if (ARG_ENC_PRX AND PBOOT AND PSPEMU)
set(ENC_VITA_PBOOT_PARAM "--pspemu-pboot")
else()
set(ENC_VITA_PBOOT_PARAM "")
endif()

if(${ARG_ENC_PRX})
add_custom_command(
TARGET ${ARG_TARGET}
POST_BUILD COMMAND
"${PSPDEV}/bin/PrxEncrypter" "$<TARGET_FILE_DIR:${ARG_TARGET}>/$<TARGET_FILE_NAME:${ARG_TARGET}>.prx"
"$<TARGET_FILE:${ARG_TARGET}>.prx"
COMMENT "Calling PrxEncrypter for target ${ARG_TARGET}"
)
TARGET ${ARG_TARGET}
POST_BUILD COMMAND
"${PSPDEV}/bin/PrxEncrypter" "${ENC_VITA_PBOOT_PARAM}" "$<TARGET_FILE_DIR:${ARG_TARGET}>/$<TARGET_FILE_NAME:${ARG_TARGET}>.prx"
"$<TARGET_FILE:${ARG_TARGET}>.prx"
COMMENT "Calling PrxEncrypter for target ${ARG_TARGET}"
)
else()
add_custom_command(
TARGET ${ARG_TARGET}
POST_BUILD COMMAND
${CMAKE_COMMAND} -E cmake_echo_color --cyan "Not encrypting PRX for target ${ARG_TARGET}, use ENC_PRX flag if you need to."
)
TARGET ${ARG_TARGET}
POST_BUILD COMMAND
${CMAKE_COMMAND} -E cmake_echo_color --cyan "Not encrypting PRX for target ${ARG_TARGET}, use ENC_PRX flag if you need to."
)
endif()

else()
Expand All @@ -150,11 +166,17 @@ macro(create_pbp_file)
set(ARG_MEMSIZE "1")
endif()

if(PBOOT)
set(MKSFO_PBOOT_ARG "-p")
else()
set(MKSFO_PBOOT_ARG "")
endif()

if(NOT ARG_SFO_PATH)
add_custom_command(
TARGET ${ARG_TARGET}
POST_BUILD COMMAND
"${PSPDEV}/bin/mksfoex" "-d" "MEMSIZE=${ARG_MEMSIZE}" "-s" "APP_VER=${ARG_VERSION}" "${ARG_TITLE}" "${ARG_OUTPUT_DIR}/PARAM.SFO"
"${PSPDEV}/bin/mksfoex" "${MKSFO_PBOOT_ARG}" "-d" "MEMSIZE=${ARG_MEMSIZE}" "-s" "APP_VER=${ARG_VERSION}" "${ARG_TITLE}" "${ARG_OUTPUT_DIR}/PARAM.SFO"
COMMENT "Calling mksfoex for target ${ARG_TARGET}"
)
set(SFO_PATH "${ARG_OUTPUT_DIR}/PARAM.SFO")
Expand All @@ -166,15 +188,15 @@ macro(create_pbp_file)
add_custom_command(
TARGET ${ARG_TARGET}
POST_BUILD COMMAND
"${PSPDEV}/bin/pack-pbp" "${ARG_OUTPUT_DIR}/EBOOT.PBP" "${SFO_PATH}" "${ARG_ICON_PATH}" "${ARG_ANIM_PATH}" "${ARG_PREVIEW_PATH}"
"${PSPDEV}/bin/pack-pbp" "${ARG_OUTPUT_DIR}/${PBP_FILENAME}" "${SFO_PATH}" "${ARG_ICON_PATH}" "${ARG_ANIM_PATH}" "${ARG_PREVIEW_PATH}"
"${ARG_BACKGROUND_PATH}" "${ARG_MUSIC_PATH}" "$<TARGET_FILE:${ARG_TARGET}>.prx" "${ARG_PSAR_PATH}"
COMMENT "Calling pack-pbp with PRX file for target ${ARG_TARGET}"
)
else()
add_custom_command(
TARGET ${ARG_TARGET}
POST_BUILD COMMAND
"${PSPDEV}/bin/pack-pbp" "${ARG_OUTPUT_DIR}/EBOOT.PBP" "${SFO_PATH}" "${ARG_ICON_PATH}" "${ARG_ANIM_PATH}" "${ARG_PREVIEW_PATH}"
"${PSPDEV}/bin/pack-pbp" "${ARG_OUTPUT_DIR}/${PBP_FILENAME}" "${SFO_PATH}" "${ARG_ICON_PATH}" "${ARG_ANIM_PATH}" "${ARG_PREVIEW_PATH}"
"${ARG_BACKGROUND_PATH}" "${ARG_MUSIC_PATH}" "$<TARGET_FILE:${ARG_TARGET}>" "${ARG_PSAR_PATH}"
COMMENT "Calling pack-pbp with ELF file for target ${ARG_TARGET}"
)
Expand All @@ -192,7 +214,7 @@ macro(create_pbp_file)
add_custom_command(
TARGET ${ARG_TARGET}
POST_BUILD COMMAND
${CMAKE_COMMAND} -E cmake_echo_color --cyan "EBOOT.PBP file created for target ${ARG_TARGET}."
${CMAKE_COMMAND} -E cmake_echo_color --cyan "${PBP_FILENAME} file created for target ${ARG_TARGET}."
)

endmacro()
20 changes: 20 additions & 0 deletions src/base/build.mak
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,27 @@ ifndef PSP_EBOOT_PSAR
PSP_EBOOT_PSAR = NULL
endif

ifndef PSP_PRODUCE_PBOOT
ifeq ($(ENCRYPT), 2)
PSP_PRODUCE_PBOOT = 1
endif
endif

ifndef PSP_EBOOT
ifeq ($(PSP_PRODUCE_PBOOT), 1)
PSP_EBOOT = PBOOT.PBP
else
PSP_EBOOT = EBOOT.PBP
endif
endif

ifeq ($(PSP_PRODUCE_PBOOT), 1)
SFOFLAGS := -p $(SFOFLAGS)
endif

ifeq ($(ENCRYPT), 2)
SFOFLAGS := -d USE_USB=1 $(SFOFLAGS)
endif

ifeq ($(BUILD_PRX),1)
ifneq ($(TARGET_LIB),)
Expand Down Expand Up @@ -180,6 +198,8 @@ ifeq ($(BUILD_PRX),1)
$(PSP_EBOOT): $(TARGET).prx $(PSP_EBOOT_SFO)
ifeq ($(ENCRYPT), 1)
- $(ENC) $(TARGET).prx $(TARGET).prx
else ifeq ($(ENCRYPT), 2)
- $(ENC) --pspemu-pboot $(TARGET).prx $(TARGET).prx
endif
$(PACK_PBP) $(PSP_EBOOT) $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) \
$(PSP_EBOOT_ICON1) $(PSP_EBOOT_PIC0) $(PSP_EBOOT_PIC1) \
Expand Down
6 changes: 6 additions & 0 deletions src/base/build_prx.mak
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ CXX = psp-g++
AS = psp-gcc
LD = psp-gcc
FIXUP = psp-fixup-imports
ENC = PrxEncrypter

# Add PSPSDK includes and libraries.
INCDIR := $(INCDIR) . $(PSPDEV)/psp/include $(PSPSDK)/include
Expand Down Expand Up @@ -56,6 +57,11 @@ endif

%.prx: %.elf
psp-prxgen $< $@
ifeq ($(ENCRYPT), 1)
- $(ENC) $@ $@
else ifeq ($(ENCRYPT), 2)
- $(ENC) --pspemu-pboot $@ $@
endif

%.c: %.exp
psp-build-exports -b $< > $@
Expand Down
4 changes: 2 additions & 2 deletions src/base/pspdev.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ endif()
SET(CMAKE_SYSTEM_NAME Generic)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_SYSTEM_PROCESSOR mips)
SET(CMAKE_C_COMPILER psp-gcc)
SET(CMAKE_CXX_COMPILER psp-g++)
SET(CMAKE_C_COMPILER "${PSPDEV}/bin/psp-gcc")
SET(CMAKE_CXX_COMPILER "${PSPDEV}/bin/psp-g++")
SET(CMAKE_C_FLAGS_INIT "-I${PSPDEV}/psp/include -I${PSPDEV}/psp/sdk/include -DPSP")
SET(CMAKE_CXX_FLAGS_INIT "-I${PSPDEV}/psp/include -I${PSPDEV}/psp/sdk/include -DPSP")
SET(CMAKE_EXE_LINKER_FLAGS_INIT "-L${PSPDEV}/lib -L${PSPDEV}/psp/lib -L${PSPDEV}/psp/sdk/lib -Wl,-zmax-page-size=128")
Expand Down
Loading
Loading