summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLeander Scherer <leander@schererleander.de>2026-06-16 22:29:50 +0200
committerLeander Scherer <leander@schererleander.de>2026-06-16 22:29:50 +0200
commitbd328c9a993b40aa069febd063e4a836344cc5d4 (patch)
tree857a9e83d488b39e929b97430294eb0addf73449 /src
parentf78b28db5b3d1a9387bd18b1f2efe15b6d09dcb4 (diff)
Add Linux build support for Wii U loaderHEADmaster
Diffstat (limited to 'src')
-rw-r--r--src/elf_common/elf_reader.h3
-rw-r--r--src/wiiu/CMakeLists.txt73
2 files changed, 51 insertions, 25 deletions
diff --git a/src/elf_common/elf_reader.h b/src/elf_common/elf_reader.h
index 1c6a389..23ab7cd 100644
--- a/src/elf_common/elf_reader.h
+++ b/src/elf_common/elf_reader.h
@@ -202,9 +202,8 @@ public:
void print() {
this->printHeader();
- this->printSegment();
+ this->printSegments();
this->printSections();
- this->printSymbols();
}
bool verifyHeader() {
diff --git a/src/wiiu/CMakeLists.txt b/src/wiiu/CMakeLists.txt
index 0d723cc..637900c 100644
--- a/src/wiiu/CMakeLists.txt
+++ b/src/wiiu/CMakeLists.txt
@@ -1,4 +1,5 @@
cmake_minimum_required(VERSION 3.27)
+
project(wiiuldr LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
@@ -7,30 +8,43 @@ set(CMAKE_CXX_EXTENSIONS OFF)
set(REPO_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../..")
set(ELF_COMMON_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../elf_common")
-set(IDA_SDK_ROOT "${REPO_ROOT}/third_party/ida-sdk/src")
-set(IDA_INCLUDE_DIR "${IDA_SDK_ROOT}/include")
-set(IDA_LOADER_DIR "${IDA_SDK_ROOT}/ldr")
-set(IDA_LIBRARY "${IDA_SDK_ROOT}/lib/x64_win_64/ida.lib")
-if(NOT EXISTS "${IDA_INCLUDE_DIR}/ida.hpp")
- message(FATAL_ERROR
- "The ida-sdk submodule was not found at ${IDA_SDK_ROOT}. "
- "Initialize submodules before configuring this project.")
-endif()
+list(APPEND CMAKE_MODULE_PATH "${REPO_ROOT}/cmake")
-if(NOT EXISTS "${IDA_LIBRARY}")
- message(FATAL_ERROR
- "The 64-bit Windows IDA import library was not found at ${IDA_LIBRARY}.")
-endif()
+find_package(IDA)
-if(NOT MSVC)
- message(FATAL_ERROR "The Wii U loader is configured for Visual Studio/MSVC builds.")
+if(NOT IDA_SDK_FOUND)
+ message(FATAL_ERROR "IDA SDK not found. Set IDA_SDK_DIR or IDA_SDK.")
endif()
-if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
- message(FATAL_ERROR "Build the Wii U loader with a 64-bit generator (-A x64).")
+set(IDA_INSTALL_DIR "$ENV{IDADIR}" CACHE PATH "IDA installation directory")
+
+if(UNIX AND NOT APPLE)
+ find_library(IDA_SHARED_LIBRARY
+ NAMES ida libida.so
+ PATHS "${IDA_INSTALL_DIR}"
+ NO_DEFAULT_PATH
+ )
+
+ if(NOT IDA_SHARED_LIBRARY)
+ message(FATAL_ERROR
+ "libida.so not found. Set IDADIR to your IDA installation directory.")
+ endif()
+
+ set(IDA_RUNTIME_LIBS "${IDA_SHARED_LIBRARY}")
+ set(WIIU_LOADER_SUFFIX ".so")
+elseif(WIN32)
+ set(IDA_RUNTIME_LIBS "${IDA_LIBRARIES}")
+ set(WIIU_LOADER_SUFFIX ".dll")
+else()
+ message(FATAL_ERROR "This CMakeLists currently supports Linux and Windows only.")
endif()
+message(STATUS "IDA SDK: ${IDA_SDK_PATH}")
+message(STATUS "IDA include dir: ${IDA_INCLUDE_DIR}")
+message(STATUS "IDA runtime libs: ${IDA_RUNTIME_LIBS}")
+message(STATUS "Wii U loader suffix: ${WIIU_LOADER_SUFFIX}")
+
set(SOURCES
"${ELF_COMMON_PATH}/elf_reader.h"
"${ELF_COMMON_PATH}/elf.h"
@@ -44,20 +58,33 @@ add_library(wiiuldr SHARED ${SOURCES})
target_include_directories(wiiuldr PRIVATE
"${IDA_INCLUDE_DIR}"
- "${IDA_LOADER_DIR}"
+ "${IDA_SDK_PATH}/ldr"
"${ELF_COMMON_PATH}"
)
+set(IDA_COMPILE_DEFS "")
+foreach(def ${IDA_DEFINITIONS})
+ string(REGEX REPLACE "^-D" "" defname "${def}")
+ list(APPEND IDA_COMPILE_DEFS "${defname}")
+endforeach()
+
target_compile_definitions(wiiuldr PRIVATE
- __IDP__
- __EA64__
+ ${IDA_COMPILE_DEFS}
)
-target_link_libraries(wiiuldr PRIVATE "${IDA_LIBRARY}")
+target_link_libraries(wiiuldr PRIVATE
+ ${IDA_RUNTIME_LIBS}
+)
+
+if(UNIX AND NOT APPLE)
+ set_target_properties(wiiuldr PROPERTIES
+ BUILD_RPATH "${IDA_INSTALL_DIR}"
+ INSTALL_RPATH "${IDA_INSTALL_DIR}"
+ )
+endif()
set_target_properties(wiiuldr PROPERTIES
- MSVC_RUNTIME_LIBRARY "MultiThreadedDLL"
OUTPUT_NAME "wiiu"
PREFIX ""
- SUFFIX ".dll"
+ SUFFIX "${WIIU_LOADER_SUFFIX}"
)