diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 0c8c0dd..8c2dbdd 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -3,6 +3,8 @@ cmake_minimum_required (VERSION 3.20) project("OnionHEN") set(PROJECT_ROOT "${CMAKE_CURRENT_SOURCE_DIR}") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +include(OnionTarget) get_filename_component(ONIONHEN_ROOT "${PROJECT_ROOT}/.." ABSOLUTE) set(ONIONHEN_THIRD_PARTY_DIR "${ONIONHEN_ROOT}/third_party" CACHE PATH "Third-party dependency source directory") diff --git a/source/bootstrapper/CMakeLists.txt b/source/bootstrapper/CMakeLists.txt index 3eba58c..c204a03 100644 --- a/source/bootstrapper/CMakeLists.txt +++ b/source/bootstrapper/CMakeLists.txt @@ -3,33 +3,10 @@ cmake_minimum_required (VERSION 3.20) set(basename "bootstrapper") project(${basename} C CXX ASM) -# Language Standard Defaults -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) - -set(CMAKE_CXX_EXTENSIONS ON) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_STANDARD 20) - -# Check for sub-project as part of main build or external build -if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(IS_SUBPROJECT TRUE) -else() - set(IS_SUBPROJECT FALSE) -endif() - -message("IS_SUBPROJECT: ${IS_SUBPROJECT}") +onion_module_prologue(C_STANDARD 11 CXX_STANDARD 20) set(D_CWD "${CMAKE_CURRENT_SOURCE_DIR}") -if(DEFINED ONIONHEN_OUT_BIN) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ONIONHEN_OUT_BIN}) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ONIONHEN_OUT_LIB}) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ONIONHEN_OUT_LIB}) -else() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${D_CWD}/../bin) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${D_CWD}/bin) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${D_CWD}/bin) -endif() +onion_output_dirs() set(D_SRC ${D_CWD}/source) # SVG menu icons are the source of truth. Rasterize them into the build tree so @@ -97,20 +74,9 @@ foreach(_raster_icon IN ITEMS list(APPEND _generated_icon_files "${_raster_output}") endforeach() -# Headers -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}/include") - add_executable(${PROJECT_NAME}) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}.elf") -# Must build with clang -if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "[Cc]lang") - set(IS_CLANG 1) -else() - message(FATAL_ERROR "${PROJECT_NAME} is meant to be built with clang! CompilerID: ${CMAKE_CXX_COMPILER_ID}") -endif() - # Finalize main target sources target_compile_options(${PROJECT_NAME} PUBLIC $<$:${C_DEFS} ${C_FLAGS}> @@ -118,17 +84,15 @@ target_compile_options(${PROJECT_NAME} PUBLIC $<$:${ASM_FLAGS}> ) -message("========== build: ${PROJECT_NAME} ==========") - - # Byepervisor removed from OnionHEN — bootstrapper sources only. # pt.c / elfldr.c live in libonion_elfldr (raise_privileges + inject primitives). -file(GLOB SrcFiles ${D_SRC}/*.c ${D_SRC}/*.cpp ${D_SRC}/../include/*.h ${D_SRC}/../include/*.hpp ${D_SRC}/*.s ${ONIONHEN_COMMON_DIR}/backtrace.cpp) +file(GLOB SrcFiles CONFIGURE_DEPENDS ${D_SRC}/*.c ${D_SRC}/*.cpp ${D_SRC}/../include/*.h ${D_SRC}/../include/*.hpp ${D_SRC}/*.s ${ONIONHEN_COMMON_DIR}/backtrace.cpp) list(FILTER SrcFiles EXCLUDE REGEX ".*/(pt|elfldr)\\.c$") -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-keyword-macro -fPIC -fPIE -march=znver2 -Wall -Werror -fstack-protector-all") -set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -DDEBUG -gfull -gdwarf-2 -O0 -pedantic -pedantic-errors") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DDEBUG") +set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -gfull -gdwarf-2 -O0 -pedantic -pedantic-errors") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0") target_sources(${PROJECT_NAME} PRIVATE ${SrcFiles}) @@ -168,7 +132,6 @@ target_include_directories(${PROJECT_NAME} PRIVATE target_link_directories (${PROJECT_NAME} PUBLIC "${ONIONHEN_PS5_STUB_DIR}") target_sources(${PROJECT_NAME} PRIVATE "${ONIONHEN_COMMON_DIR}/elfldr_remote.c") target_link_libraries (${PROJECT_NAME} PUBLIC onion_proc onion_platform onion_settings onion_payload onion_ready onion_elfldr SceNotification SceSystemService) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) add_custom_target(${PROJECT_NAME}_assets DEPENDS ${_generated_icon_files}) add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}_assets) add_dependencies(${PROJECT_NAME} daemon util shellui onion_elfldr_server onion_proc onion_platform onion_settings onion_payload onion_ready onion_elfldr) @@ -180,10 +143,7 @@ add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD ) # Add post-build command -add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} --remove-section .debug_info --remove-section .debug_abbrev --remove-section .debug_line --remove-section .debug_str --remove-section .debug_loc --remove-section .debug_aranges --remove-section .debug_ranges --remove-section .debug_pubnames --remove-section .debug_pubtypes --remove-section .debug_frame --strip-unneeded $ - COMMENT "Stripping debugging information from ${PROJECT_NAME}.elf" -) +onion_strip_debug(${PROJECT_NAME}) # Portable size + lzma pack (Linux GNU stat / macOS BSD stat; lzma or xz) # PROJECT_ROOT is source/; pack script lives at repo scripts/ diff --git a/source/cmake/OnionTarget.cmake b/source/cmake/OnionTarget.cmake new file mode 100644 index 0000000..ed6d301 --- /dev/null +++ b/source/cmake/OnionTarget.cmake @@ -0,0 +1,105 @@ +# OnionHEN shared CMake helpers. +# +# Every module under source/ used to repeat the same prologue: language +# standards, the PS5 SDK header paths, a clang check, the cross-compile target +# triple, the output directories, and an objcopy strip step. That was 17 copies +# of the triple, 11 of the IS_SUBPROJECT dance, 9 clang checks and 6 strip +# blocks — all of which had to be kept in sync by hand. +# +# Modules now call: +# onion_module_prologue() # standards + SDK includes + clang check +# onion_output_dirs() # bin/ and lib/ layout +# onion_strip_debug() # post-build objcopy (ELF targets only) +# +# Compiler flags stay per-module: the modules genuinely differ (libhijacker +# builds -O3 -fno-exceptions, shellui adds -pedantic, libNidResolver is +# -nostdlib). ONION_PS5_TARGET_FLAGS holds only the part that is identical +# everywhere, so a module composes it with its own flags rather than retyping +# the triple. + +include_guard(GLOBAL) + +# Cross-compile target + platform defines. Identical in all 17 modules. +# NOTE: no -march here — a few modules place it at a different position in +# their flag string, so they append it themselves. +set(ONION_PS5_TARGET_FLAGS + "--target=x86_64-sie-ps5 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW}") + +# Same, with -march=znver2 folded in, which is what most modules want. +set(ONION_PS5_TARGET_FLAGS_MARCH + "--target=x86_64-sie-ps5 -march=znver2 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW}") + +# Language standards, PS5 SDK headers, and a compiler sanity check. +# A macro (not a function) so the CMAKE_* settings land in the caller's scope. +# +# Usage: onion_module_prologue([C_STANDARD ] [CXX_STANDARD ]) +# +# The standards are opt-in because modules genuinely differ: the loader-side +# C modules (NidResolver, NineS, onion_elfldr, elfldr_server) are C17 while +# the rest are C11. Setting a default here would silently downgrade them. +macro(onion_module_prologue) + cmake_parse_arguments(_onion "" "C_STANDARD;CXX_STANDARD" "" ${ARGN}) + if(DEFINED _onion_C_STANDARD) + set(CMAKE_C_STANDARD ${_onion_C_STANDARD}) + set(CMAKE_C_STANDARD_REQUIRED ON) + endif() + if(DEFINED _onion_CXX_STANDARD) + set(CMAKE_CXX_STANDARD ${_onion_CXX_STANDARD}) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_CXX_EXTENSIONS ON) + endif() + + include_directories(SYSTEM "${PS5_PAYLOAD_SDK}") + include_directories(SYSTEM "${PS5_PAYLOAD_SDK}/include") + + # Check whichever language the module actually enabled — asking about + # CMAKE_CXX_COMPILER_ID in a `project(... C)` module reads as empty and + # would fail the check spuriously. + get_property(_onion_langs GLOBAL PROPERTY ENABLED_LANGUAGES) + if("CXX" IN_LIST _onion_langs) + set(_onion_compiler_id "${CMAKE_CXX_COMPILER_ID}") + else() + set(_onion_compiler_id "${CMAKE_C_COMPILER_ID}") + endif() + if(NOT "${_onion_compiler_id}" MATCHES "[Cc]lang") + message(FATAL_ERROR + "${PROJECT_NAME} must be built with clang! CompilerID: ${_onion_compiler_id}") + endif() + unset(_onion_langs) + unset(_onion_compiler_id) + + message("========== build: ${PROJECT_NAME} ==========") + set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +endmacro() + +# Artifact layout: ELFs to bin/, static libs to lib/. Falls back to a +# module-local directory for standalone (non-superbuild) configures. +macro(onion_output_dirs) + if(DEFINED ONIONHEN_OUT_BIN) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${ONIONHEN_OUT_BIN}") + else() + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/../bin") + endif() + if(DEFINED ONIONHEN_OUT_LIB) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${ONIONHEN_OUT_LIB}") + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${ONIONHEN_OUT_LIB}") + else() + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin") + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin") + endif() +endmacro() + +# Drop DWARF sections from a linked ELF. Keeps the on-device payload small; +# the unstripped object files stay in the build tree for symbolication. +function(onion_strip_debug target) + add_custom_command(TARGET ${target} POST_BUILD + COMMAND ${CMAKE_OBJCOPY} + --remove-section .debug_info --remove-section .debug_abbrev + --remove-section .debug_line --remove-section .debug_str + --remove-section .debug_loc --remove-section .debug_aranges + --remove-section .debug_ranges --remove-section .debug_pubnames + --remove-section .debug_pubtypes --remove-section .debug_frame + --strip-unneeded $ + COMMENT "Stripping debugging information from ${target}" + ) +endfunction() diff --git a/source/daemon/CMakeLists.txt b/source/daemon/CMakeLists.txt index 37e7c4d..7a532c8 100644 --- a/source/daemon/CMakeLists.txt +++ b/source/daemon/CMakeLists.txt @@ -3,49 +3,15 @@ cmake_minimum_required (VERSION 3.20) set(basename "daemon") project(${basename} C CXX ASM) -# Language Standard Defaults -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) - -set(CMAKE_CXX_EXTENSIONS ON) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_STANDARD 20) - -# Check for sub-project as part of main build or external build -if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(IS_SUBPROJECT TRUE) -else() - set(IS_SUBPROJECT FALSE) -endif() - -message("IS_SUBPROJECT: ${IS_SUBPROJECT}") +onion_module_prologue(C_STANDARD 11 CXX_STANDARD 20) set(D_CWD "${CMAKE_CURRENT_SOURCE_DIR}") -if(DEFINED ONIONHEN_OUT_BIN) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ONIONHEN_OUT_BIN}) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ONIONHEN_OUT_LIB}) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ONIONHEN_OUT_LIB}) -else() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${D_CWD}/../bin) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${D_CWD}/bin) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${D_CWD}/bin) -endif() +onion_output_dirs() set(D_SRC ${D_CWD}/source) -# Headers -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}/include") - add_executable(${PROJECT_NAME}) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}.elf") -# Must build with clang -if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "[Cc]lang") - set(IS_CLANG 1) -else() - message(FATAL_ERROR "${PROJECT_NAME} is meant to be built with clang! CompilerID: ${CMAKE_CXX_COMPILER_ID}") -endif() - # Finalize main target sources target_compile_options(${PROJECT_NAME} PUBLIC $<$:${C_DEFS} ${C_FLAGS}> @@ -53,14 +19,12 @@ target_compile_options(${PROJECT_NAME} PUBLIC $<$:${ASM_FLAGS}> ) -message("========== build: ${PROJECT_NAME} ==========") +file(GLOB SrcFiles CONFIGURE_DEPENDS ${D_SRC}/*.c ${D_SRC}/*.cpp ${D_SRC}/../include/*.h ${D_SRC}/../include/*.hpp ${D_SRC}/*.s ${ONIONHEN_THIRD_PARTY_DIR}/cjson/*.cpp ${ONIONHEN_THIRD_PARTY_DIR}/cjson/*.hpp ${ONIONHEN_COMMON_DIR}/backtrace.cpp) - -file(GLOB SrcFiles ${D_SRC}/*.c ${D_SRC}/*.cpp ${D_SRC}/../include/*.h ${D_SRC}/../include/*.hpp ${D_SRC}/*.s ${ONIONHEN_THIRD_PARTY_DIR}/cjson/*.cpp ${ONIONHEN_THIRD_PARTY_DIR}/cjson/*.hpp ${ONIONHEN_COMMON_DIR}/backtrace.cpp) - -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-keyword-macro -fPIC -fPIE -march=znver2 -Wall -Werror -fstack-protector-all") -set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -DDEBUG -gfull -gdwarf-2 -O0 -pedantic -pedantic-errors") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DDEBUG") +set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -gfull -gdwarf-2 -O0 -pedantic -pedantic-errors") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 ") target_sources(${PROJECT_NAME} PRIVATE ${SrcFiles} "${ONIONHEN_COMMON_DIR}/elfldr_remote.c") @@ -96,9 +60,5 @@ target_link_directories (${PROJECT_NAME} PUBLIC "${ONIONHEN_PS5_STUB_DIR}") add_dependencies(${PROJECT_NAME} onion_version util onion_elfldr_server NineS shellui hijacker onion_settings onion_ipc onion_proc onion_platform onion_ready onion_elfldr) # Supervises private :9020 via external :9021, then restarts embedded util via :9020. target_link_libraries (${PROJECT_NAME} PUBLIC onion_ipc onion_settings onion_proc onion_platform onion_ready onion_elfldr hijacker SceSystemService SceNotification SceUserService SceNetCtl SceSysCore kernel_sys NineS) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Add post-build command -add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} --remove-section .debug_info --remove-section .debug_abbrev --remove-section .debug_line --remove-section .debug_str --remove-section .debug_loc --remove-section .debug_aranges --remove-section .debug_ranges --remove-section .debug_pubnames --remove-section .debug_pubtypes --remove-section .debug_frame --strip-unneeded $ - COMMENT "Stripping debugging information from ${PROJECT_NAME}.elf" -) +onion_strip_debug(${PROJECT_NAME}) diff --git a/source/libNidResolver/CMakeLists.txt b/source/libNidResolver/CMakeLists.txt index fc8d37c..c20ebe1 100644 --- a/source/libNidResolver/CMakeLists.txt +++ b/source/libNidResolver/CMakeLists.txt @@ -9,29 +9,13 @@ cmake_minimum_required (VERSION 3.20) set(basename "NidResolver") project(${basename} C) -# Language Standard Defaults -set(CMAKE_C_STANDARD 17) -set(CMAKE_C_STANDARD_REQUIRED ON) - -# Check for sub-project as part of main build or external build -if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(IS_SUBPROJECT TRUE) -else() - set(IS_SUBPROJECT FALSE) -endif() - -message("IS_SUBPROJECT: ${IS_SUBPROJECT}") - set(D_CWD "${PROJECT_SOURCE_DIR}") - -# Headers -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}/include") +onion_module_prologue(C_STANDARD 17) set(D_SRC ${D_CWD}/source) -file(GLOB SrcFiles ${D_SRC}/*.c ${D_SRC}/*.h) +file(GLOB SrcFiles CONFIGURE_DEPENDS ${D_SRC}/*.c ${D_SRC}/*.h) add_library(${PROJECT_NAME} STATIC ${SrcFiles}) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}") @@ -41,12 +25,9 @@ target_compile_options(${PROJECT_NAME} PUBLIC $<$:${C_DEFS} ${C_FLAGS}> ) -message("========== build: ${PROJECT_NAME} ==========") - -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -march=znver2 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS_MARCH} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_POSIX_SOURCE -D_POSIX_C_SOURCE=200112 -D__BSD_VISIBLE=1 -D__XSI_VISIBLE=500") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-builtin -nostdlib -Wall") # -nostartfiles set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gfull -O3 -march=znver2 -Wall -Werror") target_include_directories(${PROJECT_NAME} PRIVATE "${D_CWD}/../include") -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/source/libNineS/CMakeLists.txt b/source/libNineS/CMakeLists.txt index 9a35b84..01c807e 100644 --- a/source/libNineS/CMakeLists.txt +++ b/source/libNineS/CMakeLists.txt @@ -9,25 +9,9 @@ cmake_minimum_required (VERSION 3.20) set(basename "NineS") project(${basename} C) -# Language Standard Defaults -set(CMAKE_C_STANDARD 17) -set(CMAKE_C_STANDARD_REQUIRED ON) - -# Check for sub-project as part of main build or external build -if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(IS_SUBPROJECT TRUE) -else() - set(IS_SUBPROJECT FALSE) -endif() - -message("IS_SUBPROJECT: ${IS_SUBPROJECT}") - set(D_CWD "${PROJECT_SOURCE_DIR}") - -# Headers -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}/include") +onion_module_prologue(C_STANDARD 17) set(D_SRC ${D_CWD}/src) @@ -46,9 +30,7 @@ target_compile_options(${PROJECT_NAME} PUBLIC $<$:${C_DEFS} ${C_FLAGS}> ) -message("========== build: ${PROJECT_NAME} ==========") - -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -march=znver2 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS_MARCH} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_POSIX_SOURCE -D_POSIX_C_SOURCE=200112 -D__BSD_VISIBLE=1 -D__XSI_VISIBLE=500") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-builtin -nostdlib -Wall") # -nostartfiles set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") @@ -75,4 +57,3 @@ if(TARGET onion_elfldr) add_dependencies(${PROJECT_NAME} onion_elfldr) target_link_libraries(${PROJECT_NAME} PUBLIC onion_elfldr) endif() -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/source/libhijacker/CMakeLists.txt b/source/libhijacker/CMakeLists.txt index 5e135d9..992853d 100644 --- a/source/libhijacker/CMakeLists.txt +++ b/source/libhijacker/CMakeLists.txt @@ -9,47 +9,19 @@ cmake_minimum_required (VERSION 3.20) set(basename "hijacker") project(${basename} C CXX ASM) -# Language Standard Defaults -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) - -set(CMAKE_CXX_EXTENSIONS ON) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - +onion_module_prologue(C_STANDARD 11 CXX_STANDARD 20) if ("${CMAKE_CXX_STANDARD}" STREQUAL "") - set(CMAKE_CXX_STANDARD 20) endif() -# Check for sub-project as part of main build or external build -if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(IS_SUBPROJECT TRUE) -else() - set(IS_SUBPROJECT FALSE) -endif() - -message("IS_SUBPROJECT: ${IS_SUBPROJECT}") - set(D_CWD "${PROJECT_SOURCE_DIR}") - -# Headers -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}/include") - set(D_SRC ${D_CWD}/source) -file(GLOB SrcFiles ${D_SRC}/*.c ${D_SRC}/*.cpp ${D_SRC}/**/*.cpp ${D_SRC}/*.h ${D_SRC}/*.hpp ${D_SRC}/**/*.hpp ${D_SRC}/*.s) +file(GLOB SrcFiles CONFIGURE_DEPENDS ${D_SRC}/*.c ${D_SRC}/*.cpp ${D_SRC}/**/*.cpp ${D_SRC}/*.h ${D_SRC}/*.hpp ${D_SRC}/**/*.hpp ${D_SRC}/*.s) add_library(${PROJECT_NAME} STATIC ${SrcFiles}) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}") -# Must build with clang -if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "[Cc]lang") - set(IS_CLANG 1) -else() - message(FATAL_ERROR "${PROJECT_NAME} is meant to be built with clang! CompilerID: ${CMAKE_CXX_COMPILER_ID}") -endif() - # Finalize main target sources target_compile_options(${PROJECT_NAME} PUBLIC $<$:${C_DEFS} ${C_FLAGS}> @@ -57,13 +29,8 @@ target_compile_options(${PROJECT_NAME} PUBLIC $<$:${ASM_FLAGS}> ) -message("========== build: ${PROJECT_NAME} ==========") - - - -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -march=znver2 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS_MARCH} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -fstack-protector-all") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -O3 -march=znver2 -Wall -Wextra -Wmove -Wmost -Werror -fno-exceptions") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g0 -O0") target_include_directories(${PROJECT_NAME} PRIVATE "${D_CWD}/../include") -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/source/libonion_detour/CMakeLists.txt b/source/libonion_detour/CMakeLists.txt index 8cf3216..7fe1a81 100644 --- a/source/libonion_detour/CMakeLists.txt +++ b/source/libonion_detour/CMakeLists.txt @@ -7,25 +7,10 @@ cmake_minimum_required(VERSION 3.20) set(basename "onion_detour") project(${basename} C CXX) -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS ON) -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(IS_SUBPROJECT TRUE) -else() - set(IS_SUBPROJECT FALSE) -endif() - -message("IS_SUBPROJECT: ${IS_SUBPROJECT}") +onion_module_prologue(C_STANDARD 11 CXX_STANDARD 20) set(D_CWD "${PROJECT_SOURCE_DIR}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}/include") - add_library(${PROJECT_NAME} STATIC source/detour.cpp source/hde64.cpp @@ -35,13 +20,7 @@ add_library(${PROJECT_NAME} STATIC ) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}") -if(NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "[Cc]lang") - message(FATAL_ERROR "${PROJECT_NAME} is meant to be built with clang! CompilerID: ${CMAKE_CXX_COMPILER_ID}") -endif() - -message("========== build: ${PROJECT_NAME} ==========") - -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -march=znver2 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS_MARCH} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -fstack-protector-all") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -O2 -Wall -Wextra -Werror -fno-exceptions") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g0 -O2") @@ -55,4 +34,3 @@ target_include_directories(${PROJECT_NAME} # Logging symbols (shellui_log) come from onion_ipc at final link. add_dependencies(${PROJECT_NAME} onion_ipc) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/source/libonion_elfldr/CMakeLists.txt b/source/libonion_elfldr/CMakeLists.txt index e8fdb24..d99f7e8 100644 --- a/source/libonion_elfldr/CMakeLists.txt +++ b/source/libonion_elfldr/CMakeLists.txt @@ -7,12 +7,9 @@ cmake_minimum_required(VERSION 3.20) set(basename "onion_elfldr") project(${basename} C) -set(CMAKE_C_STANDARD 17) -set(CMAKE_C_STANDARD_REQUIRED ON) set(D_CWD "${PROJECT_SOURCE_DIR}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}/include") +onion_module_prologue(C_STANDARD 17) add_library(${PROJECT_NAME} STATIC source/pt.c @@ -20,9 +17,7 @@ add_library(${PROJECT_NAME} STATIC ) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}") -message("========== build: ${PROJECT_NAME} ==========") - -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -march=znver2 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS_MARCH} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_POSIX_SOURCE -D_POSIX_C_SOURCE=200112 -D__BSD_VISIBLE=1 -D__XSI_VISIBLE=500") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-builtin -nostdlib -Wall -fPIC -gfull -O3") @@ -34,4 +29,3 @@ target_include_directories(${PROJECT_NAME} # Authid policy: no per-syscall flip in pt.c; injectors elevate once at entry. target_compile_definitions(${PROJECT_NAME} PRIVATE ONION_ELFLDR_NO_PER_CALL_AUTHID=1) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/source/libonion_ipc/CMakeLists.txt b/source/libonion_ipc/CMakeLists.txt index 061725f..7b4c4e7 100644 --- a/source/libonion_ipc/CMakeLists.txt +++ b/source/libonion_ipc/CMakeLists.txt @@ -7,38 +7,17 @@ cmake_minimum_required(VERSION 3.20) set(basename "onion_ipc") project(${basename} C CXX) -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS ON) -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(IS_SUBPROJECT TRUE) -else() - set(IS_SUBPROJECT FALSE) -endif() - -message("IS_SUBPROJECT: ${IS_SUBPROJECT}") +onion_module_prologue(C_STANDARD 11 CXX_STANDARD 20) set(D_CWD "${PROJECT_SOURCE_DIR}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}/include") - add_library(${PROJECT_NAME} STATIC source/ipc_client.cpp source/ipc_server.cpp ) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}") -if(NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "[Cc]lang") - message(FATAL_ERROR "${PROJECT_NAME} is meant to be built with clang! CompilerID: ${CMAKE_CXX_COMPILER_ID}") -endif() - -message("========== build: ${PROJECT_NAME} ==========") - -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -march=znver2 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS_MARCH} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -fstack-protector-all") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -O2 -Wall -Wextra -Werror -fno-exceptions") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g0 -O2") @@ -52,4 +31,3 @@ target_include_directories(${PROJECT_NAME} # cJSON symbols are provided by the final link unit (shellui already # compile third_party/cjson into the ELF). Keep them unresolved here. -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/source/libonion_payload/CMakeLists.txt b/source/libonion_payload/CMakeLists.txt index e93ff94..f9cd527 100644 --- a/source/libonion_payload/CMakeLists.txt +++ b/source/libonion_payload/CMakeLists.txt @@ -7,19 +7,13 @@ cmake_minimum_required(VERSION 3.20) set(basename "onion_payload") project(${basename} C) -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) +onion_module_prologue(C_STANDARD 11) set(D_CWD "${PROJECT_SOURCE_DIR}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}/include") - add_library(${PROJECT_NAME} STATIC source/payload.c) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}") -message("========== build: ${PROJECT_NAME} ==========") - -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -march=znver2 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} -fPIC -fstack-protector-all -O2 -Wall -Wextra -Werror") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS_MARCH} -fPIC -fstack-protector-all -O2 -Wall -Wextra -Werror") target_include_directories(${PROJECT_NAME} PUBLIC "${D_CWD}/include" @@ -32,4 +26,3 @@ target_include_directories(${PROJECT_NAME} target_link_libraries(${PROJECT_NAME} PUBLIC onion_proc onion_platform) add_dependencies(${PROJECT_NAME} onion_proc onion_platform) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/source/libonion_platform/CMakeLists.txt b/source/libonion_platform/CMakeLists.txt index 80c9ccc..702e6e4 100644 --- a/source/libonion_platform/CMakeLists.txt +++ b/source/libonion_platform/CMakeLists.txt @@ -7,13 +7,9 @@ cmake_minimum_required(VERSION 3.20) set(basename "onion_platform") project(${basename} C) -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) +onion_module_prologue(C_STANDARD 11) set(D_CWD "${PROJECT_SOURCE_DIR}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}/include") - add_library(${PROJECT_NAME} STATIC source/fs.c source/log.c @@ -23,8 +19,6 @@ add_library(${PROJECT_NAME} STATIC ) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}") -message("========== build: ${PROJECT_NAME} ==========") - find_package(Python3 REQUIRED COMPONENTS Interpreter) set(I18N_DIR "${D_CWD}/../i18n") @@ -47,11 +41,10 @@ add_custom_command( add_custom_target(onion_platform_i18n_catalog DEPENDS "${NOTIFY_I18N_CATALOG}") add_dependencies(${PROJECT_NAME} onion_platform_i18n_catalog) -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -march=znver2 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} -fPIC -fstack-protector-all -O2 -Wall -Wextra -Werror") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS_MARCH} -fPIC -fstack-protector-all -O2 -Wall -Wextra -Werror") target_include_directories(${PROJECT_NAME} PUBLIC "${D_CWD}/include" PRIVATE "${D_CWD}/../include" "${I18N_GENERATED_DIR}" ) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/source/libonion_proc/CMakeLists.txt b/source/libonion_proc/CMakeLists.txt index 2420950..bcf0d74 100644 --- a/source/libonion_proc/CMakeLists.txt +++ b/source/libonion_proc/CMakeLists.txt @@ -1,20 +1,15 @@ cmake_minimum_required(VERSION 3.20) set(basename "onion_proc") project(${basename} C CXX) -set(CMAKE_C_STANDARD 11) -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) set(D_CWD "${PROJECT_SOURCE_DIR}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}/include") +onion_module_prologue(C_STANDARD 11 CXX_STANDARD 20) add_library(${PROJECT_NAME} STATIC source/proc.cpp source/ucred.cpp source/proc_query.cpp ) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}") -message("========== build: ${PROJECT_NAME} ==========") -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -march=znver2 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} -fPIC -fstack-protector-all") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS_MARCH} -fPIC -fstack-protector-all") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -O2 -Wall -Wextra -Werror -fno-exceptions") target_include_directories(${PROJECT_NAME} PUBLIC "${D_CWD}/include" diff --git a/source/libonion_ready/CMakeLists.txt b/source/libonion_ready/CMakeLists.txt index e81e4ac..f033ebd 100644 --- a/source/libonion_ready/CMakeLists.txt +++ b/source/libonion_ready/CMakeLists.txt @@ -2,22 +2,15 @@ cmake_minimum_required(VERSION 3.20) set(basename "onion_ready") project(${basename} C) -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) +onion_module_prologue(C_STANDARD 11) set(D_CWD "${PROJECT_SOURCE_DIR}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}/include") - add_library(${PROJECT_NAME} STATIC source/ready.c) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}") -message("========== build: ${PROJECT_NAME} ==========") - -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -march=znver2 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} -fPIC -fstack-protector-all -O2 -Wall -Wextra -Werror") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS_MARCH} -fPIC -fstack-protector-all -O2 -Wall -Wextra -Werror") target_include_directories(${PROJECT_NAME} PUBLIC "${PROJECT_ROOT}/include" ) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/source/libonion_settings/CMakeLists.txt b/source/libonion_settings/CMakeLists.txt index a014bc4..33434bb 100644 --- a/source/libonion_settings/CMakeLists.txt +++ b/source/libonion_settings/CMakeLists.txt @@ -7,37 +7,16 @@ cmake_minimum_required(VERSION 3.20) set(basename "onion_settings") project(${basename} C CXX) -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS ON) -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(IS_SUBPROJECT TRUE) -else() - set(IS_SUBPROJECT FALSE) -endif() - -message("IS_SUBPROJECT: ${IS_SUBPROJECT}") +onion_module_prologue(C_STANDARD 11 CXX_STANDARD 20) set(D_CWD "${PROJECT_SOURCE_DIR}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}/include") - add_library(${PROJECT_NAME} STATIC source/settings.cpp ) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}") -if(NOT "${CMAKE_CXX_COMPILER_ID}" MATCHES "[Cc]lang") - message(FATAL_ERROR "${PROJECT_NAME} is meant to be built with clang! CompilerID: ${CMAKE_CXX_COMPILER_ID}") -endif() - -message("========== build: ${PROJECT_NAME} ==========") - -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -march=znver2 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS_MARCH} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -fstack-protector-all") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -O2 -Wall -Wextra -Werror -fno-exceptions") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g0 -O2") @@ -47,4 +26,3 @@ target_include_directories(${PROJECT_NAME} PRIVATE "${D_CWD}/../include" ) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) diff --git a/source/onion_elfldr_server/CMakeLists.txt b/source/onion_elfldr_server/CMakeLists.txt index 3dcb295..b6470d9 100644 --- a/source/onion_elfldr_server/CMakeLists.txt +++ b/source/onion_elfldr_server/CMakeLists.txt @@ -3,29 +3,15 @@ cmake_minimum_required(VERSION 3.20) set(basename "onion_elfldr_server") project(${basename} C) -set(CMAKE_C_STANDARD 17) -set(CMAKE_C_STANDARD_REQUIRED ON) - set(D_CWD "${CMAKE_CURRENT_SOURCE_DIR}") -if(DEFINED ONIONHEN_OUT_BIN) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ONIONHEN_OUT_BIN}) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ONIONHEN_OUT_LIB}) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ONIONHEN_OUT_LIB}) -else() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${D_CWD}/../bin) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${D_CWD}/bin) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${D_CWD}/bin) -endif() +onion_output_dirs() -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories(SYSTEM "${PS5_PAYLOAD_SDK}/include") +onion_module_prologue(C_STANDARD 17) add_executable(${PROJECT_NAME} source/main.c) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "onion_elfldr.elf") -message("========== build: ${PROJECT_NAME} ==========") - -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_POSIX_SOURCE -D_POSIX_C_SOURCE=200112 -D__BSD_VISIBLE=1 -D__XSI_VISIBLE=500") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-keyword-macro -fPIC -fPIE -march=znver2 -Wall -Werror -fstack-protector-all -O2") @@ -37,8 +23,4 @@ target_link_directories(${PROJECT_NAME} PUBLIC "${ONIONHEN_PS5_STUB_DIR}") add_dependencies(${PROJECT_NAME} onion_elfldr) target_link_libraries(${PROJECT_NAME} PUBLIC onion_elfldr) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} --remove-section .debug_info --remove-section .debug_abbrev --remove-section .debug_line --remove-section .debug_str --remove-section .debug_loc --remove-section .debug_aranges --remove-section .debug_ranges --remove-section .debug_pubnames --remove-section .debug_pubtypes --remove-section .debug_frame --strip-unneeded $ - COMMENT "Stripping debugging information from onion_elfldr.elf" -) +onion_strip_debug(${PROJECT_NAME}) diff --git a/source/shellui/CMakeLists.txt b/source/shellui/CMakeLists.txt index 50b73a1..bc51c54 100644 --- a/source/shellui/CMakeLists.txt +++ b/source/shellui/CMakeLists.txt @@ -3,52 +3,15 @@ cmake_minimum_required (VERSION 3.20) set(basename "shellui") project(${basename} C CXX ASM) -# Language Standard Defaults -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) - -set(CMAKE_CXX_EXTENSIONS ON) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_STANDARD 20) - -# Check for sub-project as part of main build or external build -if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(IS_SUBPROJECT TRUE) -else() - set(IS_SUBPROJECT FALSE) -endif() - -message("IS_SUBPROJECT: ${IS_SUBPROJECT}") +onion_module_prologue(C_STANDARD 11 CXX_STANDARD 20) set(D_CWD "${CMAKE_CURRENT_SOURCE_DIR}") -if(DEFINED ONIONHEN_OUT_BIN) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ONIONHEN_OUT_BIN}) -else() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${D_CWD}/../bin) -endif() -if(DEFINED ONIONHEN_OUT_LIB) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ONIONHEN_OUT_LIB}) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ONIONHEN_OUT_LIB}) -else() - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${D_CWD}/bin) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${D_CWD}/bin) -endif() +onion_output_dirs() set(D_SRC ${D_CWD}/src) -# Headers -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}/include") - add_executable(${PROJECT_NAME}) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}.elf") -# Must build with clang -if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "[Cc]lang") - set(IS_CLANG 1) -else() - message(FATAL_ERROR "${PROJECT_NAME} is meant to be built with clang! CompilerID: ${CMAKE_CXX_COMPILER_ID}") -endif() - # Finalize main target sources target_compile_options(${PROJECT_NAME} PUBLIC $<$:${C_DEFS} ${C_FLAGS}> @@ -65,8 +28,6 @@ if(NOT ONIONHEN_SHELLUI_HOMEUI_TOP_NAV_PATCH) message(STATUS "shellui: HomeUI top-nav patch DISABLED") endif() -message("========== build: ${PROJECT_NAME} ==========") - find_package(Python3 REQUIRED COMPONENTS Interpreter) set(I18N_DIR "${D_CWD}/../i18n") @@ -88,11 +49,12 @@ add_custom_command( ) add_custom_target(shellui_i18n_catalog DEPENDS "${I18N_CATALOG}") -file(GLOB SrcFiles ${D_SRC}/*.c ${D_SRC}/*.cpp ${D_SRC}/../include/*.h ${D_SRC}/../include/*.hpp ${D_SRC}/*.s ${ONIONHEN_THIRD_PARTY_DIR}/cjson/*.cpp ${ONIONHEN_THIRD_PARTY_DIR}/cjson/*.hpp ${ONIONHEN_COMMON_DIR}/backtrace.cpp) +file(GLOB SrcFiles CONFIGURE_DEPENDS ${D_SRC}/*.c ${D_SRC}/*.cpp ${D_SRC}/../include/*.h ${D_SRC}/../include/*.hpp ${D_SRC}/*.s ${ONIONHEN_THIRD_PARTY_DIR}/cjson/*.cpp ${ONIONHEN_THIRD_PARTY_DIR}/cjson/*.hpp ${ONIONHEN_COMMON_DIR}/backtrace.cpp) -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-nested-anon-types -Wno-gnu-anonymous-struct -Wno-zero-length-array -Wno-keyword-macro -fPIC -fPIE -march=znver2 -Wall -Werror -fstack-protector-all") -set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -DDEBUG -gfull -gdwarf-2 -O0 -pedantic -pedantic-errors") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DDEBUG") +set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -gfull -gdwarf-2 -O0 -pedantic -pedantic-errors") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 ") target_sources(${PROJECT_NAME} PRIVATE ${SrcFiles}) @@ -110,10 +72,6 @@ target_include_directories(${PROJECT_NAME} PRIVATE ) target_link_directories (${PROJECT_NAME} PUBLIC "${ONIONHEN_PS5_STUB_DIR}") target_link_libraries (${PROJECT_NAME} PUBLIC onion_detour onion_proc onion_platform onion_ipc onion_settings onion_ready SceRegMgr SceSystemService SceUserService SceNetCtl SceAppInstUtil) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Add post-build command -add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} --remove-section .debug_info --remove-section .debug_abbrev --remove-section .debug_line --remove-section .debug_str --remove-section .debug_loc --remove-section .debug_aranges --remove-section .debug_ranges --remove-section .debug_pubnames --remove-section .debug_pubtypes --remove-section .debug_frame --strip-unneeded $ - COMMENT "Stripping debugging information from ${PROJECT_NAME}.elf" -) +onion_strip_debug(${PROJECT_NAME}) diff --git a/source/unpacker/CMakeLists.txt b/source/unpacker/CMakeLists.txt index 98d37b9..a4cf555 100644 --- a/source/unpacker/CMakeLists.txt +++ b/source/unpacker/CMakeLists.txt @@ -3,51 +3,16 @@ cmake_minimum_required (VERSION 3.20) set(basename "unpacker") project(${basename} C ASM) -# Language Standard Defaults -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) - -set(CMAKE_CXX_EXTENSIONS ON) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_STANDARD 20) - -# Check for sub-project as part of main build or external build -if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(IS_SUBPROJECT TRUE) -else() - set(IS_SUBPROJECT FALSE) -endif() - -message("IS_SUBPROJECT: ${IS_SUBPROJECT}") +onion_module_prologue(C_STANDARD 11 CXX_STANDARD 20) set(D_CWD "${CMAKE_CURRENT_SOURCE_DIR}") -if(DEFINED ONIONHEN_OUT_BIN) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ONIONHEN_OUT_BIN}) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ONIONHEN_OUT_LIB}) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ONIONHEN_OUT_LIB}) -else() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${D_CWD}/../bin) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${D_CWD}/bin) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${D_CWD}/bin) -endif() +onion_output_dirs() set(D_SRC ${D_CWD}/source) -# Headers -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}/include") - - set(PROJECT_NAME OnionHEN) add_executable(${PROJECT_NAME}) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}.elf") -# Must build with clang -if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "[Cc]lang") - set(IS_CLANG 1) -else() - message(FATAL_ERROR "${PROJECT_NAME} is meant to be built with clang! CompilerID: ${CMAKE_CXX_COMPILER_ID}") -endif() - # Finalize main target sources target_compile_options(${PROJECT_NAME} PUBLIC $<$:${C_DEFS} ${C_FLAGS}> @@ -55,10 +20,6 @@ target_compile_options(${PROJECT_NAME} PUBLIC $<$:${ASM_FLAGS}> ) -message("========== build: ${PROJECT_NAME} ==========") - - - set(LZMA_ROOT "${ONIONHEN_THIRD_PARTY_DIR}/7zip_sdk/C") set(LZMA_LIB ${LZMA_ROOT}/LzmaLib.c ${LZMA_ROOT}/Alloc.c ${LZMA_ROOT}/LzmaEnc.c @@ -72,9 +33,10 @@ set(LZMA_LIB ${LZMA_ROOT}/LzmaLib.c ${LZMA_ROOT}/Alloc.c # main.c only — initial bootstrap is sent to external elfldr 9021. set(SrcFiles ${D_SRC}/main.c ${LZMA_LIB}) -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-keyword-macro -fPIC -fPIE -march=znver2 -Wall -Werror -fstack-protector-all") -set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -DDEBUG -O0") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DDEBUG") +set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -O0") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0") target_sources(${PROJECT_NAME} PRIVATE ${SrcFiles}) @@ -91,11 +53,7 @@ target_compile_definitions(${PROJECT_NAME} PRIVATE ONIONHEN_BOOTSTRAPPER_LZMA="${ONIONHEN_OUT_BIN}/bootstrapper.elf.lzma" ONIONHEN_BOOTSTRAPPER_SIZE="${ONIONHEN_OUT_BIN}/bootstrapper.elf.lzma.size" ) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) add_dependencies(${PROJECT_NAME} bootstrapper) # Add post-build command -add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} --remove-section .debug_info --remove-section .debug_abbrev --remove-section .debug_line --remove-section .debug_str --remove-section .debug_loc --remove-section .debug_aranges --remove-section .debug_ranges --remove-section .debug_pubnames --remove-section .debug_pubtypes --remove-section .debug_frame --strip-unneeded $ - COMMENT "Stripping debugging information from ${PROJECT_NAME}.elf" -) +onion_strip_debug(${PROJECT_NAME}) diff --git a/source/util/CMakeLists.txt b/source/util/CMakeLists.txt index b10b230..24c4400 100644 --- a/source/util/CMakeLists.txt +++ b/source/util/CMakeLists.txt @@ -4,54 +4,22 @@ set(basename "util") project(${basename} C CXX ASM) -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) - -set(CMAKE_CXX_EXTENSIONS ON) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_STANDARD 20) - -if (NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - set(IS_SUBPROJECT TRUE) -else() - set(IS_SUBPROJECT FALSE) -endif() - -message("IS_SUBPROJECT: ${IS_SUBPROJECT}") +onion_module_prologue(C_STANDARD 11 CXX_STANDARD 20) set(D_CWD "${CMAKE_CURRENT_SOURCE_DIR}") -if(DEFINED ONIONHEN_OUT_BIN) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ONIONHEN_OUT_BIN}) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ONIONHEN_OUT_LIB}) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ONIONHEN_OUT_LIB}) -else() - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${D_CWD}/../bin) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${D_CWD}/bin) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${D_CWD}/bin) -endif() +onion_output_dirs() set(D_SRC ${D_CWD}/source) -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}") -include_directories (SYSTEM "${PS5_PAYLOAD_SDK}/include") - add_executable(${PROJECT_NAME}) set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "${PROJECT_NAME}.elf") -if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "[Cc]lang") - set(IS_CLANG 1) -else() - message(FATAL_ERROR "${PROJECT_NAME} is meant to be built with clang! CompilerID: ${CMAKE_CXX_COMPILER_ID}") -endif() - target_compile_options(${PROJECT_NAME} PUBLIC $<$:${C_DEFS} ${C_FLAGS}> $<$:${CXX_DEFS} ${CXX_FLAGS}> $<$:${ASM_FLAGS}> ) -message("========== build: ${PROJECT_NAME} ==========") - -file(GLOB SrcFiles +file(GLOB SrcFiles CONFIGURE_DEPENDS ${D_SRC}/*.c ${D_SRC}/*.cpp ${D_SRC}/cheats/*.c @@ -65,9 +33,10 @@ file(GLOB SrcFiles ${ONIONHEN_COMMON_DIR}/backtrace.cpp ) -set(CMAKE_C_FLAGS "--target=x86_64-sie-ps5 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "${ONION_PS5_TARGET_FLAGS} ") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-keyword-macro -fPIC -fPIE -march=znver2 -Wall -Werror -fstack-protector-all -Wno-unused-const-variable -Wno-deprecated-declarations") -set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -DDEBUG -gfull -gdwarf-2 -O0 -pedantic -pedantic-errors") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DDEBUG") +set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -gfull -gdwarf-2 -O0 -pedantic -pedantic-errors") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0") target_sources(${PROJECT_NAME} PRIVATE ${SrcFiles} "${ONIONHEN_COMMON_DIR}/elfldr_remote.c") @@ -114,13 +83,9 @@ set_source_files_properties( ${ONIONHEN_THIRD_PARTY_DIR}/cheat_support/sha256.c PROPERTIES COMPILE_FLAGS "-Wno-error -Wno-unused-function -Wno-sign-compare -Wno-unused-parameter" ) -file(GLOB CHEAT_ENGINE_SRCS ${D_SRC}/cheats/*.c) +file(GLOB CHEAT_ENGINE_SRCS CONFIGURE_DEPENDS ${D_SRC}/cheats/*.c) set_source_files_properties(${CHEAT_ENGINE_SRCS} PROPERTIES COMPILE_FLAGS "-Wno-error -Wno-unused-parameter -Wno-sign-compare" ) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD - COMMAND ${CMAKE_OBJCOPY} --remove-section .debug_info --remove-section .debug_abbrev --remove-section .debug_line --remove-section .debug_str --remove-section .debug_loc --remove-section .debug_aranges --remove-section .debug_ranges --remove-section .debug_pubnames --remove-section .debug_pubtypes --remove-section .debug_frame --strip-unneeded $ - COMMENT "Stripping debugging information from ${PROJECT_NAME}.elf" -) +onion_strip_debug(${PROJECT_NAME})