mirror of
				https://github.com/hedge-dev/XenonRecomp.git
				synced 2025-11-04 06:47:09 +00:00 
			
		
		
		
	Remove bin2c, load the PPC context header by path.
This commit is contained in:
		@@ -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()
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user