diff options
Diffstat (limited to 'src/wiiu/CMakeLists.txt')
| -rw-r--r-- | src/wiiu/CMakeLists.txt | 73 |
1 files changed, 50 insertions, 23 deletions
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}" ) |
