@@ -25,6 +25,14 @@ set(CMAKE_CXX_COMPILER_TARGET "${CMAKE_C_COMPILER_TARGET}" CACHE STRING "" FORCE
2525set (CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY" CACHE STRING "" FORCE )
2626set (CMAKE_SYSROOT "${OO_PS4_TOOLCHAIN} " CACHE PATH "" FORCE )
2727
28+ if (CMAKE_HOST_WIN32 )
29+ set (OO_BINARIES_PATH ${OO_PS4_TOOLCHAIN} /bin/windows)
30+ elseif (CMAKE_HOST_LINUX)
31+ set (OO_BINARIES_PATH ${OO_PS4_TOOLCHAIN} /bin/linux )
32+ else ()
33+ message (FATAL_ERROR "Unsupported OS" )
34+ endif ()
35+
2836include_directories (SYSTEM
2937 ${OO_PS4_TOOLCHAIN} /include
3038 ${OO_PS4_TOOLCHAIN} /include/c++/v1
@@ -34,7 +42,7 @@ link_directories(BEFORE
3442 ${OO_PS4_TOOLCHAIN} /lib
3543)
3644
37- add_link_options (-pie - nostartfiles -nodefaultlibs -lc -lc++ -lkernel -fuse-ld=lld${OO_PS4_LINKER_SUFFIX} -Wl,-m,elf_x86_64 -Wl,--eh-frame-hdr "-Wl,--script,${OO_PS4_TOOLCHAIN} /link.x" )
45+ add_link_options (-nostartfiles -nodefaultlibs -lc -lc++ -lkernel -fuse-ld=lld${OO_PS4_LINKER_SUFFIX} -Wl,-m,elf_x86_64 -Wl,--eh-frame-hdr "-Wl,--script,${OO_PS4_TOOLCHAIN} /link.x" )
3846
3947add_compile_options (-nostdinc++ -nostdinc -fPIC -funwind-tables -fshort-wchar )
4048
@@ -46,37 +54,46 @@ else()
4654 add_compile_options (-O3 )
4755endif ()
4856
57+ function (OpenOrbis_AddFSelfCommand TargetProject WorkDir FSelfName TargetSDKVer )
58+ set_target_properties (${TargetProject} PROPERTIES OUTPUT_NAME "${FSelfName} " SUFFIX ".elf" PREFIX "" )
59+
60+ set (OUT_TYPE "eboot" )
61+ set (OUT_EXT "bin" )
62+
63+ if (NOT ${FSelfName} STREQUAL "eboot" )
64+ set (OUT_TYPE "lib" )
65+ set (OUT_EXT "prx" )
66+ endif ()
67+
68+ math (EXPR OO_FWVER "${TargetSDKVer} * 65536" )
69+
70+ # Create object from generated elf file
71+ add_custom_command (TARGET ${TargetProject} POST_BUILD COMMAND
72+ ${CMAKE_COMMAND} -E env "OO_PS4_TOOLCHAIN=${OO_PS4_TOOLCHAIN} "
73+ ${OO_BINARIES_PATH} /create-fself -in "${WorkDir} /${FSelfName} .elf"
74+ --out "${WorkDir} /${FSelfName} .oelf" "--${OUT_TYPE} " "${WorkDir} /${FSelfName} .${OUT_EXT} " --paid 0x3800000000000011 --sdkver "${TargetSDKVer} " --fwversion "${OO_FWVER} "
75+ )
76+
77+ unset (OUT_TYPE)
78+ unset (OUT_EXT)
79+ unset (OO_FWVER)
80+ endfunction ()
81+
4982function (OpenOrbisPackage_PreProject )
5083 if (TARGET ${PKG_TITLE_ID} )
5184 message (FATAL_ERROR "Test name collision detected: ${PKG_TITLE_ID} ." )
5285 endif ()
5386endfunction ()
5487
5588function (OpenOrbisPackage_PostProject path_bin )
56- set_target_properties (${PKG_TITLE_ID} PROPERTIES OUTPUT_NAME "eboot" SUFFIX ".elf" PREFIX "" )
57-
58- if (CMAKE_HOST_WIN32 )
59- set (ORBIS_BIN_PATH ${OO_PS4_TOOLCHAIN} /bin/windows)
60- elseif (CMAKE_HOST_LINUX)
61- set (ORBIS_BIN_PATH ${OO_PS4_TOOLCHAIN} /bin/linux )
62- else ()
63- message (FATAL_ERROR "Unsupported OS" )
64- endif ()
65-
6689 if (OO_PS4_NOPKG)
6790 set (PKG_SHOULDBUILD "nopkg" )
6891 else ()
6992 set (PKG_SHOULDBUILD "pkg" )
7093 endif ()
7194
72- math (EXPR OO_FWVER "${PKG_SYSVER} * 65536" )
73-
7495 # Create eboot.bin from generated elf file
75- add_custom_command (TARGET ${PKG_TITLE_ID} POST_BUILD COMMAND
76- ${CMAKE_COMMAND} -E env "OO_PS4_TOOLCHAIN=${OO_PS4_TOOLCHAIN} "
77- ${ORBIS_BIN_PATH} /create-fself -in ${path_eboot} "${path_bin} /eboot.elf"
78- --out "${path_bin} /eboot.oelf" --eboot "${path_bin} /eboot.bin" --paid 0x3800000000000011 --sdkver "${PKG_SYSVER} " --fwversion "${OO_FWVER} "
79- )
96+ OpenOrbis_AddFSelfCommand (${PKG_TITLE_ID} ${path_bin} "eboot" ${PKG_SYSVER} )
8097 get_filename_component (CURRENT_FOLDER_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME )
8198 set (install_dir "${CMAKE_INSTALL_PREFIX} /${CURRENT_FOLDER_NAME} /${PKG_TITLE_ID} " )
8299
@@ -196,4 +213,6 @@ function(OpenOrbisPackage_PostProject path_bin)
196213 else ()
197214 message (FATAL_ERROR "Unsupported OS" )
198215 endif ()
216+
217+ unset (install_dir)
199218endfunction ()
0 commit comments