refactor(libs): use local cmakelists in libc

This commit is contained in:
boykopovar 2026-09-11 12:22:19 +03:00
parent 2323a08de6
commit 67b778055a
17 changed files with 71 additions and 36 deletions

View File

@ -20,9 +20,9 @@ void Autorun(const std::string& absPath, bool toWindows) {
const int rawCode = std::system(cmd.c_str());
if (toWindows) {
std::cout << "Exit code: " << rawCode << '\n';
std::cout << "\nExit code: " << rawCode << '\n';
} else {
std::cout << "Raw exit code: " << rawCode << "; Unpacked: " << (rawCode >> 8) << '\n';
std::cout << "\nRaw exit code: " << rawCode << "; Unpacked: " << (rawCode >> 8) << '\n';
}
std::cout << "\nPress Enter to exit...\n";

View File

@ -15,7 +15,9 @@ if(MINGW)
endif()
set(LIBC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/prx/libc)
add_library(libc SHARED EXCLUDE_FROM_ALL ${LIBC_DIR}/Export.cpp)
add_library(libc SHARED EXCLUDE_FROM_ALL)
set(LIBS_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
add_subdirectory(${LIBC_DIR} ${CMAKE_CURRENT_BINARY_DIR}/prx/libc)
target_include_directories(libc PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
set(UNPATCHED_DIR ${CMAKE_CURRENT_BINARY_DIR}/libs/unpatched)

View File

@ -0,0 +1,21 @@
target_sources(libc PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/Export.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/General.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/specifics/gcc/StackGuard.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/specifics/linux/DlIteratePhdr.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Strings.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Math.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Time.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/FileAndHeap.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/JumpBuffer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Formatting.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/RuntimeSupport.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/LocaleSupport.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/Process.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/CxxAbiSupport.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/exception/Exports.cpp
)
target_include_directories(libc PRIVATE
${LIBS_INCLUDE_DIR}
)

View File

@ -3,21 +3,6 @@
#include "SceTypes.hpp"
#include "prx/libc/include/General.hpp"
#include "src/General.cpp"
#include "src/specifics/gcc/StackGuard.cpp"
#include "src/specifics/linux/DlIteratePhdr.cpp"
#include "src/Strings.cpp"
#include "src/Math.cpp"
#include "src/Time.cpp"
#include "src/FileAndHeap.cpp"
#include "src/JumpBuffer.cpp"
#include "src/Formatting.cpp"
#include "src/RuntimeSupport.cpp"
#include "src/LocaleSupport.cpp"
#include "src/Process.cpp"
#include "src/CxxAbiSupport.cpp"
#include "src/exception/Exports.cpp"
uint32_t Need_sceLibc = 1;
extern "C" {

View File

@ -1,9 +1,11 @@
#ifndef CORE_LIBS_PRX_LIBC_INCLUDE_EXCEPTIONS_RUNTIME_HPP
#define CORE_LIBS_PRX_LIBC_INCLUDE_EXCEPTIONS_RUNTIME_HPP
#include "prx/libc/include/exceptions/Unwind.hpp"
#include <atomic>
#include <typeinfo>
#include "prx/libc/include/exceptions/Unwind.hpp"
#include "prx/libc/include/General.hpp"
#include "prx/libc/include/specifics/itanium/CxxAbi.hpp"
namespace LibcException {

View File

@ -5,6 +5,8 @@
#include <cstdint>
#include <cstdlib>
#include <cstring>
#include "prx/libc/include/General.hpp"
#include "prx/libc/include/specifics/itanium/UnwindAbi.hpp"
struct _Unwind_Context {

View File

@ -3,6 +3,7 @@
#ifndef _UNWIND_H
#define _UNWIND_H
#endif
#include <cxxabi.h>
#include <cstdint>
#include <cstdlib>
@ -15,6 +16,9 @@
#include <locale>
#include <regex>
#include <functional>
#include "prx/libc/include/General.hpp"
extern "C" {
void* APS5_VABI __cxa_demangle_nid_postfix(const char* mangled, char* buf, std::size_t* len, int* status) {

View File

@ -3,29 +3,31 @@
#include <cstdio>
#include <cstdlib>
#include <memory>
#include "prx/libc/include/FileStream.hpp"
#include <filesystem>
#include "prx/libc/include/FileStream.hpp"
#include "prx/libc/include/General.hpp"
extern "C" {
[[noreturn]] void APS5_VABI _ZSt11_Xbad_allocv_nid_postfix();
FileStream* APS5_VABI fopen_nid_postfix(const char* filename, const char* mode) {
if (!filename || !mode) throw std::runtime_error("fopen: null argument");
std::unique_ptr<std::FILE, decltype(&std::fclose)> handle(std::fopen(filename, mode), std::fclose);
if (!handle) {
std::string msg = "fopen: open failed: \"";
msg += filename;
msg += "\": ";
msg += std::strerror(errno);
throw std::runtime_error(msg);
}
auto stream = std::make_unique<FileStream>(handle.get(), true);
handle.release();
FileStream* APS5_VABI fopen_nid_postfix(const char* filename, const char* mode) {
if (!filename || !mode) throw std::runtime_error("fopen: null argument");
std::unique_ptr<std::FILE, decltype(&std::fclose)> handle(std::fopen(filename, mode), std::fclose);
if (!handle) {
std::string msg = "fopen: open failed: \"";
msg += std::filesystem::absolute(filename).string();
msg += "\": ";
msg += std::strerror(errno);
throw std::runtime_error(msg);
}
auto stream = std::make_unique<FileStream>(handle.get(), true);
handle.release();
APS5_LOG_OUT("success: \"%s\"", filename);
return stream.release();
}
APS5_LOG_OUT("success: \"%s\"", filename);
return stream.release();
}
int APS5_VABI fclose_nid_postfix(FileStream* stream) {
GetNativeStream(stream);

View File

@ -1,5 +1,7 @@
#include <csetjmp>
#include "prx/libc/include/General.hpp"
extern "C" {
int APS5_VABI setjmp_nid_postfix(std::jmp_buf env) {

View File

@ -6,6 +6,8 @@
#include <locale>
#include <mutex>
#include "prx/libc/include/General.hpp"
namespace {
std::mutex g_localeInitMutex;

View File

@ -1,5 +1,7 @@
#include <cmath>
#include "prx/libc/include/General.hpp"
extern "C" {
double cbrt_nid_postfix(double x) { return std::cbrt(x); }

View File

@ -2,6 +2,8 @@
#include <cstdlib>
#include <cstring>
#include <cerrno>
#include "prx/libc/include/General.hpp"
#include "SceTypes.hpp"
extern "C" {

View File

@ -6,6 +6,8 @@
#include <mutex>
#include <vector>
#include <utility>
#include "prx/libc/include/General.hpp"
#include "prx/libc/include/specifics/gcc/AtomicOps.hpp"
#include "prx/libc/include/FileStream.hpp"

View File

@ -3,6 +3,8 @@
#include <cstdlib>
#include <cctype>
#include <cwchar>
#include <cstdio>
#include "prx/libc/include/General.hpp"
extern "C" {

View File

@ -3,6 +3,8 @@
#include <ctime>
#include <cstring>
#include "prx/libc/include/General.hpp"
extern "C" {
int64_t APS5_VABI libc_time_nid_postfix(int64_t* timer) {

View File

@ -5,6 +5,7 @@
#include "GuardSupport.cpp"
#include "Personality.cpp"
#include "prx/libc/include/General.hpp"
#include "prx/libc/include/specifics/gcc/SymbolAlias.hpp"
extern "C" [[noreturn]] GCC_HIDDEN_FN void APS5_VABI LibcRuntimeAssertion(const char*, int, const char*, const char*) { std::abort(); }

View File

@ -1,7 +1,9 @@
#include "prx/libc/include/specifics/linux/ElfTypes.hpp"
#include <cstddef>
#include <stdexcept>
#include "prx/libc/include/specifics/linux/ElfTypes.hpp"
#include "prx/libc/include/General.hpp"
extern "C" {
int APS5_VABI dl_iterate_phdr_nid_postfix(int (*callback)(dl_phdr_info*, std::size_t, void*), void* data) {