diff options
| author | spicyjpeg <88942473+spicyjpeg@users.noreply.github.com> | 2021-09-12 19:39:06 +0200 |
|---|---|---|
| committer | spicyjpeg <88942473+spicyjpeg@users.noreply.github.com> | 2021-09-12 19:39:06 +0200 |
| commit | d4c6605a12d31e84d1cba2f5ef7329bcb99c8aaf (patch) | |
| tree | 666d5d508277cdb3e5a6d0c2d98398f5093ab5d3 /libpsn00b/CMakeLists.txt | |
| parent | c6548f077282f871bc22bd05595d3a1139f50a80 (diff) | |
| download | psn00bsdk-d4c6605a12d31e84d1cba2f5ef7329bcb99c8aaf.tar.gz | |
Migrated libpsn00b to CMake
Diffstat (limited to 'libpsn00b/CMakeLists.txt')
| -rw-r--r-- | libpsn00b/CMakeLists.txt | 69 |
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 +) |
