-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
156 lines (132 loc) · 3.52 KB
/
Copy pathCMakeLists.txt
File metadata and controls
156 lines (132 loc) · 3.52 KB
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
cmake_minimum_required(VERSION 3.13)
project(dvm LANGUAGES C)
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
if(NINTENDO_DS AND ARM9)
set(CMAKE_INSTALL_PREFIX "${NDS_ROOT}" CACHE PATH "" FORCE)
elseif(NINTENDO_GBA)
set(CMAKE_INSTALL_PREFIX "${GBA_ROOT}" CACHE PATH "" FORCE)
elseif(NINTENDO_GAMECUBE OR NINTENDO_WII)
set(CMAKE_INSTALL_PREFIX "${OGC_ROOT}" CACHE PATH "" FORCE)
set(CMAKE_INSTALL_LIBDIR "lib/${OGC_SUBDIR}" CACHE PATH "" FORCE)
else()
message(FATAL_ERROR "Unknown platform")
endif()
endif()
add_library(dvm STATIC)
add_library(ext2fs STATIC $<TARGET_OBJECTS:lwext4>)
add_library(fat STATIC $<TARGET_OBJECTS:dvm>)
if (NOT EXISTS "${CMAKE_SOURCE_DIR}/fatfs/CMakeLists.txt")
include(FetchContent)
FetchContent_Populate(FatFs
GIT_REPOSITORY https://github.com/extremscorner/fatfs-mod
GIT_TAG dkp-mods
SOURCE_DIR ${CMAKE_SOURCE_DIR}/fatfs
BINARY_DIR ${CMAKE_BINARY_DIR}/fatfs
)
endif()
if (NOT EXISTS "${CMAKE_SOURCE_DIR}/lwext4/CMakeLists.txt")
include(FetchContent)
FetchContent_Populate(lwext4
GIT_REPOSITORY https://github.com/extremscorner/lwext4
GIT_TAG dkp-mods
SOURCE_DIR ${CMAKE_SOURCE_DIR}/lwext4
BINARY_DIR ${CMAKE_BINARY_DIR}/lwext4
)
endif()
set(LIB_ONLY ON)
add_subdirectory(lwext4)
add_subdirectory(fatfs)
target_compile_options(dvm PRIVATE -Wall)
target_compile_options(ext2fs PRIVATE -Wall)
target_compile_options(fat PRIVATE -Wall)
if (NOT NINTENDO_GBA)
target_compile_definitions(dvm PUBLIC
# Disc I/O buffer alignment (should match CPU cache line size)
LIBDVM_BUFFER_ALIGN=32
)
else()
target_compile_definitions(dvm PUBLIC
# Disc I/O buffer alignment (should match CPU cache line size)
LIBDVM_BUFFER_ALIGN=4
)
endif()
if(NINTENDO_GAMECUBE OR NINTENDO_WII)
target_compile_definitions(lwext4 PUBLIC
CONFIG_BIG_ENDIAN
CONFIG_UNALIGNED_ACCESS=1
)
endif()
target_compile_definitions(lwext4 PUBLIC
# Disable GPL components
CONFIG_EXTENTS_ENABLE=0
CONFIG_XATTR_ENABLE=0
)
target_include_directories(dvm PUBLIC
include
)
target_include_directories(lwext4 PUBLIC
${lwext4_SOURCE_DIR}/include
${lwext4_BINARY_DIR}/include
)
target_link_libraries(ext2fs PRIVATE
lwext4
dvm
)
target_link_libraries(fat PRIVATE
FatFs
dvm
)
target_sources(dvm PRIVATE
source/dvm_disc.c
source/dvm_cache.c
source/dvm_volume.c
source/dvm_prober.c
)
target_sources(ext2fs PRIVATE
source/ext2_wrappers.c
source/ext4_driver.c
)
target_sources(fat PRIVATE
source/fat_wrappers.c
source/fat_driver.c
)
if(NINTENDO_DS)
target_sources(dvm PRIVATE source/dvm_calico.c)
target_sources(fat PRIVATE source/nitrofs.c)
set(extra_install PATTERN filesystem.h)
target_compile_definitions(dvm PRIVATE
LIBDVM_WITH_CACHE_COPY
LIBDVM_WITH_ALIGNED_ACCESS
)
endif()
if(NINTENDO_GBA)
target_sources(dvm PRIVATE source/dvm_libgba.c)
endif()
if(NINTENDO_GAMECUBE OR NINTENDO_WII)
target_sources(dvm PRIVATE source/dvm_libogc2.c)
target_compile_definitions(dvm PRIVATE
LIBDVM_WITH_ALIGNED_ACCESS
)
endif()
include(GNUInstallDirs)
# Install the libraries
install(
TARGETS dvm ext2fs fat
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
# Install the headers
install(
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING
PATTERN dvm.h
PATTERN ext2.h
PATTERN fat.h
${extra_install}
)
# Install a dummy libfilesystem
if(NINTENDO_DS)
add_library(filesystem STATIC include/filesystem.h)
set_target_properties(filesystem PROPERTIES LINKER_LANGUAGE C)
install(TARGETS filesystem ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()