aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/CMakeLists.txt
diff options
context:
space:
mode:
authorspicyjpeg <88942473+spicyjpeg@users.noreply.github.com>2021-09-12 19:39:06 +0200
committerspicyjpeg <88942473+spicyjpeg@users.noreply.github.com>2021-09-12 19:39:06 +0200
commitd4c6605a12d31e84d1cba2f5ef7329bcb99c8aaf (patch)
tree666d5d508277cdb3e5a6d0c2d98398f5093ab5d3 /libpsn00b/CMakeLists.txt
parentc6548f077282f871bc22bd05595d3a1139f50a80 (diff)
downloadpsn00bsdk-d4c6605a12d31e84d1cba2f5ef7329bcb99c8aaf.tar.gz
Migrated libpsn00b to CMake
Diffstat (limited to 'libpsn00b/CMakeLists.txt')
-rw-r--r--libpsn00b/CMakeLists.txt69
1 files changed, 69 insertions, 0 deletions
diff --git a/libpsn00b/CMakeLists.txt b/libpsn00b/CMakeLists.txt
new file mode 100644
index 0000000..52914d3
--- /dev/null
+++ b/libpsn00b/CMakeLists.txt
@@ -0,0 +1,69 @@
+# libpsn00b build script
+# (C) 2021 spicyjpeg - MPL licensed
+
+cmake_minimum_required(VERSION 3.21)
+
+# ${PROJECT_SOURCE_DIR} is not available until project() is called.
+set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_LIST_DIR}/cmake/sdk.cmake)
+
+project(
+ libpsn00b
+ LANGUAGES C CXX ASM
+ DESCRIPTION "PSn00bSDK libraries"
+ HOMEPAGE_URL "http://lameguy64.net/?page=psn00bsdk"
+)
+
+if(NOT DEFINED PSN00BSDK_LIBGCC)
+ message(FATAL_ERROR "Failed to obtain information about the GCC toolchain. Check your toolchain settings.")
+elseif(PSN00BSDK_LIBGCC STREQUAL "PSN00BSDK_LIBGCC-NOTFOUND")
+ message(FATAL_ERROR "Failed to find libgcc in the GCC toolchain's files. Check your toolchain settings, or set the path to libgcc using -DPSN00BSDK_LIBGCC.")
+endif()
+
+## Libraries
+
+foreach(_library IN LISTS PSN00BSDK_LIBRARIES)
+ # libc needs special handling due to the different directory name.
+ if(${_library} STREQUAL "c")
+ set(_path ${PROJECT_SOURCE_DIR}/libc)
+ else()
+ set(_path ${PROJECT_SOURCE_DIR}/${_library})
+ endif()
+
+ file(
+ GLOB_RECURSE _sources
+ ${_path}/*.s
+ ${_path}/*.c
+ ${_path}/*.cpp
+ ${_path}/*.cxx
+ )
+
+ psn00bsdk_add_library(${_library} STATIC ${_sources})
+endforeach()
+
+# Extract libgcc's contents and merge them into libc after building.
+add_custom_command(
+ TARGET c POST_BUILD
+ COMMAND ${CMAKE_AR} x ${PSN00BSDK_LIBGCC}
+ COMMAND ${CMAKE_AR} rsuU $<TARGET_FILE:c> *.o
+ COMMENT "Merging libgcc contents into SDK libc"
+)
+
+## Installation
+
+install(
+ TARGETS ${PSN00BSDK_LIBRARIES} ${PSN00BSDK_VIRTUAL_TARGETS}
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/libpsn00b
+ EXPORT libpsn00b
+)
+install(
+ DIRECTORY cmake include ldscripts
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/libpsn00b
+)
+
+# Generate an import script, which will be used by the setup script to find the
+# libraries.
+install(
+ EXPORT libpsn00b
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/libpsn00b/cmake
+ #EXPORT_LINK_INTERFACE_LIBRARIES
+)