From c6548f077282f871bc22bd05595d3a1139f50a80 Mon Sep 17 00:00:00 2001
From: spicyjpeg <88942473+spicyjpeg@users.noreply.github.com>
Date: Sun, 12 Sep 2021 19:39:02 +0200
Subject: Added preliminary files for CMake/CPack support
---
CMakeLists.txt | 177 ++++++++++++++++++++++++++++++++++
cpack/convert_images.sh | 45 +++++++++
cpack/description.txt | 27 ++++++
cpack/fakeroot_fix.cmake | 32 ++++++
cpack/icon.ico | Bin 0 -> 194619 bytes
cpack/icon.svg | 164 +++++++++++++++++++++++++++++++
cpack/nsis_banner.bmp | Bin 0 -> 42622 bytes
cpack/nsis_banner.svg | 162 +++++++++++++++++++++++++++++++
cpack/nsis_header.bmp | Bin 0 -> 4220 bytes
cpack/nsis_header.svg | 66 +++++++++++++
cpack/uninstall.ico | Bin 0 -> 194619 bytes
cpack/uninstall.svg | 164 +++++++++++++++++++++++++++++++
cpack/welcome.txt | 3 +
libpsn00b/cmake/internal_setup.cmake | 158 ++++++++++++++++++++++++++++++
libpsn00b/cmake/sdk.cmake | 78 +++++++++++++++
libpsn00b/cmake/virtual_targets.cmake | 109 +++++++++++++++++++++
16 files changed, 1185 insertions(+)
create mode 100644 CMakeLists.txt
create mode 100644 cpack/convert_images.sh
create mode 100644 cpack/description.txt
create mode 100644 cpack/fakeroot_fix.cmake
create mode 100644 cpack/icon.ico
create mode 100644 cpack/icon.svg
create mode 100644 cpack/nsis_banner.bmp
create mode 100644 cpack/nsis_banner.svg
create mode 100644 cpack/nsis_header.bmp
create mode 100644 cpack/nsis_header.svg
create mode 100644 cpack/uninstall.ico
create mode 100644 cpack/uninstall.svg
create mode 100644 cpack/welcome.txt
create mode 100644 libpsn00b/cmake/internal_setup.cmake
create mode 100644 libpsn00b/cmake/sdk.cmake
create mode 100644 libpsn00b/cmake/virtual_targets.cmake
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..4cca098
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,177 @@
+# PSn00bSDK main build script
+# (C) 2021 spicyjpeg - MPL licensed
+
+# NOTE: CMake doesn't support using multiple toolchains in a single project,
+# so we can't use add_subdirectory() to build both the libraries and tools. A
+# 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)
+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"
+)
+
+# Including this without initializing at least one language throws a warning and
+# there's no way to mute it.
+include(GNUInstallDirs)
+
+# These are passed through to libpsn00b and the examples (they are defined in
+# the toolchain file).
+set(
+ PSN00BSDK_TC $ENV{PSN00BSDK_TC}
+ CACHE PATH "Path to the GCC toolchain's installation directory"
+)
+set(
+ PSN00BSDK_TARGET mipsel-unknown-elf
+ CACHE STRING "GCC toolchain target triplet"
+)
+
+set(
+ SKIP_DOWNLOAD OFF
+ CACHE BOOL "Skip downloading and building tinyxml2 and mkpsxiso"
+)
+set(
+ SKIP_EXAMPLES OFF
+ CACHE BOOL "Skip building SDK examples (which are never installed)"
+)
+
+# Forward some important variables to mkpsxiso and to the subprojects (they are
+# not inherited automatically as they are not environment variables). This also
+# sets all subprojects to "install" everything to a temporary directory in the
+# build tree, so they don't actually get installed until "cmake --install" is
+# invoked (ExternalProject_Add() runs the subprojects' install step at build
+# time).
+set(
+ SUBPROJECT_ARGS
+ -DPSN00BSDK_TC:PATH=${PSN00BSDK_TC}
+ -DPSN00BSDK_TARGET:STRING=${PSN00BSDK_TARGET}
+ -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${CMAKE_TOOLCHAIN_FILE}
+ -DCMAKE_INSTALL_PREFIX:PATH=${PROJECT_BINARY_DIR}/install_tree
+)
+set(
+ EXAMPLES_ARGS
+ -DPSN00BSDK_TC:PATH=${PSN00BSDK_TC}
+ -DPSN00BSDK_TARGET:STRING=${PSN00BSDK_TARGET}
+ -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${PROJECT_BINARY_DIR}/install_tree/${CMAKE_INSTALL_LIBDIR}/libpsn00b/cmake/sdk.cmake
+ -DCMAKE_INSTALL_PREFIX:PATH=${PROJECT_BINARY_DIR}/examples
+)
+
+## External dependencies
+
+if(NOT SKIP_DOWNLOAD)
+ 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 -DCMAKE_INSTALL_PREFIX:PATH=${PROJECT_BINARY_DIR}/install_temp
+ INSTALL_DIR install_temp
+ )
+ ExternalProject_Add(
+ mkpsxiso
+ # IMPORTANT TODO: migrate to Lameguy64/mkpsxiso once PR #18 is merged
+ GIT_REPOSITORY "https://github.com/spicyjpeg/mkpsxiso"
+ GIT_TAG cmake
+ #GIT_REPOSITORY "https://github.com/Lameguy64/mkpsxiso"
+ CMAKE_CACHE_ARGS ${SUBPROJECT_ARGS}
+ INSTALL_DIR install_tree
+ DEPENDS tinyxml2
+ )
+else()
+ list(APPEND SUBPROJECT_ARGS -Dtinyxml2_ROOT:PATH=${tinyxml2_ROOT})
+
+ # Create dummy targets so CMake doesn't throw missing dependency errors.
+ add_library(tinyxml2 INTERFACE)
+ add_library(mkpsxiso INTERFACE)
+endif()
+
+## Subprojects
+
+ExternalProject_Add(
+ libpsn00b
+ SOURCE_DIR ${PROJECT_SOURCE_DIR}/libpsn00b
+ CMAKE_CACHE_ARGS ${SUBPROJECT_ARGS}
+ INSTALL_DIR install_tree
+)
+ExternalProject_Add(
+ tools
+ SOURCE_DIR ${PROJECT_SOURCE_DIR}/tools
+ CMAKE_CACHE_ARGS ${SUBPROJECT_ARGS}
+ INSTALL_DIR install_tree
+ DEPENDS tinyxml2
+)
+ExternalProject_Add(
+ examples
+ SOURCE_DIR ${PROJECT_SOURCE_DIR}/examples
+ CMAKE_CACHE_ARGS ${EXAMPLES_ARGS}
+ INSTALL_DIR install_tree
+ DEPENDS libpsn00b tools mkpsxiso
+ EXCLUDE_FROM_ALL ${SKIP_EXAMPLES}
+)
+
+# 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 .
+ USE_SOURCE_PERMISSIONS
+)
+install(
+ DIRECTORY doc template
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/psn00bsdk
+)
+
+## CPack configuration
+
+# TODO: add a macOS installer and related options
+if(WIN32)
+ set(CPACK_GENERATOR ZIP NSIS)
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(CPACK_GENERATOR ZIP DEB RPM)
+else()
+ set(CPACK_GENERATOR ZIP)
+endif()
+
+set(CPACK_PACKAGE_DIRECTORY ${PROJECT_BINARY_DIR}/cpack)
+set(CPACK_PACKAGE_NAME PSn00bSDK)
+set(CPACK_PACKAGE_VENDOR Lameguy64)
+set(CPACK_PACKAGE_CONTACT Lameguy64)
+set(CPACK_PACKAGE_ICON ${PROJECT_SOURCE_DIR}/cpack/icon.ico)
+set(CPACK_PACKAGE_DESCRIPTION_FILE ${PROJECT_SOURCE_DIR}/cpack/description.txt)
+set(CPACK_RESOURCE_FILE_WELCOME ${PROJECT_SOURCE_DIR}/cpack/welcome.txt)
+set(CPACK_RESOURCE_FILE_README ${PROJECT_SOURCE_DIR}/README.md)
+set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE.md)
+set(CPACK_PRE_BUILD_SCRIPTS ${PROJECT_SOURCE_DIR}/cpack/fakeroot_fix.cmake)
+
+
+set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.28), cmake (>= 3.21), gcc-mipsel-unknown-elf")
+set(CPACK_DEBIAN_PACKAGE_SUGGESTS "git")
+set(CPACK_DEBIAN_PACKAGE_SECTION devel)
+set(CPACK_RPM_PACKAGE_REQUIRES "cmake >= 3.21, gcc-mipsel-unknown-elf")
+set(CPACK_RPM_PACKAGE_SUGGESTS "git")
+#set(CPACK_RPM_PACKAGE_RELOCATABLE ON)
+
+set(CPACK_NSIS_MUI_ICON ${PROJECT_SOURCE_DIR}/cpack/icon.ico)
+set(CPACK_NSIS_MUI_UNIICON ${PROJECT_SOURCE_DIR}/cpack/uninstall.ico)
+set(CPACK_NSIS_MUI_HEADERIMAGE ${PROJECT_SOURCE_DIR}/cpack/nsis_header.bmp)
+set(CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP ${PROJECT_SOURCE_DIR}/cpack/nsis_banner.bmp)
+set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP ${PROJECT_SOURCE_DIR}/cpack/nsis_banner.bmp)
+set(CPACK_NSIS_BRANDING_TEXT "PSn00bSDK - Meido-Tek Productions")
+set(CPACK_NSIS_URL_INFO_ABOUT "${PROJECT_HOMEPAGE_URL}")
+set(CPACK_NSIS_MODIFY_PATH ON)
+set(
+ CPACK_NSIS_MENU_LINKS
+ "${PROJECT_HOMEPAGE_URL}" "About PSn00bSDK"
+ "https://github.com/Lameguy64/PSn00bSDK" "GitHub repo"
+)
+
+# This will generate a CPack configuration file and add a "package" target to
+# launch CPack.
+include(CPack)
diff --git a/cpack/convert_images.sh b/cpack/convert_images.sh
new file mode 100644
index 0000000..3816dec
--- /dev/null
+++ b/cpack/convert_images.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+# This script generates Windows bitmaps from the SVGs in this directory. The
+# bitmaps are displayed by the NSIS installers generated using CPack. Inkscape
+# and ImageMagick must be installed for this script to work.
+
+INDEXED_SIZES=(16 24 32 48)
+RGB_ONLY_SIZES=(64 96 128 256)
+DITHER_OPTIONS="-dither riemersma"
+OUTPUT_OPTIONS="+compress -strip"
+
+svg_to_bitmap() {
+ inkscape -z -e rgb.png $1
+
+ # There seems to be no way to tell ImageMagick to generate an 8-bit indexed
+ # BMP directly, so the image has to be converted to indexed PNG first. NSIS
+ # seems to reject all BMP versions other than "bmp3".
+ convert $DITHER_OPTIONS -colors 256 +remap rgb.png png8:i8.png
+ convert i8.png $OUTPUT_OPTIONS bmp3:$2
+ rm -f rgb.png i8.png
+}
+
+# https://stackoverflow.com/a/52636645
+svg_to_icon() {
+ for size in ${INDEXED_SIZES[@]} ${RGB_ONLY_SIZES[@]}; do
+ inkscape -z -e $size.png -w $size -h $size $1
+ done
+
+ # Windows expects some of the smaller sizes to be available in 4- and 8-bit
+ # indexed color formats, as well as RGB.
+ for size in ${INDEXED_SIZES[@]}; do
+ convert $DITHER_OPTIONS -colors 256 +remap $size.png png8:$size-i8.png
+ convert $DITHER_OPTIONS -colors 16 +remap $size.png png8:$size-i4.png
+ done
+
+ icons="${INDEXED_SIZES[@]/%/.png} ${INDEXED_SIZES[@]/%/-i8.png} ${INDEXED_SIZES[@]/%/-i4.png} ${RGB_ONLY_SIZES[@]/%/.png}"
+ convert $icons $OUTPUT_OPTIONS $2
+ rm -f $icons
+}
+
+rm -f *.ico *.bmp
+
+svg_to_icon icon.svg icon.ico
+svg_to_icon uninstall.svg uninstall.ico
+svg_to_bitmap nsis_banner.svg nsis_banner.bmp
+svg_to_bitmap nsis_header.svg nsis_header.bmp
diff --git a/cpack/description.txt b/cpack/description.txt
new file mode 100644
index 0000000..240b7d1
--- /dev/null
+++ b/cpack/description.txt
@@ -0,0 +1,27 @@
+PSn00bSDK is a 100% free and open source SDK project for the original Sony
+PlayStation for developing homebrew applications and games for the console
+100% freely. This SDK can be used for freeware, commercial, and open source
+homebrew projects.
+
+The SDK is composed mainly of libraries (libpsn00b) and some utilities that
+provide a basic framework for developing software for the PlayStation
+hardware, the compiler is separate (GCC) and should be acquired from GNU.
+The library API is intentionally written to resemble the library API of the
+official libraries as closely as possible. This design decision is not only
+for familiarity reasons to experienced programmers, but also so that existing
+sample code and tutorials would still apply to this SDK, as well as making
+the process of porting over existing homebrew originally made with official
+SDKs easier with minimal modification, provided it doesn't use libgs.
+
+PSn00bSDK is currently a work in progress and cannot really be considered
+production ready, but what is currently implemented should be enough to
+produce some interesting homebrew with the SDK, especially with its extensive
+support for the GPU and GTE hardware. There's no reason not to fully support
+hardware features of a target platform when said hardware features have been
+fully documented for years (nocash's PSX specs document in this case).
+
+Most of libpsn00b is written mostly in MIPS assembly, moreso functions that
+interface with the hardware. Many of the standard C functions are implemented
+in custom MIPS assembly instead of equivalents found in the BIOS ROM, for both
+stability (the BIOS libc implementation of the PlayStation is actually buggy)
+and performance reasons.
diff --git a/cpack/fakeroot_fix.cmake b/cpack/fakeroot_fix.cmake
new file mode 100644
index 0000000..e34baa0
--- /dev/null
+++ b/cpack/fakeroot_fix.cmake
@@ -0,0 +1,32 @@
+# This script works around a bug in CPack's DEB/RPM generator, which causes
+# files installed by subprojects (not by the main CMake script) to end up in
+# packages alongside the "real" installation directory. It probably happens due
+# to CMake running under fakeroot (when invoked by CPack to prepare the files
+# to be packaged) and referencing absolute paths, which would explain why the
+# entire build directory tree is replicated inside the packages. What this
+# script does is simply finding and deleting all directories that do not match
+# the installation prefix before CPack generates the package.
+
+cmake_minimum_required(VERSION 3.21)
+
+set(_prefix ${CPACK_TEMPORARY_INSTALL_DIRECTORY}${CPACK_PACKAGING_INSTALL_PREFIX})
+
+file(
+ GLOB_RECURSE _entries
+ LIST_DIRECTORIES ON
+ ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/*
+)
+
+foreach(_entry IN LISTS _entries)
+ # Skip the entry if it (or its parent directory) has already been deleted.
+ if(NOT EXISTS ${_entry})
+ continue()
+ endif()
+
+ # Delete anything whose path doesn't start with the expected prefix.
+ string(FIND ${_entry} ${_prefix} _index)
+ if(NOT _index EQUAL 0)
+ message(NOTICE "Deleting unneeded entry from package: ${_entry}")
+ file(REMOVE_RECURSE ${_entry})
+ endif()
+endforeach()
diff --git a/cpack/icon.ico b/cpack/icon.ico
new file mode 100644
index 0000000..6759d23
Binary files /dev/null and b/cpack/icon.ico differ
diff --git a/cpack/icon.svg b/cpack/icon.svg
new file mode 100644
index 0000000..70d400d
--- /dev/null
+++ b/cpack/icon.svg
@@ -0,0 +1,164 @@
+
+
diff --git a/cpack/nsis_banner.bmp b/cpack/nsis_banner.bmp
new file mode 100644
index 0000000..831c8f9
Binary files /dev/null and b/cpack/nsis_banner.bmp differ
diff --git a/cpack/nsis_banner.svg b/cpack/nsis_banner.svg
new file mode 100644
index 0000000..499bb94
--- /dev/null
+++ b/cpack/nsis_banner.svg
@@ -0,0 +1,162 @@
+
+
diff --git a/cpack/nsis_header.bmp b/cpack/nsis_header.bmp
new file mode 100644
index 0000000..d677e8c
Binary files /dev/null and b/cpack/nsis_header.bmp differ
diff --git a/cpack/nsis_header.svg b/cpack/nsis_header.svg
new file mode 100644
index 0000000..19ae01a
--- /dev/null
+++ b/cpack/nsis_header.svg
@@ -0,0 +1,66 @@
+
+
diff --git a/cpack/uninstall.ico b/cpack/uninstall.ico
new file mode 100644
index 0000000..6759d23
Binary files /dev/null and b/cpack/uninstall.ico differ
diff --git a/cpack/uninstall.svg b/cpack/uninstall.svg
new file mode 100644
index 0000000..70d400d
--- /dev/null
+++ b/cpack/uninstall.svg
@@ -0,0 +1,164 @@
+
+
diff --git a/cpack/welcome.txt b/cpack/welcome.txt
new file mode 100644
index 0000000..e024336
--- /dev/null
+++ b/cpack/welcome.txt
@@ -0,0 +1,3 @@
+This installer will set up PSn00bSDK, including prebuilt libraries, CMake scripts as well as several command-line utilities for PlayStation 1 homebrew development.
+
+NOTE: CMake and the GCC toolchain must be installed separately.
diff --git a/libpsn00b/cmake/internal_setup.cmake b/libpsn00b/cmake/internal_setup.cmake
new file mode 100644
index 0000000..e9423a4
--- /dev/null
+++ b/libpsn00b/cmake/internal_setup.cmake
@@ -0,0 +1,158 @@
+# PSn00bSDK internal setup script for CMake
+# (C) 2021 spicyjpeg - MPL licensed
+
+# This script is included automatically when using the toolchain file and
+# defines helper functions.
+
+cmake_minimum_required(VERSION 3.21)
+include(GNUInstallDirs)
+
+## Settings (can be overridden by projects)
+
+set(PSN00BSDK_EXECUTABLE_SUFFIX ".exe")
+set(PSN00BSDK_SHARED_LIBRARY_SUFFIX ".dll")
+set(PSN00BSDK_SYMBOL_MAP_SUFFIX ".map")
+
+## SDK libraries
+
+# DON'T CHANGE THE ORDER or you'll break the libraries' internal dependencies.
+set(PSN00BSDK_LIBRARIES psxgpu psxgte psxspu psxcd psxsio psxetc psxapi lzp c)
+
+include(${CMAKE_CURRENT_LIST_DIR}/libpsn00b.cmake OPTIONAL)
+if(NOT TARGET psn00bsdk_common)
+ include(${CMAKE_CURRENT_LIST_DIR}/virtual_targets.cmake)
+endif()
+
+# Use the toolchain path to find libgcc (used to build libpsn00b). Of course
+# different installers, packages and distros have different opinions when it
+# comes to deciding where to install toolchains, so we have to bruteforce
+# multiple combinations of paths.
+if(CMAKE_C_COMPILER_VERSION)
+ string(REGEX MATCH "^([0-9]+)\." _dummy ${CMAKE_C_COMPILER_VERSION})
+
+ find_library(
+ PSN00BSDK_LIBGCC gcc
+ HINTS
+ ${PSN00BSDK_TC}/lib/gcc-cross/${PSN00BSDK_TARGET}/${CMAKE_C_COMPILER_VERSION}
+ ${PSN00BSDK_TC}/lib/gcc-cross/${PSN00BSDK_TARGET}/${CMAKE_MATCH_1}
+ ${PSN00BSDK_TC}/lib/gcc/${PSN00BSDK_TARGET}/${CMAKE_C_COMPILER_VERSION}
+ ${PSN00BSDK_TC}/lib/gcc/${PSN00BSDK_TARGET}/${CMAKE_MATCH_1}
+ ${PSN00BSDK_TC}/../lib/gcc-cross/${PSN00BSDK_TARGET}/${CMAKE_C_COMPILER_VERSION}
+ ${PSN00BSDK_TC}/../lib/gcc-cross/${PSN00BSDK_TARGET}/${CMAKE_MATCH_1}
+ ${PSN00BSDK_TC}/../lib/gcc/${PSN00BSDK_TARGET}/${CMAKE_C_COMPILER_VERSION}
+ ${PSN00BSDK_TC}/../lib/gcc/${PSN00BSDK_TARGET}/${CMAKE_MATCH_1}
+ NO_DEFAULT_PATH
+ DOC "Path to libgcc (bundled with the GCC toolchain)"
+ )
+endif()
+
+## Tools
+
+set(
+ PSN00BSDK_TOOLS
+ ${CMAKE_CURRENT_LIST_DIR}/../../../${CMAKE_INSTALL_BINDIR}
+ ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}
+)
+
+find_program(ELF2X elf2x HINTS ${PSN00BSDK_TOOLS})
+find_program(ELF2CPE elf2cpe HINTS ${PSN00BSDK_TOOLS})
+find_program(SMXLINK elf2x HINTS ${PSN00BSDK_TOOLS})
+find_program(LZPACK lzpack HINTS ${PSN00BSDK_TOOLS})
+find_program(MKPSXISO mkpsxiso HINTS ${PSN00BSDK_TOOLS})
+
+## Helper functions for executables
+
+set(PSN00BSDK_INCLUDE ${CMAKE_CURRENT_LIST_DIR}/../include)
+set(PSN00BSDK_LDSCRIPTS ${CMAKE_CURRENT_LIST_DIR}/../ldscripts)
+
+# psn00bsdk_add_executable(
+#
+# [EXCLUDE_FROM_ALL]
+# ...
+# )
+function(psn00bsdk_add_executable name type)
+ string(TOLOWER ${type} _type)
+ if(NOT ${_type} MATCHES "^(static|dynamic)$")
+ message(FATAL_ERROR "Invalid executable type: ${type} (must be STATIC or DYNAMIC)")
+ endif()
+
+ add_executable (${name} ${ARGN})
+ target_link_libraries(${name} psn00bsdk_${_type}_exe)
+ set_target_properties(${name} PROPERTIES PREFIX "" SUFFIX ".elf")
+ target_link_options (${name} PRIVATE -T${PSN00BSDK_LDSCRIPTS}/exe.ld)
+
+ target_include_directories(${name} PRIVATE ${PSN00BSDK_INCLUDE})
+
+ # Add post-build steps to generate the .exe and symbol map once the
+ # executable is built. CMake 3.21 added support for target-dependent
+ # generator expressions (catchy name lol) in add_custom_command(), so I'm
+ # making heavy use of those here.
+ add_custom_command(
+ TARGET ${name} POST_BUILD
+ COMMAND ${ELF2X} -q ${name}.elf ${name}${PSN00BSDK_EXECUTABLE_SUFFIX}
+ COMMAND ${TOOLCHAIN_NM} -f posix -l -n ${name}.elf $${name}${PSN00BSDK_SYMBOL_MAP_SUFFIX}
+ BYPRODUCTS ${name}${PSN00BSDK_EXECUTABLE_SUFFIX} ${name}${PSN00BSDK_SYMBOL_MAP_SUFFIX}
+ )
+endfunction()
+
+# psn00bsdk_add_library(
+#
+# [EXCLUDE_FROM_ALL]
+# ...
+# )
+# Note that SHARED and MODULE have the same meaning (both will create a DLL).
+# SDK libraries are NOT statically linked in by default; if you need to link
+# something, use target_link_libraries() manually.
+function(psn00bsdk_add_library name type)
+ string(TOUPPER ${type} _type_upper)
+ string(TOLOWER ${type} _type)
+ if(NOT ${_type} MATCHES "^(static|object|shared|module)$")
+ message(FATAL_ERROR "Invalid library type: ${type} (must be STATIC, OBJECT, SHARED or MODULE)")
+ endif()
+
+ add_library (${name} ${_type_upper} ${ARGN})
+ target_link_libraries(${name} psn00bsdk_${_type}_lib)
+
+ target_include_directories(${name} PRIVATE ${PSN00BSDK_INCLUDE})
+
+ if(${_type} MATCHES "^(shared|module)$")
+ set_target_properties(${name} PROPERTIES PREFIX "" SUFFIX ".so")
+ target_link_options (${name} PRIVATE -T${PSN00BSDK_LDSCRIPTS}/dll.ld)
+
+ # Add a post-build step to dump the DLL's raw contents into a new file
+ # separate from the built ELF.
+ add_custom_command(
+ TARGET ${name} POST_BUILD
+ COMMAND ${CMAKE_OBJCOPY} -O binary ${name}.so ${name}${PSN00BSDK_SHARED_LIBRARY_SUFFIX}
+ BYPRODUCTS ${name}${PSN00BSDK_SHARED_LIBRARY_SUFFIX}
+ )
+ else()
+ set_target_properties(${name} PROPERTIES PREFIX "lib" SUFFIX ".a")
+
+ # Remove virtual target dependencies to make sure linking against the
+ # library does not also propagate static library flags.
+ set_target_properties(${name} PROPERTIES INTERFACE_LINK_LIBRARIES "")
+ endif()
+endfunction()
+
+# psn00bsdk_add_cd_image(
+#
+#
+#
+# [DEPENDS ...]
+# [additional options passed to add_custom_target()]
+# )
+function(psn00bsdk_add_cd_image name image_name config_file)
+ set(CD_IMAGE_NAME ${image_name})
+ configure_file(${config_file} _gen_${config_file})
+
+ add_custom_target(
+ ${name} ALL
+ COMMAND ${MKPSXISO} -y -q _gen_${config_file}
+ BYPRODUCTS ${image_name}.bin ${image_name}.cue
+ COMMENT "Building CD image ${image_name}"
+ ${ARGN}
+ )
+endfunction()
+
+## Helper functions for assets (TODO)
diff --git a/libpsn00b/cmake/sdk.cmake b/libpsn00b/cmake/sdk.cmake
new file mode 100644
index 0000000..82e921c
--- /dev/null
+++ b/libpsn00b/cmake/sdk.cmake
@@ -0,0 +1,78 @@
+# PSn00bSDK toolchain setup file for CMake
+# (C) 2021 spicyjpeg - MPL licensed
+
+cmake_minimum_required(VERSION 3.21)
+
+set(
+ PSN00BSDK_TC $ENV{PSN00BSDK_TC}
+ CACHE PATH "Path to the GCC toolchain's installation directory"
+)
+set(
+ PSN00BSDK_TARGET mipsel-unknown-elf
+ CACHE STRING "GCC toolchain target triplet"
+)
+
+## CMake configuration
+
+set(CMAKE_SYSTEM_NAME PlayStation)
+set(CMAKE_SYSTEM_PROCESSOR mipsel)
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+#set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+
+# Tell CMake not to run the linker when compiling test programs. This dodges
+# missing C++ standard library errors.
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+
+## Toolchain path setup
+
+# Attempt to find GCC. PSN00BSDK_TC can be left unset if the toolchain can be
+# found in the PATH environment variable.
+find_program(
+ _gcc ${PSN00BSDK_TARGET}-gcc
+ HINTS
+ ${PSN00BSDK_TC}/bin
+ ${PSN00BSDK_TC}/../bin
+ ${CMAKE_CURRENT_LIST_DIR}/../../../${PSN00BSDK_TARGET}/bin
+ PATHS
+ "C:/Program Files/${PSN00BSDK_TARGET}/bin"
+ "C:/${PSN00BSDK_TARGET}/bin"
+ /usr/local/${PSN00BSDK_TARGET}/bin
+ /usr/${PSN00BSDK_TARGET}/bin
+ NO_CACHE REQUIRED
+)
+cmake_path(GET _gcc PARENT_PATH _bin)
+cmake_path(GET _bin PARENT_PATH _toolchain)
+
+# Overwrite the empty cache entry, so it won't have to be found again.
+if(NOT IS_DIRECTORY PSN00BSDK_TC)
+ set(
+ PSN00BSDK_TC ${_toolchain}
+ CACHE PATH "Path to the GCC toolchain's installation directory"
+ FORCE
+ )
+endif()
+
+## Toolchain executables
+
+set(_prefix ${_bin}/${PSN00BSDK_TARGET})
+
+set(CMAKE_ASM_COMPILER ${_prefix}-gcc${CMAKE_EXECUTABLE_SUFFIX})
+set(CMAKE_C_COMPILER ${_prefix}-gcc${CMAKE_EXECUTABLE_SUFFIX})
+set(CMAKE_CXX_COMPILER ${_prefix}-g++${CMAKE_EXECUTABLE_SUFFIX})
+set(CMAKE_AR ${_prefix}-ar${CMAKE_EXECUTABLE_SUFFIX})
+set(CMAKE_LINKER ${_prefix}-ld${CMAKE_EXECUTABLE_SUFFIX})
+set(CMAKE_RANLIB ${_prefix}-ranlib${CMAKE_EXECUTABLE_SUFFIX})
+set(CMAKE_OBJCOPY ${_prefix}-objcopy${CMAKE_EXECUTABLE_SUFFIX})
+set(CMAKE_SIZE ${_prefix}-size${CMAKE_EXECUTABLE_SUFFIX})
+set(CMAKE_STRIP ${_prefix}-strip${CMAKE_EXECUTABLE_SUFFIX})
+set(TOOLCHAIN_NM ${_prefix}-nm${CMAKE_EXECUTABLE_SUFFIX})
+
+## SDK setup
+
+# We can't set up the SDK here as the find_*() functions may fail if they are
+# called before project(). We can however set a script to be executed right
+# after project() is invoked.
+set(CMAKE_PROJECT_INCLUDE ${CMAKE_CURRENT_LIST_DIR}/internal_setup.cmake)
diff --git a/libpsn00b/cmake/virtual_targets.cmake b/libpsn00b/cmake/virtual_targets.cmake
new file mode 100644
index 0000000..df1df79
--- /dev/null
+++ b/libpsn00b/cmake/virtual_targets.cmake
@@ -0,0 +1,109 @@
+# libpsn00b interface targets
+# (C) 2021 spicyjpeg - MPL licensed
+
+# This script creates several "virtual" targets (psn00bsdk_*) that set include
+# directories and compiler flags when a target is linked against them. These
+# all end up in the autogenerated libpsn00b setup script after installation,
+# so this file is only included when building libpsn00b.
+
+# The following targets are currently defined:
+# - psn00bsdk_common
+# - psn00bsdk_object_lib (same as psn00bsdk_common)
+# - psn00bsdk_static_exe
+# - psn00bsdk_dynamic_exe
+# - psn00bsdk_static_lib
+# - psn00bsdk_shared_lib
+# - psn00bsdk_module_lib (same as psn00bsdk_shared_lib)
+
+include(GNUInstallDirs)
+
+set(PSN00BSDK_VIRTUAL_TARGETS "")
+
+macro(_add_interface_target name)
+ add_library(${name} INTERFACE)
+ list(APPEND PSN00BSDK_VIRTUAL_TARGETS ${name})
+
+ target_compile_options(
+ ${name} INTERFACE
+ ${_aflags}
+ $<$:${_cflags}>
+ $<$:${_cxxflags}>
+ )
+ target_link_options (${name} INTERFACE ${_ldflags})
+ target_link_libraries(${name} INTERFACE ${ARGN})
+endmacro()
+
+macro(_add_alias_target name)
+ #add_library(${name} ALIAS ${ARGN})
+ add_library(${name} INTERFACE)
+ list(APPEND PSN00BSDK_VIRTUAL_TARGETS ${name})
+
+ target_link_libraries(${name} INTERFACE ${ARGN})
+endmacro()
+
+# Options common to all target types:
+# - Define PLAYSTATION=1 and set include directories
+# - Optimize for MIPS R3000
+# - Inject zero checks into division operations (will throw breaks)
+# - All standard libraries (including libgcc) disabled
+# - Put all symbols into separate sections when building
+# - C++ features that require runtime support disabled
+# - Unused section stripping enabled
+set(_aflags -msoft-float -march=r3000 -mtune=r3000 -mabi=32)
+set(_cflags -mdivide-breaks -O2 -ffreestanding -fno-builtin -nostdlib -fdata-sections -ffunction-sections -fsigned-char -fno-strict-overflow -fdiagnostics-color=always)
+set(_cxxflags -fno-exceptions -fno-rtti -fno-unwind-tables -fno-threadsafe-statics -fno-use-cxa-atexit)
+set(_ldflags -nostdlib -Wl,-gc-sections)
+
+_add_interface_target(psn00bsdk_common)
+_add_alias_target (psn00bsdk_object_lib psn00bsdk_common)
+
+target_compile_definitions(
+ psn00bsdk_common INTERFACE
+ PLAYSTATION=1
+ $<$:DEBUG=1>
+)
+
+# Options for executables without support for dynamic linking:
+# - Position-independent code disabled
+# - GP-relative addressing enabled only for local symbols
+# - ABI-compatible calls disabled (incompatible with GP-relative addr)
+set(_aflags -G8)
+set(_cflags -mno-abicalls -mgpopt -mno-extern-sdata)
+set(_cxxflags)
+set(_ldflags -G8 -static)
+
+_add_interface_target(psn00bsdk_static_exe psn00bsdk_common ${PSN00BSDK_LIBRARIES})
+
+# Options for executables with support for dynamic linking:
+# - Position-independent code disabled
+# - GP-relative addressing disabled
+# - ABI-compatible calls disabled (must be performed manually)
+set(_aflags -G0)
+set(_cflags -mno-abicalls -mno-gpopt)
+set(_cxxflags)
+set(_ldflags -G0 -static)
+
+_add_interface_target(psn00bsdk_dynamic_exe psn00bsdk_common ${PSN00BSDK_LIBRARIES})
+
+# Options for static libraries:
+# - GP-relative addressing disabled
+# - ABI-compatible calls disabled
+# - Local stripping enabled
+set(_aflags -G0 -Wa,--strip-local-absolute)
+set(_cflags -mno-abicalls -mno-gpopt)
+set(_cxxflags)
+set(_ldflags)
+
+_add_interface_target(psn00bsdk_static_lib psn00bsdk_common)
+
+# Options for dynamically-loaded libraries:
+# - Position-independent code enabled
+# - GP-relative addressing disabled (incompatible with ABI calls)
+# - ABI-compatible calls enabled
+set(_aflags -G0)
+set(_cflags -mabicalls -mshared -mno-gpopt -fPIC)
+set(_cxxflags)
+set(_ldflags -G0 -shared)
+
+_add_interface_target(psn00bsdk_shared_lib psn00bsdk_common)
+_add_alias_target (psn00bsdk_module_lib psn00bsdk_shared_lib)
--
cgit v1.2.3
From d4c6605a12d31e84d1cba2f5ef7329bcb99c8aaf Mon Sep 17 00:00:00 2001
From: spicyjpeg <88942473+spicyjpeg@users.noreply.github.com>
Date: Sun, 12 Sep 2021 19:39:06 +0200
Subject: Migrated libpsn00b to CMake
---
libpsn00b/CMakeLists.txt | 69 +++++++++++++
libpsn00b/include/lzp/lzp.h | 223 ++++++++++++++++++++++++++++++++++++++++++
libpsn00b/include/lzp/lzqlp.h | 26 +++++
libpsn00b/libc/makefile | 61 ------------
libpsn00b/lzp/makefile | 59 -----------
libpsn00b/makefile | 23 -----
libpsn00b/psxapi/makefile | 61 ------------
libpsn00b/psxcd/makefile | 59 -----------
libpsn00b/psxetc/dl.c | 2 +-
libpsn00b/psxetc/makefile | 59 -----------
libpsn00b/psxgpu/makefile | 59 -----------
libpsn00b/psxgte/makefile | 59 -----------
libpsn00b/psxsio/makefile | 59 -----------
libpsn00b/psxspu/makefile | 59 -----------
libpsn00b/readme.txt | 2 +-
15 files changed, 320 insertions(+), 560 deletions(-)
create mode 100644 libpsn00b/CMakeLists.txt
create mode 100644 libpsn00b/include/lzp/lzp.h
create mode 100644 libpsn00b/include/lzp/lzqlp.h
delete mode 100644 libpsn00b/libc/makefile
delete mode 100644 libpsn00b/lzp/makefile
delete mode 100644 libpsn00b/makefile
delete mode 100644 libpsn00b/psxapi/makefile
delete mode 100644 libpsn00b/psxcd/makefile
delete mode 100644 libpsn00b/psxetc/makefile
delete mode 100644 libpsn00b/psxgpu/makefile
delete mode 100644 libpsn00b/psxgte/makefile
delete mode 100644 libpsn00b/psxsio/makefile
delete mode 100644 libpsn00b/psxspu/makefile
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 $ *.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
+)
diff --git a/libpsn00b/include/lzp/lzp.h b/libpsn00b/include/lzp/lzp.h
new file mode 100644
index 0000000..ffd7933
--- /dev/null
+++ b/libpsn00b/include/lzp/lzp.h
@@ -0,0 +1,223 @@
+/*! \file lzp.h
+ * \brief Main library header
+ */
+
+/*! \mainpage
+ * \version 0.20b
+ * \author John Wilbert 'Lameguy64' Villamor
+ *
+ * \section creditsSection Credits
+ * - LZ77 data compression/decompression routines based from Ilya Muravyov's
+ * crush.cpp released under public domain. Refined and ported to C by Lameguy64.
+ * - CRC calculation routines based from Lammert Bies' lib_crc routines.
+ *
+ */
+
+#ifndef _LZPACK_H
+#define _LZPACK_H
+
+#include
+#ifdef _WIN32
+#include
+#endif
+
+/*! \addtogroup crcBaseRemainders CRC Base Remainder Values
+ * @{
+ */
+//! Initial remainder value for lzCRC16()
+#define LZP_CRC16_REMAINDER 0x0000
+//! Initial remainder value for lzCRC32()
+#define LZP_CRC32_REMAINDER 0xFFFFFFFF
+/*! @} */
+
+
+/*! \addtogroup compLevels Compression Levels
+ * \brief Compression levels for the lzCompress() function.
+ * @{
+ */
+//! Minimal (but fast) compression
+#define LZP_COMPRESS_FAST 0
+//! Normal compression level
+#define LZP_COMPRESS_NORMAL 1
+//! Maximum compression level
+#define LZP_COMPRESS_MAX 2
+/*! @} */
+
+
+/*! \addtogroup libraryErrorCodes Library Error Codes
+ * @{
+ */
+//! No error
+#define LZP_ERR_NONE 0
+//! Decompression error
+#define LZP_ERR_DECOMPRESS -1
+//! Not a valid LZP/QLP/PCK archive
+#define LZP_ERR_INVALID_PACK -2
+//! File not found
+#define LZP_ERR_NOTFOUND -3
+//! CRC check mismatch (data corruption)
+#define LZP_ERR_CRC_MISMATCH -4
+/*! @} */
+
+
+//! Header structure of an LZP format archive file
+typedef struct {
+
+ //! File ID (must always be 'LZP')
+ char id[3];
+ //! File count
+ u_char numFiles;
+
+} LZP_HEAD;
+
+//! File entry structure for an LZP format archive file
+typedef struct {
+
+ //! File name
+ char fileName[16];
+ //! CRC32 checksum of file
+ u_int crc;
+ //! Original size of file in bytes
+ u_int fileSize;
+ //! Compressed size of file
+ u_int packedSize;
+ //! File data offset
+ u_int offset;
+
+} LZP_FILE;
+
+
+// Function prototypes
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*! \addtogroup compressFuncs Data Compression and Decompression Functions
+ * \brief Functions to compress and decompress data.
+ * @{
+ */
+
+/*! Compress a block of data.
+ *
+ * \details This function compresses a specified block of data in LZ77 encoding.
+ * Depending on the size of the input data and speed of the computer, compression
+ * may take a while to complete.
+ *
+ * \param[out] *outBuff Pointer to buffer to store compressed data.
+ * \param[in] *inBuff Pointer to data to compress.
+ * \param[in] inSize Size of data to compress in bytes.
+ * \param[in] level Compression level (see \ref compLevels).
+ *
+ * \returns The size of the compressed data in bytes.
+ */
+int lzCompress(void* outBuff, void* inBuff, int inSize, int level);
+
+/*! Decompress a compressed block of data.
+ *
+ * \details Decompressed a compressed block of data produced by lzCompress(). It cannot
+ * return the decompressed size of the data ahead of time so you must preserve the decompressed
+ * size of the data yourself.
+ *
+ * \note The decompression algorithm used in this function is completely independent
+ * of the compression settings set by lzSetHashSizes() before compressing the data with
+ * lzCompress().
+ *
+ * \param[out] *outBuff Pointer to buffer to store decompressed data.
+ * \param[in] *inBuff Pointer to compressed data to decompress.
+ * \param[in] inSize Compressed data size in bytes.
+ *
+ * \returns Size of decompressed data in bytes or LZP_ERR_DECOMPRESS if a
+ * decompression error occurred.
+ */
+int lzDecompress(void* outBuff, void* inBuff, int inSize);
+
+int lzDecompressLen(void* outBuff, int outSize, void* inBuff, int inSize);
+
+/*! Sets the sizes of hash tables for data compression.
+ *
+ * \param[in] window Sliding window size.
+ * \param[in] hash1 Hash table 1 size.
+ * \param[in] hash2 Hash table 2 size.
+ */
+void lzSetHashSizes(int window, int hash1, int hash2);
+
+/*! Reset the sizes of hash tables to their defaults.
+ */
+void lzResetHashSizes();
+
+/*! @} */
+
+
+/*! \addtogroup crcFuncs CRC Hashing Functions
+ * \brief Functions to calculate CRC hashes of data.
+ * @{
+ */
+
+/*! Calculates a CRC16 hash of the specified buffer.
+ *
+ * \param[in] *buff Pointer to buffer to calculate a hash of.
+ * \param[in] bytes Size of buffer in bytes.
+ * \param[in] crc CRC remainder (use LZP_CRC16_REMAINDER).
+ *
+ * \returns CRC16 hash of specified buffer.
+ */
+unsigned short lzCRC16(void* buff, int bytes, unsigned short crc);
+
+/*! Calculates a CRC32 hash of the specified buffer.
+ *
+ * \param[in] *buff Pointer to buffer to calculate a hash of.
+ * \param[in] bytes Size of buffer in bytes.
+ * \param[in] crc CRC remainder (use LZP_CRC16_REMAINDER).
+ *
+ * \returns CRC32 hash of specified buffer.
+ */
+unsigned int lzCRC32(void* buff, int bytes, unsigned int crc);
+
+/*! @} */
+
+
+/*! \addtogroup lzpFunctions LZP Archive Handling Routines
+ * \brief Functions to index and unpack files from LZP archives.
+ * @{
+ */
+
+/*! Searches for a file by name in an LZP archive and returns a file entry number.
+ *
+ * \param[in] *fileName String of file to search (must be less than 13 characters).
+ * \param[in] *lzpack Pointer to LZP archive file.
+ *
+ * \returns File index of found file or one of \ref libraryErrorCodes if an error occurred.
+ */
+int lzpSearchFile(const char* fileName, void* lzpack);
+
+int lzpFileSize(void* lzpack, int fileNum);
+
+/*! Get a pointer to a file entry inside of an LZP archive.
+ *
+ * \param[in] *lzpack Pointer to LZP archive file.
+ * \param[in] fileNum File number to get an entry of (you may use lzpSearchFile()).
+ *
+ * \returns A pointer to an LZP_FILE struct or NULL if an error occurred.
+ */
+LZP_FILE* lzpFileEntry(void* lzpack, int fileNum);
+
+/*! Unpacks a file from an LZP archive to the specified memory buffer.
+ *
+ * \param[in] *buff Pointer to buffer to store unpacked file.
+ * \param[in] *lzpack Pointer to LZP archive file.
+ * \param[in] fileNum File entry number of file to extract (you may use lzpSearchFile()).
+ *
+ * \returns Size of decompressed file in bytes or one of \ref libraryErrorCodes if an error occurred.
+ */
+int lzpUnpackFile(void* buff, void* lzpack, int fileNum);
+
+/*! @} */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif // _LZPACK_H
diff --git a/libpsn00b/include/lzp/lzqlp.h b/libpsn00b/include/lzp/lzqlp.h
new file mode 100644
index 0000000..fae6438
--- /dev/null
+++ b/libpsn00b/include/lzp/lzqlp.h
@@ -0,0 +1,26 @@
+#ifndef _QLP_H
+#define _QLP_H
+
+#define PACK_ERR_NONE 0
+#define PACK_ERR_INVALID -1
+#define PACK_ERR_NOTFOUND -2
+#define PACK_ERR_INCOMPLETE -3
+#define PACK_ERR_READ_FAULT -4
+
+typedef struct {
+ char id[3];
+ unsigned char numfiles;
+} QLP_HEAD;
+
+typedef struct {
+ char name[16];
+ unsigned int size;
+ unsigned int offs;
+} QLP_FILE;
+
+int qlpFileCount(void* qlpfile);
+QLP_FILE* qlpFileEntry(int index, void* qlpfile);
+void* qlpFileAddr(int index, void* qlpfile);
+int qlpFindFile(char* fileName, void* qlpfile);
+
+#endif // _QLP_H
\ No newline at end of file
diff --git a/libpsn00b/libc/makefile b/libpsn00b/libc/makefile
deleted file mode 100644
index bb3a687..0000000
--- a/libpsn00b/libc/makefile
+++ /dev/null
@@ -1,61 +0,0 @@
-# PSn00bSDK library makefile
-# Part of the PSn00bSDK Project
-# 2019 - 2021 Lameguy64 / Meido-Tek Productions
-
-## Settings
-
-PSN00BSDK_LIBS ?= ..
-
-include ../../psn00bsdk-setup.mk
-
-# Project target name
-TARGET = libc.a
-
-## Files
-
-# Searches for C, C++ and S (assembler) files in local directory
-CFILES = $(notdir $(wildcard *.c))
-CXXFILES= $(notdir $(wildcard *.cxx))
-AFILES = $(notdir $(wildcard *.s))
-
-# Create names for object files
-OFILES = $(addprefix build/,$(CFILES:.c=.o)) \
- $(addprefix build/,$(CXXFILES:.cxx=.o)) \
- $(addprefix build/,$(AFILES:.s=.o))
-
-# Project specific includes and libraries
-# (use -I for include dirs, -L for library dirs, -l for static libraries)
-INCLUDE +=
-LIBDIRS +=
-LIBS +=
-
-## Build rules
-
-all: build/$(TARGET)
-
-build/$(TARGET): $(OFILES)
- @mkdir -p $(dir $@)
- # "Import" libgcc's contents
- cp $(GCC_BASE)/lib/gcc/$(PREFIX)/$(GCC_VERSION)/libgcc.a ./$@
- $(AR) rs $@ $(OFILES)
-
-build/%.o: %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.cxx
- @mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.s
- @mkdir -p $(dir $@)
- $(CC) $(AFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-install:
-ifneq ($(PSN00BSDK_LIBS), "..")
- @mkdir -p $(PSN00BSDK_LIBS)
-endif
- cp build/$(TARGET) $(PSN00BSDK_LIBS)/$(TARGET)
-
-clean:
- rm -rf build
diff --git a/libpsn00b/lzp/makefile b/libpsn00b/lzp/makefile
deleted file mode 100644
index 02654ed..0000000
--- a/libpsn00b/lzp/makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-# PSn00bSDK library makefile
-# Part of the PSn00bSDK Project
-# 2019 - 2021 Lameguy64 / Meido-Tek Productions
-
-## Settings
-
-PSN00BSDK_LIBS ?= ..
-
-include ../../psn00bsdk-setup.mk
-
-# Project target name
-TARGET = liblzp.a
-
-## Files
-
-# Searches for C, C++ and S (assembler) files in local directory
-CFILES = $(notdir $(wildcard *.c))
-CXXFILES= $(notdir $(wildcard *.cxx))
-AFILES = $(notdir $(wildcard *.s))
-
-# Create names for object files
-OFILES = $(addprefix build/,$(CFILES:.c=.o)) \
- $(addprefix build/,$(CXXFILES:.cxx=.o)) \
- $(addprefix build/,$(AFILES:.s=.o))
-
-# Project specific includes and libraries
-# (use -I for include dirs, -L for library dirs, -l for static libraries)
-INCLUDE +=
-LIBDIRS +=
-LIBS +=
-
-## Build rules
-
-all: build/$(TARGET)
-
-build/$(TARGET): $(OFILES)
- @mkdir -p $(dir $@)
- $(AR) crs $@ $(OFILES)
-
-build/%.o: %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.cxx
- @mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.s
- @mkdir -p $(dir $@)
- $(CC) $(AFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-install:
-ifneq ($(PSN00BSDK_LIBS), "..")
- @mkdir -p $(PSN00BSDK_LIBS)
-endif
- cp build/$(TARGET) $(PSN00BSDK_LIBS)/$(TARGET)
-
-clean:
- rm -rf build
diff --git a/libpsn00b/makefile b/libpsn00b/makefile
deleted file mode 100644
index c2cf62f..0000000
--- a/libpsn00b/makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-# Run using make (Linux) or gmake (BSD)
-# Part of the PSn00bSDK Project
-# 2019 - 2020 Lameguy64 / Meido-Tek Productions
-
-TOPTARGETS = all clean
-
-LIBS = libc psxgpu psxapi psxgte psxcd psxetc psxsio psxspu lzp
-
-$(TOPTARGETS): $(LIBS)
-
-install: $(LIBS)
-ifdef PSN00BSDK_LIBS
-ifneq ($(CURDIR),$(PSN00BSDK_LIBS)) # needs a better method
- cp -R include $(PSN00BSDK_LIBS)/include
-endif
-endif
-
-clean: $(LIBS)
-
-$(LIBS):
- @$(MAKE) -C $@ $(MAKECMDGOALS)
-
-.PHONY: $(TOPTARGETS) $(LIBS)
diff --git a/libpsn00b/psxapi/makefile b/libpsn00b/psxapi/makefile
deleted file mode 100644
index f300e5f..0000000
--- a/libpsn00b/psxapi/makefile
+++ /dev/null
@@ -1,61 +0,0 @@
-# PSn00bSDK library makefile
-# Part of the PSn00bSDK Project
-# 2019 - 2021 Lameguy64 / Meido-Tek Productions
-
-## Settings
-
-PSN00BSDK_LIBS ?= ..
-
-include ../../psn00bsdk-setup.mk
-
-# Project target name
-TARGET = libpsxapi.a
-
-## Files
-
-SOURCES = stdio fs sys
-
-# Searches for C, C++ and S (assembler) files in local directory
-CFILES = $(foreach dir,$(SOURCES),$(wildcard $(dir)/*.c))
-CXXFILES= $(foreach dir,$(SOURCES),$(wildcard $(dir)/*.cxx))
-AFILES = $(foreach dir,$(SOURCES),$(wildcard $(dir)/*.s))
-
-# Create names for object files
-OFILES = $(addprefix build/,$(CFILES:.c=.o)) \
- $(addprefix build/,$(CXXFILES:.cxx=.o)) \
- $(addprefix build/,$(AFILES:.s=.o))
-
-# Project specific includes and libraries
-# (use -I for include dirs, -L for library dirs, -l for static libraries)
-INCLUDE +=
-LIBDIRS +=
-LIBS +=
-
-## Build rules
-
-all: build/$(TARGET)
-
-build/$(TARGET): $(OFILES)
- @mkdir -p $(dir $@)
- $(AR) crs $@ $(OFILES)
-
-build/%.o: %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.cxx
- @mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.s
- @mkdir -p $(dir $@)
- $(CC) $(AFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-install:
-ifneq ($(PSN00BSDK_LIBS), "..")
- @mkdir -p $(PSN00BSDK_LIBS)
-endif
- cp build/$(TARGET) $(PSN00BSDK_LIBS)/$(TARGET)
-
-clean:
- rm -rf build
diff --git a/libpsn00b/psxcd/makefile b/libpsn00b/psxcd/makefile
deleted file mode 100644
index ee9b958..0000000
--- a/libpsn00b/psxcd/makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-# PSn00bSDK library makefile
-# Part of the PSn00bSDK Project
-# 2019 - 2021 Lameguy64 / Meido-Tek Productions
-
-## Settings
-
-PSN00BSDK_LIBS ?= ..
-
-include ../../psn00bsdk-setup.mk
-
-# Project target name
-TARGET = libpsxcd.a
-
-## Files
-
-# Searches for C, C++ and S (assembler) files in local directory
-CFILES = $(notdir $(wildcard *.c))
-CXXFILES= $(notdir $(wildcard *.cxx))
-AFILES = $(notdir $(wildcard *.s))
-
-# Create names for object files
-OFILES = $(addprefix build/,$(CFILES:.c=.o)) \
- $(addprefix build/,$(CXXFILES:.cxx=.o)) \
- $(addprefix build/,$(AFILES:.s=.o))
-
-# Project specific includes and libraries
-# (use -I for include dirs, -L for library dirs, -l for static libraries)
-INCLUDE +=
-LIBDIRS +=
-LIBS +=
-
-## Build rules
-
-all: build/$(TARGET)
-
-build/$(TARGET): $(OFILES)
- @mkdir -p $(dir $@)
- $(AR) crs $@ $(OFILES)
-
-build/%.o: %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.cxx
- @mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.s
- @mkdir -p $(dir $@)
- $(CC) $(AFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-install:
-ifneq ($(PSN00BSDK_LIBS), "..")
- @mkdir -p $(PSN00BSDK_LIBS)
-endif
- cp build/$(TARGET) $(PSN00BSDK_LIBS)/$(TARGET)
-
-clean:
- rm -rf build
diff --git a/libpsn00b/psxetc/dl.c b/libpsn00b/psxetc/dl.c
index 1485183..e405efc 100644
--- a/libpsn00b/psxetc/dl.c
+++ b/libpsn00b/psxetc/dl.c
@@ -35,7 +35,7 @@
/* Compile options */
// Uncomment before building to enable debug logging (via printf()).
-#define DEBUG
+//#define DEBUG
// Comment before building to disable functions that rely on BIOS file APIs,
// i.e. DL_LoadSymbolMap() and dlopen().
diff --git a/libpsn00b/psxetc/makefile b/libpsn00b/psxetc/makefile
deleted file mode 100644
index 84bb64b..0000000
--- a/libpsn00b/psxetc/makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-# PSn00bSDK library makefile
-# Part of the PSn00bSDK Project
-# 2019 - 2021 Lameguy64 / Meido-Tek Productions
-
-## Settings
-
-PSN00BSDK_LIBS ?= ..
-
-include ../../psn00bsdk-setup.mk
-
-# Project target name
-TARGET = libpsxetc.a
-
-## Files
-
-# Searches for C, C++ and S (assembler) files in local directory
-CFILES = $(notdir $(wildcard *.c))
-CXXFILES= $(notdir $(wildcard *.cxx))
-AFILES = $(notdir $(wildcard *.s))
-
-# Create names for object files
-OFILES = $(addprefix build/,$(CFILES:.c=.o)) \
- $(addprefix build/,$(CXXFILES:.cxx=.o)) \
- $(addprefix build/,$(AFILES:.s=.o))
-
-# Project specific includes and libraries
-# (use -I for include dirs, -L for library dirs, -l for static libraries)
-INCLUDE +=
-LIBDIRS +=
-LIBS +=
-
-## Build rules
-
-all: build/$(TARGET)
-
-build/$(TARGET): $(OFILES)
- @mkdir -p $(dir $@)
- $(AR) crs $@ $(OFILES)
-
-build/%.o: %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.cxx
- @mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.s
- @mkdir -p $(dir $@)
- $(CC) $(AFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-install:
-ifneq ($(PSN00BSDK_LIBS), "..")
- @mkdir -p $(PSN00BSDK_LIBS)
-endif
- cp build/$(TARGET) $(PSN00BSDK_LIBS)/$(TARGET)
-
-clean:
- rm -rf build
diff --git a/libpsn00b/psxgpu/makefile b/libpsn00b/psxgpu/makefile
deleted file mode 100644
index adcb7fa..0000000
--- a/libpsn00b/psxgpu/makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-# PSn00bSDK library makefile
-# Part of the PSn00bSDK Project
-# 2019 - 2021 Lameguy64 / Meido-Tek Productions
-
-## Settings
-
-PSN00BSDK_LIBS ?= ..
-
-include ../../psn00bsdk-setup.mk
-
-# Project target name
-TARGET = libpsxgpu.a
-
-## Files
-
-# Searches for C, C++ and S (assembler) files in local directory
-CFILES = $(notdir $(wildcard *.c))
-CXXFILES= $(notdir $(wildcard *.cxx))
-AFILES = $(notdir $(wildcard *.s))
-
-# Create names for object files
-OFILES = $(addprefix build/,$(CFILES:.c=.o)) \
- $(addprefix build/,$(CXXFILES:.cxx=.o)) \
- $(addprefix build/,$(AFILES:.s=.o))
-
-# Project specific includes and libraries
-# (use -I for include dirs, -L for library dirs, -l for static libraries)
-INCLUDE +=
-LIBDIRS +=
-LIBS +=
-
-## Build rules
-
-all: build/$(TARGET)
-
-build/$(TARGET): $(OFILES)
- @mkdir -p $(dir $@)
- $(AR) crs $@ $(OFILES)
-
-build/%.o: %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.cxx
- @mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.s
- @mkdir -p $(dir $@)
- $(CC) $(AFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-install:
-ifneq ($(PSN00BSDK_LIBS), "..")
- @mkdir -p $(PSN00BSDK_LIBS)
-endif
- cp build/$(TARGET) $(PSN00BSDK_LIBS)/$(TARGET)
-
-clean:
- rm -rf build
diff --git a/libpsn00b/psxgte/makefile b/libpsn00b/psxgte/makefile
deleted file mode 100644
index e60ff1e..0000000
--- a/libpsn00b/psxgte/makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-# PSn00bSDK library makefile
-# Part of the PSn00bSDK Project
-# 2019 - 2021 Lameguy64 / Meido-Tek Productions
-
-## Settings
-
-PSN00BSDK_LIBS ?= ..
-
-include ../../psn00bsdk-setup.mk
-
-# Project target name
-TARGET = libpsxgte.a
-
-## Files
-
-# Searches for C, C++ and S (assembler) files in local directory
-CFILES = $(notdir $(wildcard *.c))
-CXXFILES= $(notdir $(wildcard *.cxx))
-AFILES = $(notdir $(wildcard *.s))
-
-# Create names for object files
-OFILES = $(addprefix build/,$(CFILES:.c=.o)) \
- $(addprefix build/,$(CXXFILES:.cxx=.o)) \
- $(addprefix build/,$(AFILES:.s=.o))
-
-# Project specific includes and libraries
-# (use -I for include dirs, -L for library dirs, -l for static libraries)
-INCLUDE +=
-LIBDIRS +=
-LIBS +=
-
-## Build rules
-
-all: build/$(TARGET)
-
-build/$(TARGET): $(OFILES)
- @mkdir -p $(dir $@)
- $(AR) crs $@ $(OFILES)
-
-build/%.o: %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.cxx
- @mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.s
- @mkdir -p $(dir $@)
- $(CC) $(AFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-install:
-ifneq ($(PSN00BSDK_LIBS), "..")
- @mkdir -p $(PSN00BSDK_LIBS)
-endif
- cp build/$(TARGET) $(PSN00BSDK_LIBS)/$(TARGET)
-
-clean:
- rm -rf build
diff --git a/libpsn00b/psxsio/makefile b/libpsn00b/psxsio/makefile
deleted file mode 100644
index c9dcade..0000000
--- a/libpsn00b/psxsio/makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-# PSn00bSDK library makefile
-# Part of the PSn00bSDK Project
-# 2019 - 2021 Lameguy64 / Meido-Tek Productions
-
-## Settings
-
-PSN00BSDK_LIBS ?= ..
-
-include ../../psn00bsdk-setup.mk
-
-# Project target name
-TARGET = libpsxsio.a
-
-## Files
-
-# Searches for C, C++ and S (assembler) files in local directory
-CFILES = $(notdir $(wildcard *.c))
-CXXFILES= $(notdir $(wildcard *.cxx))
-AFILES = $(notdir $(wildcard *.s))
-
-# Create names for object files
-OFILES = $(addprefix build/,$(CFILES:.c=.o)) \
- $(addprefix build/,$(CXXFILES:.cxx=.o)) \
- $(addprefix build/,$(AFILES:.s=.o))
-
-# Project specific includes and libraries
-# (use -I for include dirs, -L for library dirs, -l for static libraries)
-INCLUDE +=
-LIBDIRS +=
-LIBS +=
-
-## Build rules
-
-all: build/$(TARGET)
-
-build/$(TARGET): $(OFILES)
- @mkdir -p $(dir $@)
- $(AR) crs $@ $(OFILES)
-
-build/%.o: %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.cxx
- @mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.s
- @mkdir -p $(dir $@)
- $(CC) $(AFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-install:
-ifneq ($(PSN00BSDK_LIBS), "..")
- @mkdir -p $(PSN00BSDK_LIBS)
-endif
- cp build/$(TARGET) $(PSN00BSDK_LIBS)/$(TARGET)
-
-clean:
- rm -rf build
diff --git a/libpsn00b/psxspu/makefile b/libpsn00b/psxspu/makefile
deleted file mode 100644
index 5710f39..0000000
--- a/libpsn00b/psxspu/makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-# PSn00bSDK library makefile
-# Part of the PSn00bSDK Project
-# 2019 - 2021 Lameguy64 / Meido-Tek Productions
-
-## Settings
-
-PSN00BSDK_LIBS ?= ..
-
-include ../../psn00bsdk-setup.mk
-
-# Project target name
-TARGET = libpsxspu.a
-
-## Files
-
-# Searches for C, C++ and S (assembler) files in local directory
-CFILES = $(notdir $(wildcard *.c))
-CXXFILES= $(notdir $(wildcard *.cxx))
-AFILES = $(notdir $(wildcard *.s))
-
-# Create names for object files
-OFILES = $(addprefix build/,$(CFILES:.c=.o)) \
- $(addprefix build/,$(CXXFILES:.cxx=.o)) \
- $(addprefix build/,$(AFILES:.s=.o))
-
-# Project specific includes and libraries
-# (use -I for include dirs, -L for library dirs, -l for static libraries)
-INCLUDE +=
-LIBDIRS +=
-LIBS +=
-
-## Build rules
-
-all: build/$(TARGET)
-
-build/$(TARGET): $(OFILES)
- @mkdir -p $(dir $@)
- $(AR) crs $@ $(OFILES)
-
-build/%.o: %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.cxx
- @mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.s
- @mkdir -p $(dir $@)
- $(CC) $(AFLAGS_LIB) $(INCLUDE) -c $< -o $@
-
-install:
-ifneq ($(PSN00BSDK_LIBS), "..")
- @mkdir -p $(PSN00BSDK_LIBS)
-endif
- cp build/$(TARGET) $(PSN00BSDK_LIBS)/$(TARGET)
-
-clean:
- rm -rf build
diff --git a/libpsn00b/readme.txt b/libpsn00b/readme.txt
index 940746c..9f6ebc6 100644
--- a/libpsn00b/readme.txt
+++ b/libpsn00b/readme.txt
@@ -49,7 +49,7 @@ Brief summary of libraries:
must be covered in the changelog.txt file.
-Compiling:
+Compiling (OUTDATED):
To compile the LibPSn00b libraries, you will first need a working GCC
toolchain which you can either build yourself as described in the
--
cgit v1.2.3
From 7cf54f48113b77a4d7b21d5858ec98862195b2a6 Mon Sep 17 00:00:00 2001
From: spicyjpeg <88942473+spicyjpeg@users.noreply.github.com>
Date: Sun, 12 Sep 2021 19:39:12 +0200
Subject: Migrated examples to CMake
---
examples/CMakeLists.txt | 25 +++++++
examples/beginner/cppdemo/CMakeLists.txt | 22 ++++++
examples/beginner/cppdemo/makefile | 65 -----------------
examples/beginner/hello/CMakeLists.txt | 22 ++++++
examples/beginner/hello/makefile | 65 -----------------
examples/cdrom/cdbrowse/CMakeLists.txt | 27 +++++++
examples/cdrom/cdbrowse/iso.xml | 12 ++--
examples/cdrom/cdbrowse/makefile | 65 -----------------
examples/cdrom/cdxa/CMakeLists.txt | 29 ++++++++
examples/cdrom/cdxa/iso.xml | 14 ++--
examples/cdrom/cdxa/makefile | 65 -----------------
examples/demos/n00bdemo/CMakeLists.txt | 50 +++++++++++++
examples/demos/n00bdemo/data.s | 31 --------
examples/demos/n00bdemo/data.s.template | 31 ++++++++
examples/demos/n00bdemo/data.xml | 49 -------------
examples/demos/n00bdemo/data.xml.template | 49 +++++++++++++
examples/demos/n00bdemo/logo.c | 2 +-
examples/demos/n00bdemo/main.c | 4 +-
examples/demos/n00bdemo/makefile | 65 -----------------
examples/graphics/balls/CMakeLists.txt | 22 ++++++
examples/graphics/balls/makefile | 65 -----------------
examples/graphics/billboard/CMakeLists.txt | 28 ++++++++
examples/graphics/billboard/makefile | 65 -----------------
examples/graphics/billboard/tim.s | 7 --
examples/graphics/billboard/tim.s.template | 6 ++
examples/graphics/fpscam/CMakeLists.txt | 22 ++++++
examples/graphics/fpscam/makefile | 65 -----------------
examples/graphics/gte/CMakeLists.txt | 22 ++++++
examples/graphics/gte/makefile | 65 -----------------
examples/graphics/hdtv/CMakeLists.txt | 22 ++++++
examples/graphics/hdtv/makefile | 65 -----------------
examples/graphics/render2tex/CMakeLists.txt | 28 ++++++++
examples/graphics/render2tex/makefile | 65 -----------------
examples/graphics/render2tex/texture.s | 9 ---
examples/graphics/render2tex/texture.s.template | 8 +++
examples/graphics/rgb24/CMakeLists.txt | 28 ++++++++
examples/graphics/rgb24/makefile | 65 -----------------
examples/graphics/rgb24/tim.s | 7 --
examples/graphics/rgb24/tim.s.template | 6 ++
examples/makefile | 34 ---------
examples/system/childexec/CMakeLists.txt | 34 +++++++++
examples/system/childexec/child_exe.s | 6 --
examples/system/childexec/child_exe.s.template | 6 ++
examples/system/childexec/makefile | 93 ------------------------
examples/system/console/CMakeLists.txt | 22 ++++++
examples/system/console/makefile | 65 -----------------
examples/system/dynlink/CMakeLists.txt | 32 +++++++++
examples/system/dynlink/iso.xml | 16 ++---
examples/system/dynlink/makefile | 95 -------------------------
examples/system/timer/CMakeLists.txt | 22 ++++++
examples/system/timer/makefile | 65 -----------------
examples/system/tty/CMakeLists.txt | 22 ++++++
examples/system/tty/makefile | 65 -----------------
53 files changed, 609 insertions(+), 1330 deletions(-)
create mode 100644 examples/CMakeLists.txt
create mode 100644 examples/beginner/cppdemo/CMakeLists.txt
delete mode 100644 examples/beginner/cppdemo/makefile
create mode 100644 examples/beginner/hello/CMakeLists.txt
delete mode 100644 examples/beginner/hello/makefile
create mode 100644 examples/cdrom/cdbrowse/CMakeLists.txt
delete mode 100644 examples/cdrom/cdbrowse/makefile
create mode 100644 examples/cdrom/cdxa/CMakeLists.txt
delete mode 100644 examples/cdrom/cdxa/makefile
create mode 100644 examples/demos/n00bdemo/CMakeLists.txt
delete mode 100644 examples/demos/n00bdemo/data.s
create mode 100644 examples/demos/n00bdemo/data.s.template
delete mode 100644 examples/demos/n00bdemo/data.xml
create mode 100644 examples/demos/n00bdemo/data.xml.template
delete mode 100644 examples/demos/n00bdemo/makefile
create mode 100644 examples/graphics/balls/CMakeLists.txt
delete mode 100644 examples/graphics/balls/makefile
create mode 100644 examples/graphics/billboard/CMakeLists.txt
delete mode 100644 examples/graphics/billboard/makefile
delete mode 100644 examples/graphics/billboard/tim.s
create mode 100644 examples/graphics/billboard/tim.s.template
create mode 100644 examples/graphics/fpscam/CMakeLists.txt
delete mode 100644 examples/graphics/fpscam/makefile
create mode 100644 examples/graphics/gte/CMakeLists.txt
delete mode 100644 examples/graphics/gte/makefile
create mode 100644 examples/graphics/hdtv/CMakeLists.txt
delete mode 100644 examples/graphics/hdtv/makefile
create mode 100644 examples/graphics/render2tex/CMakeLists.txt
delete mode 100644 examples/graphics/render2tex/makefile
delete mode 100644 examples/graphics/render2tex/texture.s
create mode 100644 examples/graphics/render2tex/texture.s.template
create mode 100644 examples/graphics/rgb24/CMakeLists.txt
delete mode 100644 examples/graphics/rgb24/makefile
delete mode 100644 examples/graphics/rgb24/tim.s
create mode 100644 examples/graphics/rgb24/tim.s.template
delete mode 100644 examples/makefile
create mode 100644 examples/system/childexec/CMakeLists.txt
delete mode 100644 examples/system/childexec/child_exe.s
create mode 100644 examples/system/childexec/child_exe.s.template
delete mode 100644 examples/system/childexec/makefile
create mode 100644 examples/system/console/CMakeLists.txt
delete mode 100644 examples/system/console/makefile
create mode 100644 examples/system/dynlink/CMakeLists.txt
delete mode 100644 examples/system/dynlink/makefile
create mode 100644 examples/system/timer/CMakeLists.txt
delete mode 100644 examples/system/timer/makefile
create mode 100644 examples/system/tty/CMakeLists.txt
delete mode 100644 examples/system/tty/makefile
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
new file mode 100644
index 0000000..7cd7e98
--- /dev/null
+++ b/examples/CMakeLists.txt
@@ -0,0 +1,25 @@
+# PSn00bSDK examples build script
+# (C) 2021 spicyjpeg - MPL licensed
+
+cmake_minimum_required(VERSION 3.21)
+
+project(
+ PSn00bSDK-examples
+ LANGUAGES NONE
+ DESCRIPTION "PSn00bSDK examples"
+ HOMEPAGE_URL "http://lameguy64.net/?page=psn00bsdk"
+)
+
+file(
+ GLOB_RECURSE _examples
+ ${PROJECT_SOURCE_DIR}/CMakeLists.txt
+)
+
+foreach(_script IN LISTS _examples)
+ cmake_path(GET _script PARENT_PATH _dir)
+ if(_dir STREQUAL PROJECT_SOURCE_DIR)
+ continue()
+ endif()
+
+ add_subdirectory(${_dir})
+endforeach()
diff --git a/examples/beginner/cppdemo/CMakeLists.txt b/examples/beginner/cppdemo/CMakeLists.txt
new file mode 100644
index 0000000..83f0f0a
--- /dev/null
+++ b/examples/beginner/cppdemo/CMakeLists.txt
@@ -0,0 +1,22 @@
+# PSn00bSDK example CMake script
+# (C) 2021 spicyjpeg - MPL licensed
+
+cmake_minimum_required(VERSION 3.21)
+
+if(NOT DEFINED CMAKE_TOOLCHAIN_FILE AND DEFINED ENV{PSN00BSDK_LIBS})
+ set(CMAKE_TOOLCHAIN_FILE $ENV{PSN00BSDK_LIBS}/cmake/sdk.cmake)
+endif()
+
+project(
+ cppdemo
+ LANGUAGES CXX
+ VERSION 1.0.0
+ DESCRIPTION "PSn00bSDK basic C++ example"
+ HOMEPAGE_URL "http://lameguy64.net/?page=psn00bsdk"
+)
+
+file(GLOB _sources *.cpp)
+psn00bsdk_add_executable(cppdemo STATIC ${_sources})
+#psn00bsdk_add_cd_image(cppdemo_iso cppdemo iso.xml DEPENDS cppdemo)
+
+install(FILES ${PROJECT_BINARY_DIR}/cppdemo.exe DESTINATION .)
diff --git a/examples/beginner/cppdemo/makefile b/examples/beginner/cppdemo/makefile
deleted file mode 100644
index 630a280..0000000
--- a/examples/beginner/cppdemo/makefile
+++ /dev/null
@@ -1,65 +0,0 @@
-# PSn00bSDK makefile template
-# Part of the PSn00bSDK Project
-# 2019 - 2021 Lameguy64 / Meido-Tek Productions
-
-## Settings
-
-PSN00BSDK_LIBS ?= ../../../libpsn00b
-
-# Edit this to point to psn00bsdk-setup.mk, or copy that over to your project's
-# root folder (it only depends on environment variables).
-include ../../../psn00bsdk-setup.mk
-
-# Project target name
-TARGET = cppdemo
-
-## Files
-
-# Searches for C, C++ and S (assembler) files in local directory
-CFILES = $(notdir $(wildcard *.c))
-CPPFILES= $(notdir $(wildcard *.cpp))
-AFILES = $(notdir $(wildcard *.s))
-
-# Create names for object files
-OFILES = $(addprefix build/,$(CFILES:.c=.o)) \
- $(addprefix build/,$(CPPFILES:.cpp=.o)) \
- $(addprefix build/,$(AFILES:.s=.o))
-
-# Project specific includes and libraries
-# (use -I for include dirs, -L for library dirs, -l for static libraries)
-INCLUDE +=
-LIBDIRS +=
-LIBS +=
-
-## Build rules
-
-#all: iso
-all: build/$(TARGET)
-
-iso: build/$(TARGET) resources
- $(MKPSXISO) -y -q iso.xml
-
-resources:
- # Add commands to build/convert your assets here
- #$(LZPACK) data.xml
-
-build/$(TARGET): $(OFILES)
- @mkdir -p $(dir $@)
- $(LD) $(LDFLAGS_EXE) $(LIBDIRS) $^ $(LIBS) -o $@
- $(NM) -f posix -l -n $@ >$@.map
- $(ELF2X) -q $@ $@.exe
-
-build/%.o: %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS_EXE) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.cpp
- @mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS_EXE) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.s
- @mkdir -p $(dir $@)
- $(CC) $(AFLAGS_EXE) $(INCLUDE) -c $< -o $@
-
-clean:
- rm -rf build
diff --git a/examples/beginner/hello/CMakeLists.txt b/examples/beginner/hello/CMakeLists.txt
new file mode 100644
index 0000000..40e30b0
--- /dev/null
+++ b/examples/beginner/hello/CMakeLists.txt
@@ -0,0 +1,22 @@
+# PSn00bSDK example CMake script
+# (C) 2021 spicyjpeg - MPL licensed
+
+cmake_minimum_required(VERSION 3.21)
+
+if(NOT DEFINED CMAKE_TOOLCHAIN_FILE AND DEFINED ENV{PSN00BSDK_LIBS})
+ set(CMAKE_TOOLCHAIN_FILE $ENV{PSN00BSDK_LIBS}/cmake/sdk.cmake)
+endif()
+
+project(
+ hello
+ LANGUAGES C
+ VERSION 1.0.0
+ DESCRIPTION "PSn00bSDK hello world example"
+ HOMEPAGE_URL "http://lameguy64.net/?page=psn00bsdk"
+)
+
+file(GLOB _sources *.c)
+psn00bsdk_add_executable(hello STATIC ${_sources})
+#psn00bsdk_add_cd_image(hello_iso hello iso.xml DEPENDS hello)
+
+install(FILES ${PROJECT_BINARY_DIR}/hello.exe DESTINATION .)
diff --git a/examples/beginner/hello/makefile b/examples/beginner/hello/makefile
deleted file mode 100644
index e4bed20..0000000
--- a/examples/beginner/hello/makefile
+++ /dev/null
@@ -1,65 +0,0 @@
-# PSn00bSDK makefile template
-# Part of the PSn00bSDK Project
-# 2019 - 2021 Lameguy64 / Meido-Tek Productions
-
-## Settings
-
-PSN00BSDK_LIBS ?= ../../../libpsn00b
-
-# Edit this to point to psn00bsdk-setup.mk, or copy that over to your project's
-# root folder (it only depends on environment variables).
-include ../../../psn00bsdk-setup.mk
-
-# Project target name
-TARGET = hello
-
-## Files
-
-# Searches for C, C++ and S (assembler) files in local directory
-CFILES = $(notdir $(wildcard *.c))
-CPPFILES= $(notdir $(wildcard *.cpp))
-AFILES = $(notdir $(wildcard *.s))
-
-# Create names for object files
-OFILES = $(addprefix build/,$(CFILES:.c=.o)) \
- $(addprefix build/,$(CPPFILES:.cpp=.o)) \
- $(addprefix build/,$(AFILES:.s=.o))
-
-# Project specific includes and libraries
-# (use -I for include dirs, -L for library dirs, -l for static libraries)
-INCLUDE +=
-LIBDIRS +=
-LIBS +=
-
-## Build rules
-
-#all: iso
-all: build/$(TARGET)
-
-iso: build/$(TARGET) resources
- $(MKPSXISO) -y -q iso.xml
-
-resources:
- # Add commands to build/convert your assets here
- #$(LZPACK) data.xml
-
-build/$(TARGET): $(OFILES)
- @mkdir -p $(dir $@)
- $(LD) $(LDFLAGS_EXE) $(LIBDIRS) $^ $(LIBS) -o $@
- $(NM) -f posix -l -n $@ >$@.map
- $(ELF2X) -q $@ $@.exe
-
-build/%.o: %.c
- @mkdir -p $(dir $@)
- $(CC) $(CFLAGS_EXE) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.cpp
- @mkdir -p $(dir $@)
- $(CXX) $(CPPFLAGS_EXE) $(INCLUDE) -c $< -o $@
-
-build/%.o: %.s
- @mkdir -p $(dir $@)
- $(CC) $(AFLAGS_EXE) $(INCLUDE) -c $< -o $@
-
-clean:
- rm -rf build
diff --git a/examples/cdrom/cdbrowse/CMakeLists.txt b/examples/cdrom/cdbrowse/CMakeLists.txt
new file mode 100644
index 0000000..6eb4cbb
--- /dev/null
+++ b/examples/cdrom/cdbrowse/CMakeLists.txt
@@ -0,0 +1,27 @@
+# PSn00bSDK example CMake script
+# (C) 2021 spicyjpeg - MPL licensed
+
+cmake_minimum_required(VERSION 3.21)
+
+if(NOT DEFINED CMAKE_TOOLCHAIN_FILE AND DEFINED ENV{PSN00BSDK_LIBS})
+ set(CMAKE_TOOLCHAIN_FILE $ENV{PSN00BSDK_LIBS}/cmake/sdk.cmake)
+endif()
+
+project(
+ cdbrowse
+ LANGUAGES C
+ VERSION 1.0.0
+ DESCRIPTION "PSn00bSDK CD file browser example"
+ HOMEPAGE_URL "http://lameguy64.net/?page=psn00bsdk"
+)
+
+file(GLOB _sources *.c)
+psn00bsdk_add_executable(cdbrowse STATIC ${_sources})
+psn00bsdk_add_cd_image(cdbrowse_iso cdbrowse iso.xml DEPENDS cdbrowse)
+
+install(
+ FILES
+ ${PROJECT_BINARY_DIR}/cdbrowse.bin
+ ${PROJECT_BINARY_DIR}/cdbrowse.cue
+ DESTINATION .
+)
diff --git a/examples/cdrom/cdbrowse/iso.xml b/examples/cdrom/cdbrowse/iso.xml
index 5d8963d..5ffca18 100644
--- a/examples/cdrom/cdbrowse/iso.xml
+++ b/examples/cdrom/cdbrowse/iso.xml
@@ -1,7 +1,7 @@