summaryrefslogtreecommitdiff
path: root/src/wiiu/CMakeLists.txt
blob: 637900c37d718054cbb5c33a705584ed624d8558 (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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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")

list(APPEND CMAKE_MODULE_PATH "${REPO_ROOT}/cmake")

find_package(IDA)

if(NOT IDA_SDK_FOUND)
    message(FATAL_ERROR "IDA SDK not found. Set IDA_SDK_DIR or IDA_SDK.")
endif()

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"
    cafe.h
    cafe_loader.h
    cafe_loader.cpp
    wiiu.cpp
)

add_library(wiiuldr SHARED ${SOURCES})

target_include_directories(wiiuldr PRIVATE
    "${IDA_INCLUDE_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
    ${IDA_COMPILE_DEFS}
)

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
    OUTPUT_NAME "wiiu"
    PREFIX ""
    SUFFIX "${WIIU_LOADER_SUFFIX}"
)