mirror of
https://github.com/hedge-dev/XenonRecomp.git
synced 2025-06-06 18:31:03 +00:00
Remove bin2c, load the PPC context header by path.
This commit is contained in:
parent
ca39a3b992
commit
2cd41adf42
@ -13,8 +13,6 @@ endif()
|
|||||||
|
|
||||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||||
|
|
||||||
include("cmake/bin2h.cmake")
|
|
||||||
|
|
||||||
add_subdirectory(${THIRDPARTY_ROOT})
|
add_subdirectory(${THIRDPARTY_ROOT})
|
||||||
set(POWERANALYSE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/PowerAnalyse)
|
set(POWERANALYSE_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/PowerAnalyse)
|
||||||
set(POWERUTILS_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/PowerUtils)
|
set(POWERUTILS_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/PowerUtils)
|
||||||
|
@ -2,12 +2,6 @@ cmake_minimum_required (VERSION 3.8)
|
|||||||
|
|
||||||
project("PowerRecomp")
|
project("PowerRecomp")
|
||||||
|
|
||||||
BIN2H(SOURCE_FILE
|
|
||||||
${POWERUTILS_ROOT}/ppc_context.h
|
|
||||||
HEADER_FILE "generated/ppc_context.gen.h"
|
|
||||||
ARRAY_TYPE "char"
|
|
||||||
VARIABLE_NAME "g_PPCContextText")
|
|
||||||
|
|
||||||
add_executable(PowerRecomp
|
add_executable(PowerRecomp
|
||||||
"main.cpp"
|
"main.cpp"
|
||||||
"recompiler.cpp"
|
"recompiler.cpp"
|
||||||
|
3
PowerRecomp/generated/.gitignore
vendored
3
PowerRecomp/generated/.gitignore
vendored
@ -1,3 +0,0 @@
|
|||||||
*
|
|
||||||
|
|
||||||
!.gitignore
|
|
@ -23,7 +23,15 @@ int main(int argc, char* argv[])
|
|||||||
entry->name = "_xstart";
|
entry->name = "_xstart";
|
||||||
}
|
}
|
||||||
|
|
||||||
recompiler.Recompile();
|
const char* headerFilePath =
|
||||||
|
#ifdef HEADER_FILE_PATH
|
||||||
|
HEADER_FILE_PATH
|
||||||
|
#else
|
||||||
|
argv[2]
|
||||||
|
#endif
|
||||||
|
;
|
||||||
|
|
||||||
|
recompiler.Recompile(headerFilePath);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -17,4 +17,3 @@
|
|||||||
#include <xxhash.h>
|
#include <xxhash.h>
|
||||||
#include <fmt/core.h>
|
#include <fmt/core.h>
|
||||||
#include <xmmintrin.h>
|
#include <xmmintrin.h>
|
||||||
#include "generated/ppc_context.gen.h"
|
|
||||||
|
@ -2361,7 +2361,7 @@ bool Recompiler::Recompile(const Function& fn)
|
|||||||
return allRecompiled;
|
return allRecompiled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Recompiler::Recompile()
|
void Recompiler::Recompile(const std::filesystem::path& headerFilePath)
|
||||||
{
|
{
|
||||||
out.reserve(10 * 1024 * 1024);
|
out.reserve(10 * 1024 * 1024);
|
||||||
|
|
||||||
@ -2403,7 +2403,14 @@ void Recompiler::Recompile()
|
|||||||
println("#pragma once");
|
println("#pragma once");
|
||||||
|
|
||||||
println("#include \"ppc_config.h\"\n");
|
println("#include \"ppc_config.h\"\n");
|
||||||
println("{}", std::string_view{g_PPCContextText, g_PPCContextText_size});
|
|
||||||
|
std::ifstream stream(headerFilePath);
|
||||||
|
if (stream.good())
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << stream.rdbuf();
|
||||||
|
out += ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
SaveCurrentOutData("ppc_context.h");
|
SaveCurrentOutData("ppc_context.h");
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ struct Recompiler
|
|||||||
|
|
||||||
bool Recompile(const Function& fn);
|
bool Recompile(const Function& fn);
|
||||||
|
|
||||||
void Recompile();
|
void Recompile(const std::filesystem::path& headerFilePath);
|
||||||
|
|
||||||
void SaveCurrentOutData(const std::string_view& name = std::string_view());
|
void SaveCurrentOutData(const std::string_view& name = std::string_view());
|
||||||
};
|
};
|
||||||
|
@ -1,84 +0,0 @@
|
|||||||
# https://github.com/sivachandran/cmake-bin2h
|
|
||||||
include(CMakeParseArguments)
|
|
||||||
|
|
||||||
# Function to wrap a given string into multiple lines at the given column position.
|
|
||||||
# Parameters:
|
|
||||||
# VARIABLE - The name of the CMake variable holding the string.
|
|
||||||
# AT_COLUMN - The column position at which string will be wrapped.
|
|
||||||
function(WRAP_STRING)
|
|
||||||
set(oneValueArgs VARIABLE AT_COLUMN)
|
|
||||||
cmake_parse_arguments(WRAP_STRING "${options}" "${oneValueArgs}" "" ${ARGN})
|
|
||||||
|
|
||||||
string(LENGTH ${${WRAP_STRING_VARIABLE}} stringLength)
|
|
||||||
math(EXPR offset "0")
|
|
||||||
|
|
||||||
while(stringLength GREATER 0)
|
|
||||||
|
|
||||||
if(stringLength GREATER ${WRAP_STRING_AT_COLUMN})
|
|
||||||
math(EXPR length "${WRAP_STRING_AT_COLUMN}")
|
|
||||||
else()
|
|
||||||
math(EXPR length "${stringLength}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
string(SUBSTRING ${${WRAP_STRING_VARIABLE}} ${offset} ${length} line)
|
|
||||||
set(lines "${lines}\n${line}")
|
|
||||||
|
|
||||||
math(EXPR stringLength "${stringLength} - ${length}")
|
|
||||||
math(EXPR offset "${offset} + ${length}")
|
|
||||||
endwhile()
|
|
||||||
|
|
||||||
set(${WRAP_STRING_VARIABLE} "${lines}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
# Function to embed contents of a file as byte array in C/C++ header file(.h). The header file
|
|
||||||
# will contain a byte array and integer variable holding the size of the array.
|
|
||||||
# Parameters
|
|
||||||
# SOURCE_FILE - The path of source file whose contents will be embedded in the header file.
|
|
||||||
# VARIABLE_NAME - The name of the variable for the byte array. The string "_SIZE" will be append
|
|
||||||
# to this name and will be used a variable name for size variable.
|
|
||||||
# HEADER_FILE - The path of header file.
|
|
||||||
# ARRAY_TYPE - The type of each element of the array in the header file.
|
|
||||||
# APPEND - If specified appends to the header file instead of overwriting it
|
|
||||||
# NULL_TERMINATE - If specified a null byte(zero) will be append to the byte array. This will be
|
|
||||||
# useful if the source file is a text file and we want to use the file contents
|
|
||||||
# as string. But the size variable holds size of the byte array without this
|
|
||||||
# null byte.
|
|
||||||
# Usage:
|
|
||||||
# bin2h(SOURCE_FILE "Logo.png" HEADER_FILE "Logo.h" ARRAY_TYPE "char" VARIABLE_NAME "LOGO_PNG")
|
|
||||||
function(BIN2H)
|
|
||||||
set(options APPEND NULL_TERMINATE)
|
|
||||||
set(oneValueArgs SOURCE_FILE VARIABLE_NAME HEADER_FILE ARRAY_TYPE)
|
|
||||||
cmake_parse_arguments(BIN2H "${options}" "${oneValueArgs}" "" ${ARGN})
|
|
||||||
|
|
||||||
# reads source file contents as hex string
|
|
||||||
file(READ ${BIN2H_SOURCE_FILE} hexString HEX)
|
|
||||||
string(LENGTH ${hexString} hexStringLength)
|
|
||||||
|
|
||||||
# appends null byte if asked
|
|
||||||
if(BIN2H_NULL_TERMINATE)
|
|
||||||
set(hexString "${hexString}00")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# wraps the hex string into multiple lines at column 32(i.e. 16 bytes per line)
|
|
||||||
wrap_string(VARIABLE hexString AT_COLUMN 32)
|
|
||||||
math(EXPR arraySize "${hexStringLength} / 2")
|
|
||||||
|
|
||||||
# adds '0x' prefix and comma suffix before and after every byte respectively
|
|
||||||
string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1, " arrayValues ${hexString})
|
|
||||||
# removes trailing comma
|
|
||||||
string(REGEX REPLACE ", $" "" arrayValues ${arrayValues})
|
|
||||||
|
|
||||||
# converts the variable name into proper C identifier
|
|
||||||
string(MAKE_C_IDENTIFIER "${BIN2H_VARIABLE_NAME}" BIN2H_VARIABLE_NAME)
|
|
||||||
|
|
||||||
# declares byte array and the length variables
|
|
||||||
set(arrayDefinition "const ${BIN2H_ARRAY_TYPE} ${BIN2H_VARIABLE_NAME}[] = { ${arrayValues} };")
|
|
||||||
set(arraySizeDefinition "const size_t ${BIN2H_VARIABLE_NAME}_size = ${arraySize};")
|
|
||||||
|
|
||||||
set(declarations "${arrayDefinition}\n\n${arraySizeDefinition}\n\n")
|
|
||||||
if(BIN2H_APPEND)
|
|
||||||
file(APPEND ${BIN2H_HEADER_FILE} "${declarations}")
|
|
||||||
else()
|
|
||||||
file(WRITE ${BIN2H_HEADER_FILE} "${declarations}")
|
|
||||||
endif()
|
|
||||||
endfunction()
|
|
Loading…
x
Reference in New Issue
Block a user