summaryrefslogtreecommitdiff
path: root/src/wiiu/CMakeLists.txt
blob: 0d723cc984a110e865f306ae9f8fec5e8034e55e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
cmake_minimum_required(VERSION 3.27)
project(wiiuldr LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
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()

if(NOT EXISTS "${IDA_LIBRARY}")
    message(FATAL_ERROR
        "The 64-bit Windows IDA import library was not found at ${IDA_LIBRARY}.")
endif()

if(NOT MSVC)
    message(FATAL_ERROR "The Wii U loader is configured for Visual Studio/MSVC builds.")
endif()

if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
    message(FATAL_ERROR "Build the Wii U loader with a 64-bit generator (-A x64).")
endif()

set(SOURCES
    "${ELF_COMMON_PATH}/elf_reader.h"
    "${ELF_COMMON_PATH}/elf.h"
    cafe.h
    cafe_loader.h
    cafe_loader.cpp
    wiiu.cpp
)

add_library(wiiuldr SHARED ${SOURCES})

target_include_directories(wiiuldr PRIVATE
    "${IDA_INCLUDE_DIR}"
    "${IDA_LOADER_DIR}"
    "${ELF_COMMON_PATH}"
)

target_compile_definitions(wiiuldr PRIVATE
    __IDP__
    __EA64__
)

target_link_libraries(wiiuldr PRIVATE "${IDA_LIBRARY}")

set_target_properties(wiiuldr PROPERTIES
    MSVC_RUNTIME_LIBRARY "MultiThreadedDLL"
    OUTPUT_NAME "wiiu"
    PREFIX ""
    SUFFIX ".dll"
)