mirror of
https://github.com/ApfelTeeSaft/RebrewU.git
synced 2026-08-26 19:33:27 +00:00
V2 of the Recompiler
This commit is contained in:
+135
@@ -0,0 +1,135 @@
|
||||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
project(RebrewU
|
||||
VERSION 0.1.0
|
||||
DESCRIPTION "Wii U static recompilation framework"
|
||||
LANGUAGES CXX
|
||||
)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||
message(STATUS "Build type not set – defaulting to Release.")
|
||||
set(CMAKE_BUILD_TYPE "Release"
|
||||
CACHE STRING "Choose the type of build." FORCE)
|
||||
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
|
||||
"Debug" "Release" "RelWithDebInfo" "MinSizeRel")
|
||||
endif()
|
||||
|
||||
option(REBREWU_BUILD_TESTS "Build the RebrewU test suite" ON)
|
||||
option(REBREWU_ENABLE_ASAN "Enable AddressSanitizer" OFF)
|
||||
option(REBREWU_INSTALL "Generate CMake install / package rules" OFF)
|
||||
|
||||
include(cmake/CompilerOptions.cmake)
|
||||
|
||||
find_package(ZLIB REQUIRED)
|
||||
|
||||
if(EXISTS "${CMAKE_SOURCE_DIR}/third_party/nlohmann/json.hpp")
|
||||
message(STATUS "nlohmann/json: using bundled header "
|
||||
"(third_party/nlohmann/json.hpp)")
|
||||
add_library(nlohmann_json INTERFACE)
|
||||
add_library(nlohmann_json::nlohmann_json ALIAS nlohmann_json)
|
||||
target_include_directories(nlohmann_json
|
||||
INTERFACE "${CMAKE_SOURCE_DIR}/third_party")
|
||||
else()
|
||||
message(STATUS "nlohmann/json: bundled header absent – fetching v3.11.3 "
|
||||
"via FetchContent (will be cached in third_party/nlohmann/)")
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
nlohmann_json_dl
|
||||
URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.hpp
|
||||
URL_HASH SHA256=9bea4c8066ef4a1c206b2be5a36302f8926f7fdc6087af5d20b417d0cf103ea6
|
||||
DOWNLOAD_NO_EXTRACT TRUE
|
||||
DOWNLOAD_DIR "${CMAKE_SOURCE_DIR}/third_party/nlohmann"
|
||||
)
|
||||
FetchContent_MakeAvailable(nlohmann_json_dl)
|
||||
add_library(nlohmann_json INTERFACE)
|
||||
add_library(nlohmann_json::nlohmann_json ALIAS nlohmann_json)
|
||||
target_include_directories(nlohmann_json
|
||||
INTERFACE "${CMAKE_SOURCE_DIR}/third_party")
|
||||
endif()
|
||||
|
||||
add_subdirectory(src/ir) # INTERFACE – headers only; no external deps
|
||||
add_subdirectory(src/diagnostics) # lightweight; no external deps
|
||||
add_subdirectory(src/core) # elf / rpx / rpl / relocation / linker
|
||||
add_subdirectory(src/ppc) # decoder + semantics; links rebrewu_ir
|
||||
add_subdirectory(src/analysis) # function_discovery / cfg / jump_table
|
||||
add_subdirectory(src/codegen) # cpp_emitter / naming
|
||||
add_subdirectory(src/config) # JSON-based config; links nlohmann_json
|
||||
add_subdirectory(runtime) # INTERFACE – runtime shim headers
|
||||
|
||||
add_subdirectory(src/cli)
|
||||
|
||||
if(REBREWU_BUILD_TESTS)
|
||||
enable_testing()
|
||||
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
Catch2
|
||||
GIT_REPOSITORY https://github.com/catchorg/Catch2.git
|
||||
GIT_TAG v3.7.1
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_MakeAvailable(Catch2)
|
||||
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
|
||||
if(REBREWU_INSTALL)
|
||||
include(GNUInstallDirs)
|
||||
include(CMakePackageConfigHelpers)
|
||||
|
||||
install(
|
||||
TARGETS
|
||||
rebrewu
|
||||
rebrewu_core
|
||||
rebrewu_ppc
|
||||
rebrewu_ir
|
||||
rebrewu_analysis
|
||||
rebrewu_codegen
|
||||
rebrewu_config
|
||||
rebrewu_diagnostics
|
||||
rebrewu_runtime
|
||||
EXPORT RebrewUTargets
|
||||
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
|
||||
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||
)
|
||||
|
||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/include/"
|
||||
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
|
||||
)
|
||||
|
||||
install(EXPORT RebrewUTargets
|
||||
FILE RebrewUTargets.cmake
|
||||
NAMESPACE RebrewU::
|
||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/RebrewU"
|
||||
)
|
||||
|
||||
write_basic_package_version_file(
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/RebrewUConfigVersion.cmake"
|
||||
VERSION ${PROJECT_VERSION}
|
||||
COMPATIBILITY AnyNewerVersion
|
||||
)
|
||||
|
||||
configure_package_config_file(
|
||||
"${CMAKE_SOURCE_DIR}/cmake/RebrewUConfig.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/RebrewUConfig.cmake"
|
||||
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/RebrewU"
|
||||
)
|
||||
|
||||
install(FILES
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/RebrewUConfig.cmake"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/RebrewUConfigVersion.cmake"
|
||||
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/RebrewU"
|
||||
)
|
||||
endif()
|
||||
+107080
File diff suppressed because it is too large
Load Diff
+117899
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+137883
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user