diff --git a/CMakeLists.txt b/CMakeLists.txt index 2276d05..89de9dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,9 +33,12 @@ include_directories (SYSTEM "${D_PS5SDK}/include") add_subdirectory("crt") add_subdirectory("examples/hello_socket") -add_subdirectory("examples/klog_server") add_subdirectory("examples/pipe_pirate") +if (DEFINED V_FW AND ${V_FW} STREQUAL "0x403") + add_subdirectory("examples/klog_server") +endif() + MACRO(SUBDIRLIST result curdir) FILE(GLOB children RELATIVE ${curdir} ${curdir}/*) SET(dirlist "") diff --git a/build.bat b/build.bat new file mode 100644 index 0000000..1a4ce5b --- /dev/null +++ b/build.bat @@ -0,0 +1,2 @@ +cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_TOOLCHAIN_FILE=%PS5SDK%/cmake/toolchain-ps5.cmake . +ninja diff --git a/cmake/toolchain-ps5.cmake b/cmake/toolchain-ps5.cmake index a4459d9..b8a0766 100644 --- a/cmake/toolchain-ps5.cmake +++ b/cmake/toolchain-ps5.cmake @@ -36,14 +36,14 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # Search for programs in the build set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) # For libraries and headers in the target directories set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -set(CMAKE_C_FLAGS "--target=x86_64-freebsd-pc-elf -O0 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") +set(CMAKE_C_FLAGS "--target=x86_64-freebsd-pc-elf -march=znver2 -O0 -DPPR -DPS5 -DPS5_FW_VERSION=${V_FW} ") 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 -m64") # -nostartfiles -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fomit-frame-pointer -fPIC -fPIE -pie -Wl,-z,norelro") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fomit-frame-pointer -fPIC -fPIE") set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -nostdinc++ ") # set(CMAKE_ASM_FLAGS "--target=x86_64-pc-freebsd11-elf -nostdlib -fPIC -fPIE") #-DCMAKE_LINKER=/path/to/linker -DCMAKE_CXX_LINK_EXECUTABLE=" -o " -set(CMAKE_EXE_LINKER_FLAGS "-fuse-ld=lld -Xlinker -T ${CMAKE_CURRENT_SOURCE_DIR}/linker.x -Wl,--build-id=none -Wl,-z,norelro") +set(CMAKE_EXE_LINKER_FLAGS "-fuse-ld=lld -Xlinker -pie -Xlinker -T ${CMAKE_CURRENT_SOURCE_DIR}/linker.x -Wl,--build-id=none -Wl,-z,norelro") diff --git a/crt/CMakeLists.txt b/crt/CMakeLists.txt index 04b7775..52b1520 100644 --- a/crt/CMakeLists.txt +++ b/crt/CMakeLists.txt @@ -6,19 +6,12 @@ cmake_minimum_required (VERSION 3.20) set(basename "ps5sdk_crt") -project(${basename} C CXX ASM) +project(${basename} C) # 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) - -if ("${CMAKE_CXX_STANDARD}" STREQUAL "") - set(CMAKE_CXX_STANDARD 23) -endif() - set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) @@ -26,10 +19,10 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${D_CWD}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${D_CWD}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${D_CWD}/lib) # static libs are archive -if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "[Cc]lang") +if ("${CMAKE_C_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}") + message(FATAL_ERROR "${PROJECT_NAME} is meant to be built with clang! CompilerID: ${CMAKE_C_COMPILER_ID}") endif() if (NOT DEFINED D_PS5SDK) @@ -37,19 +30,15 @@ if (NOT DEFINED D_PS5SDK) endif() message(" C_FLAGS: ${CMAKE_C_FLAGS} ") -message("CXX_FLAGS: ${CMAKE_CXX_FLAGS}") -message("ASM_FLAGS: ${CMAKE_ASM_FLAGS}") ########## finalize main target sources ########## set(D_CRT_SRC ${D_CWD}/crt) -file(GLOB SrcFiles ${D_CRT_SRC}/*.c ${D_CRT_SRC}/*.s) +file(GLOB SrcFiles ${D_CRT_SRC}/*.c) add_library(${PROJECT_NAME} STATIC ${SrcFiles}) target_compile_options(${PROJECT_NAME} PUBLIC $<$:${C_DEFS} ${C_FLAGS}> - $<$:${CXX_DEFS} ${CXX_FLAGS}> - $<$:$ assembler-with-cpp ${ASM_FLAGS}> ) diff --git a/crt/crt.c b/crt/crt.c index cba5739..da6d0bb 100644 --- a/crt/crt.c +++ b/crt/crt.c @@ -41,4 +41,8 @@ void __ps5sdk_crt_start(struct payload_args *args) out: *(int *)args->payloadout = rv; -} \ No newline at end of file +} + +void __attribute__((naked)) _start(void) { + asm volatile("jmp __ps5sdk_crt_start\n"); +} diff --git a/crt/crt0.s b/crt/crt0.s deleted file mode 100644 index 75b295f..0000000 --- a/crt/crt0.s +++ /dev/null @@ -1,9 +0,0 @@ -# -# crt0.s, intel format -# -.intel_syntax noprefix -.text - -.global _start -_start: - jmp __ps5sdk_crt_start diff --git a/examples/hello_socket/bin/.gitkeep b/examples/hello_socket/bin/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/examples/klog_server/bin/.gitkeep b/examples/klog_server/bin/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/examples/pipe_pirate/bin/.gitkeep b/examples/pipe_pirate/bin/.gitkeep deleted file mode 100644 index e69de29..0000000