-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathCMakeLists.txt
144 lines (118 loc) · 4.59 KB
/
CMakeLists.txt
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
# mkpsxiso build script (rewritten)
# (C) 2021 spicyjpeg
cmake_minimum_required(VERSION 3.20)
project(
mkpsxiso
LANGUAGES C CXX
VERSION 2.10
DESCRIPTION "PlayStation ISO image maker & dumping tool"
HOMEPAGE_URL "https://github.com/Lameguy64/mkpsxiso"
)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
# Useful paths
set(mkpsxiso_dir "src/mkpsxiso")
set(dumpsxiso_dir "src/dumpsxiso")
set(shared_dir "src/shared")
## External dependencies
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/tinyxml2/tinyxml2.cpp)
message(FATAL_ERROR "The tinyxml2 directory is empty. Run 'git submodule update --init --recursive' to populate it.")
endif()
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/miniaudio/miniaudio.h)
message(FATAL_ERROR "The miniaudio directory is empty. Run 'git submodule update --init --recursive' to populate it.")
endif()
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/ghc/include/ghc/filesystem.hpp)
message(FATAL_ERROR "The ghc directory is empty. Run 'git submodule update --init --recursive' to populate it.")
endif()
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/ThreadPool/ThreadPool.h)
message(FATAL_ERROR "The ThreadPool directory is empty. Run 'git submodule update --init --recursive' to populate it.")
endif()
# Build tinyxml2. I didn't bother with tinyxml2's actual CMake integration
# because it's far easier do do this. It is a single-file library after all.
add_library (tinyxml2 STATIC tinyxml2/tinyxml2.cpp)
target_include_directories(tinyxml2 PUBLIC tinyxml2)
# Build libFLAC, unless explicitly requested not too
if(NOT MKPSXISO_NO_LIBFLAC)
if(NOT EXISTS ${PROJECT_SOURCE_DIR}/flac/include/FLAC/stream_encoder.h)
message(FATAL_ERROR "The flac directory is empty. Run 'git submodule update --init --recursive' to populate it.")
endif()
set(BUILD_CXXLIBS OFF CACHE INTERNAL "")
set(BUILD_PROGRAMS OFF CACHE INTERNAL "")
set(BUILD_EXAMPLES OFF CACHE INTERNAL "")
set(BUILD_DOCS OFF CACHE INTERNAL "")
set(BUILD_TESTING OFF CACHE INTERNAL "")
set(INSTALL_MANPAGES OFF CACHE INTERNAL "")
set(INSTALL_PKGCONFIG_MODULES OFF CACHE INTERNAL "")
set(INSTALL_CMAKE_CONFIG_MODULE OFF CACHE INTERNAL "")
set(WITH_OGG OFF CACHE INTERNAL "")
if(MINGW)
set(WITH_STACK_PROTECTOR, OFF CACHE INTERNAL "")
endif()
add_subdirectory(flac EXCLUDE_FROM_ALL)
endif()
# Add ghc to support filesystem on MacOS
add_subdirectory(ghc EXCLUDE_FROM_ALL)
## Internal dependencies
# Populate shared files
add_library(iso_shared OBJECT
${shared_dir}/common.cpp
${shared_dir}/fs.cpp
${shared_dir}/mmappedfile.cpp
${shared_dir}/platform.cpp
)
target_include_directories(iso_shared PUBLIC ${shared_dir})
target_compile_definitions(iso_shared PUBLIC VERSION="${PROJECT_VERSION}")
target_link_libraries(iso_shared ghc_filesystem)
find_package(Threads REQUIRED)
## Executables
add_executable(mkpsxiso
${mkpsxiso_dir}/cdwriter.cpp
${mkpsxiso_dir}/edcecc.cpp
${mkpsxiso_dir}/iso.cpp
${mkpsxiso_dir}/main.cpp
)
target_include_directories(mkpsxiso PUBLIC "miniaudio" "ThreadPool")
target_link_libraries(mkpsxiso tinyxml2 iso_shared Threads::Threads)
if(MINGW)
target_link_libraries(mkpsxiso "-municode")
endif()
add_executable(dumpsxiso
${dumpsxiso_dir}/cdreader.cpp
${dumpsxiso_dir}/main.cpp
)
target_link_libraries(dumpsxiso tinyxml2 iso_shared)
if(NOT MKPSXISO_NO_LIBFLAC)
target_link_libraries(dumpsxiso FLAC)
else()
target_compile_definitions(dumpsxiso PUBLIC MKPSXISO_NO_LIBFLAC)
endif()
if(MINGW)
target_link_libraries(dumpsxiso "-municode")
endif()
## Installation
include(GNUInstallDirs)
install(TARGETS mkpsxiso dumpsxiso)
install(FILES ${PROJECT_SOURCE_DIR}/README.md ${PROJECT_SOURCE_DIR}/LICENSE.md DESTINATION ${CMAKE_INSTALL_DATADIR}/psn00bsdk/doc/mkpsxiso)
## CPack (used by GitHub Actions to package releases)
if(NOT DEFINED CPACK_GENERATOR)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(CPACK_GENERATOR ZIP DEB RPM)
else()
set(CPACK_GENERATOR ZIP)
endif()
endif()
set(CPACK_VERBATIM_VARIABLES ON)
set(CPACK_ARCHIVE_THREADS 0)
set(CPACK_PACKAGE_DIRECTORY ${PROJECT_BINARY_DIR}/packages)
set(CPACK_PACKAGE_NAME mkpsxiso)
set(CPACK_PACKAGE_VENDOR Lameguy64)
set(CPACK_PACKAGE_CONTACT Lameguy64)
set(CPACK_RESOURCE_FILE_README ${PROJECT_SOURCE_DIR}/README.md)
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE.md)
#set(CPACK_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/icon.ico)
set(CPACK_PACKAGE_INSTALL_DIRECTORY mkpsxiso)
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.28)")
set(CPACK_DEBIAN_PACKAGE_SECTION devel)
#set(CPACK_RPM_PACKAGE_RELOCATABLE ON)
include(CPack)