summaryrefslogtreecommitdiff
path: root/cmake/ps2
diff options
context:
space:
mode:
authorclaude-bot <[email protected]>2026-07-13 12:40:03 +0000
committerclaude-bot <[email protected]>2026-07-13 12:40:03 +0000
commit847962910f0bff071f3bf07c9abb87764fb6cac3 (patch)
treeddcd429e134c7fd5f72ddc97ced175de8d66fcd0 /cmake/ps2
downloadlibrw-847962910f0bff071f3bf07c9abb87764fb6cac3.tar.gz
librw-847962910f0bff071f3bf07c9abb87764fb6cac3.zip
Import aap/librw @ masterHEADmaster
Snapshot for re3/reVC vendoring, per @lzcnt. Source: https://github.com/aap/librw (master).
Diffstat (limited to 'cmake/ps2')
-rw-r--r--cmake/ps2/PS2Functions.cmake18
-rw-r--r--cmake/ps2/cmaketoolchain/CMakeDSMCompiler.cmake.in16
-rw-r--r--cmake/ps2/cmaketoolchain/CMakeDSMInformation.cmake79
-rw-r--r--cmake/ps2/cmaketoolchain/CMakeDetermineDSMCompiler.cmake87
-rw-r--r--cmake/ps2/cmaketoolchain/CMakeTestDSMCompiler.cmake7
-rw-r--r--cmake/ps2/cmaketoolchain/Platform/PlayStation2.cmake1
-rw-r--r--cmake/ps2/cmaketoolchain/conanfile.py24
-rw-r--r--cmake/ps2/cmaketoolchain/toolchain_ps2_ee.cmake92
8 files changed, 324 insertions, 0 deletions
diff --git a/cmake/ps2/PS2Functions.cmake b/cmake/ps2/PS2Functions.cmake
new file mode 100644
index 0000000..5cd81dd
--- /dev/null
+++ b/cmake/ps2/PS2Functions.cmake
@@ -0,0 +1,18 @@
+if(NOT COMMAND add_erl_executable)
+ message(FATAL_ERROR "The `add_erl_executable` cmake command is not available. Please use an appropriate Playstation 2 toolchain.")
+endif()
+
+function(librw_platform_target TARGET)
+ cmake_parse_arguments(LPT "INSTALL" "" "" ${ARGN})
+
+ get_target_property(TARGET_TYPE "${TARGET}" TYPE)
+ if(TARGET_TYPE STREQUAL "EXECUTABLE")
+ add_erl_executable(${TARGET} OUTPUT_VAR ERL_FILE)
+
+ if(LIBRW_INSTALL AND LPT_INSTALL)
+ install(FILES "${ERL_FILE}"
+ DESTINATION "${CMAKE_INSTALL_BINDIR}"
+ )
+ endif()
+ endif()
+endfunction()
diff --git a/cmake/ps2/cmaketoolchain/CMakeDSMCompiler.cmake.in b/cmake/ps2/cmaketoolchain/CMakeDSMCompiler.cmake.in
new file mode 100644
index 0000000..9a55d4c
--- /dev/null
+++ b/cmake/ps2/cmaketoolchain/CMakeDSMCompiler.cmake.in
@@ -0,0 +1,16 @@
+set(CMAKE_DSM_COMPILER "@_CMAKE_DSM_COMPILER@")
+set(CMAKE_DSM_COMPILER_ARG1 "@_CMAKE_DSM_COMPILER_ARG1@")
+set(CMAKE_DSM_COMPILER_AR "@_CMAKE_DSM_COMPILER_AR@")
+set(CMAKE_RANLIB "@CMAKE_RANLIB@")
+set(CMAKE_DSM_COMPILER_RANLIB "@_CMAKE_DSM_COMPILER_RANLIB@")
+set(CMAKE_LINKER "@CMAKE_LINKER@")
+set(CMAKE_DSM_COMPILER_LOADED 1)
+set(CMAKE_DSM_COMPILER_ID "@_CMAKE_DSM_COMPILER_ID@")
+set(CMAKE_DSM_COMPILER_VERSION "@_CMAKE_DSM_COMPILER_VERSION@")
+set(CMAKE_DSM_COMPILER_ENV_VAR "@_CMAKE_DSM_COMPILER_ENV_VAR@")
+@_SET_CMAKE_DSM_COMPILER_ARCHITECTURE_ID@
+
+set(CMAKE_DSM_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
+set(CMAKE_DSM_LINKER_PREFERENCE 0)
+
+@CMAKE_DSM_COMPILER_CUSTOM_CODE@
diff --git a/cmake/ps2/cmaketoolchain/CMakeDSMInformation.cmake b/cmake/ps2/cmaketoolchain/CMakeDSMInformation.cmake
new file mode 100644
index 0000000..27b56d6
--- /dev/null
+++ b/cmake/ps2/cmaketoolchain/CMakeDSMInformation.cmake
@@ -0,0 +1,79 @@
+if(UNIX)
+ set(CMAKE_DSM_OUTPUT_EXTENSION .o)
+else()
+ set(CMAKE_DSM_OUTPUT_EXTENSION .obj)
+endif()
+
+set(CMAKE_INCLUDE_FLAG_DSM "-I")
+
+set(CMAKE_DSM_FLAGS_INIT "$ENV{DSMFLAGS} ${CMAKE_DSM_FLAGS_INIT}")
+
+# replace for CMake >= 3.11
+foreach(c "" _DEBUG _RELEASE _MINSIZEREL _RELWITHDEBINFO)
+ string(STRIP "${CMAKE_DSM_FLAGS${c}_INIT}" CMAKE_DSM_FLAGS${c}_INIT)
+endforeach()
+
+set (CMAKE_DSM_FLAGS "${CMAKE_DSM_FLAGS_INIT}" CACHE STRING
+ "Flags used by the assembler during all build types.")
+
+if(NOT CMAKE_NOT_USING_CONFIG_FLAGS)
+ get_property(_GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
+ # default build type is none
+ if(NOT _GENERATOR_IS_MULTI_CONFIG AND NOT CMAKE_NO_BUILD_TYPE)
+ set (CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE_INIT} CACHE STRING
+ "Choose the type of build, options are: None, Debug Release RelWithDebInfo MinSizeRel.")
+ endif()
+ unset(_GENERATOR_IS_MULTI_CONFIG)
+ set (CMAKE_DSM_FLAGS_DEBUG "${CMAKE_DSM_FLAGS_DEBUG_INIT}" CACHE STRING
+ "Flags used by the assembler during debug builds.")
+ set (CMAKE_DSM_FLAGS_MINSIZEREL "${CMAKE_DSM_FLAGS_MINSIZEREL_INIT}" CACHE STRING
+ "Flags used by the assembler during release minsize builds.")
+ set (CMAKE_DSM_FLAGS_RELEASE "${CMAKE_DSM_FLAGS_RELEASE_INIT}" CACHE STRING
+ "Flags used by the assembler during release builds.")
+ set (CMAKE_DSM_FLAGS_RELWITHDEBINFO "${CMAKE_DSM_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING
+ "Flags used by the assembler during Release with Debug Info builds.")
+endif()
+
+mark_as_advanced(CMAKE_DSM_FLAGS
+ CMAKE_DSM_FLAGS_DEBUG
+ CMAKE_DSM_FLAGS_MINSIZEREL
+ CMAKE_DSM_FLAGS_RELEASE
+ CMAKE_DSM_FLAGS_RELWITHDEBINFO
+ )
+# WITH: cmake_initialize_per_config_variable(CMAKE_DSM_FLAGS "Flags used by the DSM compiler")
+
+if(NOT CMAKE_DSM_COMPILE_OBJECT)
+ set(CMAKE_DSM_COMPILE_OBJECT "<CMAKE_DSM_COMPILER> <INCLUDES> <FLAGS> -o <OBJECT> <SOURCE>")
+endif()
+
+if(NOT CMAKE_DSM_CREATE_STATIC_LIBRARY)
+ set(CMAKE_DSM_CREATE_STATIC_LIBRARY
+ "<CMAKE_DSM_COMPILER_AR> cr <TARGET> <LINK_FLAGS> <OBJECTS> "
+ "<CMAKE_DSM_COMPILER_RANLIB> <TARGET>")
+endif()
+
+if(NOT CMAKE_DSM_LINK_EXECUTABLE)
+ set(CMAKE_DSM_LINK_EXECUTABLE
+ "<CMAKE_DSM_COMPILER> <FLAGS> <CMAKE_DSM_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_DSM_FLAG)
+ set(CMAKE_EXECUTABLE_RUNTIME_DSM_FLAG ${CMAKE_SHARED_LIBRARY_RUNTIME_DSM_FLAG})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RUNTIME_DSM_FLAG_SEP)
+ set(CMAKE_EXECUTABLE_RUNTIME_DSM_FLAG_SEP ${CMAKE_SHARED_LIBRARY_RUNTIME_DSM_FLAG_SEP})
+endif()
+
+if(NOT CMAKE_EXECUTABLE_RPATH_LINK_DSM_FLAG)
+ set(CMAKE_EXECUTABLE_RPATH_LINK_DSM_FLAG ${CMAKE_SHARED_LIBRARY_RPATH_LINK_DSM_FLAG})
+endif()
+
+# to be done
+if(NOT CMAKE_DSM_CREATE_SHARED_LIBRARY)
+ set(CMAKE_DSM_CREATE_SHARED_LIBRARY)
+endif()
+
+if(NOT CMAKE_DSM_CREATE_SHARED_MODULE)
+ set(CMAKE_DSM_CREATE_SHARED_MODULE)
+endif()
diff --git a/cmake/ps2/cmaketoolchain/CMakeDetermineDSMCompiler.cmake b/cmake/ps2/cmaketoolchain/CMakeDetermineDSMCompiler.cmake
new file mode 100644
index 0000000..d3bda8b
--- /dev/null
+++ b/cmake/ps2/cmaketoolchain/CMakeDetermineDSMCompiler.cmake
@@ -0,0 +1,87 @@
+include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
+
+if (NOT CMAKE_DSM_COMPILER)
+ message(FATAL_ERROR "Need CMAKE_DSM_COMPILER set")
+endif()
+
+_cmake_find_compiler_path(DSM)
+mark_as_advanced(CMAKE_DSM_COMPILER)
+
+if (NOT CMAKE_DSM_COMPILER_ID)
+ # Table of per-vendor compiler id flags with expected output.
+ list(APPEND CMAKE_DSM_COMPILER_ID_VENDORS GNU )
+ set(CMAKE_DSM_COMPILER_ID_VENDOR_FLAGS_GNU "--version")
+ set(CMAKE_DSM_COMPILER_ID_VENDOR_REGEX_GNU "(GNU assembler)|(GCC)|(Free Software Foundation)")
+
+ include(CMakeDetermineCompilerId)
+ cmake_determine_compiler_id_vendor(DSM "")
+
+endif()
+
+if (NOT _CMAKE_TOOLCHAIN_LOCATION)
+ get_filename_component(_CMAKE_TOOLCHAIN_LOCATION "${CMAKE_DSM_COMPILER}" PATH)
+endif()
+
+if (CMAKE_DSM_COMPILER_ID)
+ if (CMAKE_DSM_COMPILER_VERSION)
+ set(_version " ${CMAKE_DSM_COMPILER_VERSION}")
+ else()
+ set(_version "")
+ endif()
+ message(STATUS "The DSM compiler identification is ${CMAKE_DSM_COMPILER_ID}${_version}")
+ unset(_version)
+else()
+ message(STATUS "The DSM compiler identification is unknown")
+endif()
+
+if (NOT _CMAKE_TOOLCHAIN_PREFIX)
+ get_filename_component(COMPILER_BASENAME "${CMAKE_DSM_COMPILER}" NAME)
+ if (COMPILER_BASENAME MATCHES "^(.+1)g?as(-[0-9]+\\.[0-9]+\\.[0-9]+)?(\\.exe)?$")
+ set(_CMAKE_TOOLCHAIN_PREFIX ${CMAKE_MATCH_1})
+ endif()
+
+endif()
+
+set(_CMAKE_PROCESSING_LANGUAGE "DSM")
+find_program(CMAKE_DSM_COMPILER_AR NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ar HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
+find_program(CMAKE_DSM_COMPILER_RANLIB NAMES ${_CMAKE_TOOLCHAIN_PREFIX}ranlib HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
+find_program(CMAKE_DSM_COMPILER_STRIP NAMES ${_CMAKE_TOOLCHAIN_PREFIX}strip HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
+find_program(CMAKE_DSM_COMPILER_NM NAMES ${_CMAKE_TOOLCHAIN_PREFIX}nm HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
+find_program(CMAKE_DSM_COMPILER_OBJDUMP NAMES ${_CMAKE_TOOLCHAIN_PREFIX}objdump HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
+find_program(CMAKE_DSM_COMPILER_OBJCOPY NAMES ${_CMAKE_TOOLCHAIN_PREFIX}objcopy HINTS ${_CMAKE_TOOLCHAIN_LOCATION})
+
+unset(_CMAKE_PROCESSING_LANGUAGE)
+
+set(CMAKE_DSM_COMPILER_ENV_VAR "DSM")
+
+if (CMAKE_DSM_COMPILER)
+ message(STATUS "Found DSM assembler: ${CMAKE_DSM_COMPILER}")
+else()
+ message(STATUS "Didn't find assembler")
+endif()
+
+foreach(_var
+ COMPILER
+ COMPILER_ID
+ COMPILER_ARG1
+ COMPILER_ENV_VAR
+ COMPILER_AR
+ COMPILER_RANLIB
+ COMPILER_VERSION
+ )
+ set(_CMAKE_DSM_${_var} "${CMAKE_DSM_${_var}}")
+endforeach()
+
+configure_file("${CMAKE_CURRENT_LIST_DIR}/CMakeDSMCompiler.cmake.in"
+ "${CMAKE_PLATFORM_INFO_DIR}/CMakeDSMCompiler.cmake" @ONLY)
+
+foreach(_var
+ COMPILER
+ COMPILER_ID
+ COMPILER_ARG1
+ COMPILER_ENV_VAR
+ COMPILER_AR
+ COMPILER_VERSION
+ )
+ unset(_CMAKE_DSM_${_var})
+endforeach()
diff --git a/cmake/ps2/cmaketoolchain/CMakeTestDSMCompiler.cmake b/cmake/ps2/cmaketoolchain/CMakeTestDSMCompiler.cmake
new file mode 100644
index 0000000..5c514ea
--- /dev/null
+++ b/cmake/ps2/cmaketoolchain/CMakeTestDSMCompiler.cmake
@@ -0,0 +1,7 @@
+set(_ASM_COMPILER_WORKS 0)
+
+if(CMAKE_DSM_COMPILER)
+ set(_DSM_COMPILER_WORKS)
+endif()
+
+set(CMAKE_DSM_COMPILER_WORKS ${_DSM_COMPILER_WORKS} CACHE INTERNAL "")
diff --git a/cmake/ps2/cmaketoolchain/Platform/PlayStation2.cmake b/cmake/ps2/cmaketoolchain/Platform/PlayStation2.cmake
new file mode 100644
index 0000000..bd2995e
--- /dev/null
+++ b/cmake/ps2/cmaketoolchain/Platform/PlayStation2.cmake
@@ -0,0 +1 @@
+set(CMAKE_EXECUTABLE_SUFFIX ".elf")
diff --git a/cmake/ps2/cmaketoolchain/conanfile.py b/cmake/ps2/cmaketoolchain/conanfile.py
new file mode 100644
index 0000000..4cc9d3c
--- /dev/null
+++ b/cmake/ps2/cmaketoolchain/conanfile.py
@@ -0,0 +1,24 @@
+from conans import ConanFile
+import os
+import shutil
+
+
+class Ps2devCMakeToolchainConan(ConanFile):
+ name = "ps2dev-cmaketoolchain"
+ description = "CMake toolchain script for ps2dev"
+ topics = "ps2", "sdk", "library", "sony", "playstation", "ps2"
+
+ def export_sources(self):
+ self.copy("*.cmake*", dst="cmake")
+ self.copy("Platform", dst="cmake")
+
+ def package(self):
+ shutil.copytree(os.path.join(self.source_folder, "cmake"),
+ os.path.join(self.package_folder, "cmake"))
+
+ def package_info(self):
+ self.user_info.cmake_dir = os.path.join(self.package_folder, "cmake").replace("\\", "/")
+
+ cmake_toolchain_file = os.path.join(self.package_folder, "cmake", "toolchain_ps2_ee.cmake").replace("\\", "/")
+ self.user_info.cmake_toolchain_file = cmake_toolchain_file
+ self.cpp_info.CONAN_CMAKE_TOOLCHAIN_FILE = cmake_toolchain_file
diff --git a/cmake/ps2/cmaketoolchain/toolchain_ps2_ee.cmake b/cmake/ps2/cmaketoolchain/toolchain_ps2_ee.cmake
new file mode 100644
index 0000000..da1efad
--- /dev/null
+++ b/cmake/ps2/cmaketoolchain/toolchain_ps2_ee.cmake
@@ -0,0 +1,92 @@
+cmake_minimum_required(VERSION 3.7)
+
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
+
+set(CMAKE_SYSTEM_NAME "PlayStation2")
+set(CMAKE_SYSTEM_PROCESSOR "mips64r5900el")
+set(CMAKE_SYSTEM_VERSION 1)
+
+set(CMAKE_NO_SYSTEM_FROM_IMPORTED ON)
+
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+
+if(NOT DEFINED ENV{PS2DEV})
+ message(FATAL_ERROR "Need environment variable PS2DEV set")
+endif()
+if(NOT DEFINED ENV{PS2SDK})
+ message(FATAL_ERROR "Need environment variable PS2SDK set")
+endif()
+if(NOT DEFINED ENV{GSKIT})
+ message(FATAL_ERROR "Need environment variable PS2SDK set")
+endif()
+
+set(PS2DEV "$ENV{PS2DEV}")
+set(PS2SDK "$ENV{PS2SDK}")
+set(GSKIT "$ENV{GSKIT}")
+
+if(NOT IS_DIRECTORY "${PS2DEV}")
+ message(FATAL_ERROR "PS2DEV must be a folder path (${PS2DEV})")
+endif()
+
+if(NOT IS_DIRECTORY "${PS2SDK}")
+ message(FATAL_ERROR "PS2SDK must be a folder path (${PS2SDK})")
+endif()
+
+if(NOT IS_DIRECTORY "${GSKIT}")
+ message(FATAL_ERROR "GSKIT must be a folder path (${GSKIT})")
+endif()
+
+set(CMAKE_DSM_SOURCE_FILE_EXTENSIONS "dsm")
+
+set(CMAKE_C_COMPILER "${PS2DEV}/ee/bin/mips64r5900el-ps2-elf-gcc" CACHE FILEPATH "C compiler")
+set(CMAKE_CXX_COMPILER "${PS2DEV}/ee/bin/mips64r5900el-ps2-elf-g++" CACHE FILEPATH "CXX compiler")
+set(CMAKE_ASM_COMPILER "${PS2DEV}/ee/bin/mips64r5900el-ps2-elf-g++" CACHE FILEPATH "ASM assembler")
+set(CMAKE_DSM_COMPILER "${PS2DEV}/dvp/bin/dvp-as" CACHE FILEPATH "DSM assembler")
+set(CMAKE_AR "${PS2DEV}/ee/bin/mips64r5900el-ps2-elf-ar" CACHE FILEPATH "archiver")
+set(CMAKE_LINKER "${PS2DEV}/ee/bin/mips64r5900el-ps2-elf-ld" CACHE FILEPATH "Linker")
+set(CMAKE_RANLIB "${PS2DEV}/ee/bin/mips64r5900el-ps2-elf-ranlib" CACHE FILEPATH "ranlib")
+set(CMAKE_STRIP "${PS2DEV}/ee/bin/mips64r5900el-ps2-elf-strip" CACHE FILEPATH "strip")
+
+set(CMAKE_ASM_FLAGS_INIT "-G0 -I\"${PS2SDK}/ee/include\" -I\"${PS2SDK}/common/include\" -D_EE")
+set(CMAKE_C_FLAGS_INIT "-G0 -fno-common -I\"${PS2SDK}/ee/include\" -I\"${PS2SDK}/common/include\" -D_EE")
+set(CMAKE_CXX_FLAGS_INIT "-G0 -fno-common -I\"${PS2SDK}/ee/include\" -I\"${PS2SDK}/common/include\" -D_EE")
+set(CMAKE_EXE_LINKER_FLAGS_INIT "-G0 -L\"${PS2SDK}/ee/lib\" -Wl,-r -Wl,-d")
+
+set(CMAKE_FIND_ROOT_PATH "${PS2DEV}/ee" "${PS2SDK}/ee" "${GSKIT}")
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+
+set(PS2 1)
+set(EE 1)
+
+set(CMAKE_EXECUTABLE_SUFFIX ".elf")
+
+function(add_erl_executable TARGET)
+ cmake_parse_arguments("AEE" "" "OUTPUT_VAR" "" ${ARGN})
+
+ get_target_property(output_dir "${TARGET}" RUNTIME_OUTPUT_DIRECTORY)
+ if(NOT output_dir)
+ set(output_dir ${CMAKE_CURRENT_BINARY_DIR})
+ endif()
+
+ get_target_property(output_name ${TARGET} OUTPUT_NAME)
+ if(NOT output_name)
+ set(output_name ${TARGET})
+ endif()
+ set(outfile "${output_dir}/${output_name}.erl")
+
+ add_custom_command(OUTPUT "${outfile}"
+ COMMAND "${CMAKE_COMMAND}" -E copy "$<TARGET_FILE:${TARGET}>" "${outfile}"
+ COMMAND "${CMAKE_STRIP}" --strip-unneeded -R .mdebug.eabi64 -R .reginfo -R .comment "${outfile}"
+ DEPENDS ${TARGET}
+ )
+ add_custom_target("${TARGET}_erl" ALL
+ DEPENDS "${outfile}"
+ )
+
+ if(AEE_OUTPUT_VAR)
+ set("${AEE_OUTPUT_VAR}" "${outfile}" PARENT_SCOPE)
+ endif()
+endfunction()