aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt84
1 files changed, 29 insertions, 55 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 431e95b..87980a5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,13 +6,12 @@
# workaround is to use ExternalProject_Add() to launch multiple independent
# CMake instances, creating what's known as a "superbuild".
-cmake_minimum_required(VERSION 3.21)
+cmake_minimum_required(VERSION 3.20)
include(ExternalProject)
project(
PSn00bSDK
LANGUAGES NONE
- # IMPORTANT TODO: set a version number
VERSION 0.1.0
DESCRIPTION "Open source PlayStation 1 SDK"
HOMEPAGE_URL "http://lameguy64.net/?page=psn00bsdk"
@@ -36,14 +35,6 @@ set(
)
set(
- SKIP_TINYXML2 OFF
- CACHE BOOL "Skip downloading and building tinyxml2 (if already installed)"
-)
-set(
- SKIP_MKPSXISO OFF
- CACHE BOOL "Skip downloading and building mkpsxiso (if already installed)"
-)
-set(
SKIP_EXAMPLES OFF
CACHE BOOL "Skip building SDK examples (not required for installation)"
)
@@ -61,12 +52,6 @@ set(
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
)
set(
- EXT_LIBRARY_ARGS
- -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE}
- -DCMAKE_INSTALL_PREFIX:PATH=${PROJECT_BINARY_DIR}/install_temp
- -DCMAKE_MSVC_RUNTIME_LIBRARY:STRING=MultiThreaded$<$<CONFIG:Debug>:Debug>
-)
-set(
SUBPROJECT_ARGS
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE}
-DCMAKE_INSTALL_PREFIX:PATH=${PROJECT_BINARY_DIR}/install_tree
@@ -77,50 +62,30 @@ set(
-DCMAKE_INSTALL_PREFIX:PATH=${PROJECT_BINARY_DIR}/examples
)
-## External dependencies
-
-if(NOT SKIP_TINYXML2)
- list(APPEND SUBPROJECT_ARGS -Dtinyxml2_ROOT:PATH=${PROJECT_BINARY_DIR}/install_temp)
-
- ExternalProject_Add(
- tinyxml2
- GIT_REPOSITORY "https://github.com/leethomason/tinyxml2"
- CMAKE_CACHE_ARGS ${COMMON_ARGS} ${EXT_LIBRARY_ARGS}
- INSTALL_DIR install_temp
- )
-else()
- list(APPEND SUBPROJECT_ARGS -Dtinyxml2_ROOT:PATH=${tinyxml2_ROOT})
-
- # Create a dummy target so CMake doesn't throw missing dependency errors.
- add_library(tinyxml2 INTERFACE)
-endif()
+## Subprojects
-if(NOT SKIP_MKPSXISO)
- ExternalProject_Add(
- mkpsxiso
- GIT_REPOSITORY "https://github.com/Lameguy64/mkpsxiso"
- CMAKE_CACHE_ARGS ${COMMON_ARGS} ${SUBPROJECT_ARGS}
- INSTALL_DIR install_tree
- DEPENDS tinyxml2
- )
-else()
- add_library(mkpsxiso INTERFACE)
+if(NOT EXISTS ${PROJECT_SOURCE_DIR}/tools/mkpsxiso/CMakeLists.txt)
+ message(FATAL_ERROR "The mkpsxiso directory is empty. Run 'git submodule update --init --recursive' to populate it.")
endif()
-## Subprojects
-
ExternalProject_Add(
- libpsn00b
- SOURCE_DIR ${PROJECT_SOURCE_DIR}/libpsn00b
+ tools
+ SOURCE_DIR ${PROJECT_SOURCE_DIR}/tools
CMAKE_CACHE_ARGS ${COMMON_ARGS} ${SUBPROJECT_ARGS}
INSTALL_DIR install_tree
)
ExternalProject_Add(
- tools
- SOURCE_DIR ${PROJECT_SOURCE_DIR}/tools
+ mkpsxiso
+ SOURCE_DIR ${PROJECT_SOURCE_DIR}/tools/mkpsxiso
CMAKE_CACHE_ARGS ${COMMON_ARGS} ${SUBPROJECT_ARGS}
INSTALL_DIR install_tree
- DEPENDS tinyxml2
+)
+ExternalProject_Add(
+ libpsn00b
+ SOURCE_DIR ${PROJECT_SOURCE_DIR}/libpsn00b
+ CMAKE_CACHE_ARGS ${COMMON_ARGS} ${SUBPROJECT_ARGS}
+ INSTALL_DIR install_tree
+ #DEPENDS tools
)
ExternalProject_Add(
examples
@@ -133,12 +98,21 @@ ExternalProject_Add(
# Install all files in the temporary installation tree, as well as static files
# from the source tree, when "cmake --install" is invoked.
-install(
- DIRECTORY ${PROJECT_BINARY_DIR}/install_tree/ # THE TRAILING SLASH IS IMPORTANT
- DESTINATION .
- COMPONENT sdk
- USE_SOURCE_PERMISSIONS
+foreach(
+ _subdir IN ITEMS
+ ${CMAKE_INSTALL_BINDIR}
+ ${CMAKE_INSTALL_LIBDIR}
+ ${CMAKE_INSTALL_DATADIR}
)
+ install(
+ # THE TRAILING SLASH IS IMPORTANT
+ DIRECTORY ${PROJECT_BINARY_DIR}/install_tree/${_subdir}/
+ DESTINATION ${_subdir}
+ COMPONENT sdk
+ USE_SOURCE_PERMISSIONS
+ )
+endforeach()
+
install(
DIRECTORY doc template
DESTINATION ${CMAKE_INSTALL_DATADIR}/psn00bsdk