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}"
)
|