[Scummvm-git-logs] scummvm master -> 8829a9b4c0623a13ef6e5fb4209c89ae3d043d58

lephilousophe noreply at scummvm.org
Sun Aug 7 16:15:13 UTC 2022


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
2a84d3e988 VITA: Add plugins support
f925c14971 VITA: Move link optimizations at the end of configure
8829a9b4c0 VITA: Remove the now useless alternative targets


Commit: 2a84d3e9886c54b2805a32ddfffd74fd69c0849b
    https://github.com/scummvm/scummvm/commit/2a84d3e9886c54b2805a32ddfffd74fd69c0849b
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2022-08-07T18:15:09+02:00

Commit Message:
VITA: Add plugins support

Changed paths:
  A backends/plugins/psp2/plugin.cpp
  A backends/plugins/psp2/plugin.yml
  A backends/plugins/psp2/psp2-plugin.h
  A backends/plugins/psp2/psp2-provider.cpp
  A backends/plugins/psp2/psp2-provider.h
    backends/module.mk
    backends/platform/sdl/psp2/psp2-main.cpp
    backends/platform/sdl/psp2/psp2.mk
    base/plugins.cpp
    configure


diff --git a/backends/module.mk b/backends/module.mk
index 91e500e01f6..009038af3d8 100644
--- a/backends/module.mk
+++ b/backends/module.mk
@@ -378,6 +378,7 @@ MODULE_OBJS += \
 	fs/posix/posix-iostream.o \
 	fs/posix-drives/posix-drives-fs.o \
 	fs/posix-drives/posix-drives-fs-factory.o \
+	plugins/psp2/psp2-provider.o \
 	events/psp2sdl/psp2sdl-events.o
 endif
 
diff --git a/backends/platform/sdl/psp2/psp2-main.cpp b/backends/platform/sdl/psp2/psp2-main.cpp
index 3b94a40559c..b17f416ed45 100644
--- a/backends/platform/sdl/psp2/psp2-main.cpp
+++ b/backends/platform/sdl/psp2/psp2-main.cpp
@@ -25,7 +25,7 @@
 
 #include "common/scummsys.h"
 #include "backends/platform/sdl/psp2/psp2.h"
-#include "backends/plugins/sdl/sdl-provider.h"
+#include "backends/plugins/psp2/psp2-provider.h"
 #include "base/main.h"
 
 int _newlib_heap_size_user = 192 * 1024 * 1024;
@@ -50,7 +50,7 @@ int main(int argc, char *argv[]) {
 	g_system->init();
 
 #ifdef DYNAMIC_MODULES
-	PluginManager::instance().addPluginProvider(new SDLPluginProvider());
+	PluginManager::instance().addPluginProvider(new PSP2PluginProvider());
 #endif
 
 	sceAppMgrGetAppParam(boot_params);
diff --git a/backends/platform/sdl/psp2/psp2.mk b/backends/platform/sdl/psp2/psp2.mk
index 6417b934ce8..f9ecbe0fea6 100644
--- a/backends/platform/sdl/psp2/psp2.mk
+++ b/backends/platform/sdl/psp2/psp2.mk
@@ -3,7 +3,7 @@ PSP2_EXE_STRIPPED := scummvm_stripped$(EXEEXT)
 $(PSP2_EXE_STRIPPED): $(EXECUTABLE)
 	$(STRIP) --strip-debug $< -o $@
 
-psp2vpk: $(PSP2_EXE_STRIPPED)
+psp2vpk: $(PSP2_EXE_STRIPPED) $(PLUGINS)
 	rm -rf psp2pkg
 	rm -f $(EXECUTABLE).vpk
 	mkdir -p psp2pkg/sce_sys/livearea/contents
@@ -11,6 +11,14 @@ psp2vpk: $(PSP2_EXE_STRIPPED)
 	mkdir -p psp2pkg/doc/
 	vita-elf-create $(PSP2_EXE_STRIPPED) $(EXECUTABLE).velf
 	vita-make-fself -s -c $(EXECUTABLE).velf psp2pkg/eboot.bin
+ifdef DYNAMIC_MODULES
+	# Use psp2rela to convert the main binary to static, this allows plugins to use functions from it without any relocation
+	# TODO: Use psp2rela -fetch_base flag instead of using objdump when the change is widespread
+	set -e ;\
+	textaddr=$$($(OBJDUMP) -p $(EXECUTABLE) | awk '/ LOAD / { vaddr=$$5; getline; if ($$6 == "r-x") print vaddr; }') ;\
+	dataaddr=$$($(OBJDUMP) -p $(EXECUTABLE) | awk '/ LOAD / { vaddr=$$5; getline; if ($$6 == "rw-") print vaddr; }') ;\
+	psp2rela -src=psp2pkg/eboot.bin -dst=psp2pkg/eboot.bin -static_mode -text_addr=$$textaddr -data_addr=$$dataaddr
+endif
 	vita-mksfoex -s TITLE_ID=VSCU00001 -d ATTRIBUTE2=12 "$(EXECUTABLE)" psp2pkg/sce_sys/param.sfo
 	cp $(srcdir)/dists/psp2/icon0.png psp2pkg/sce_sys/
 	cp $(srcdir)/dists/psp2/template.xml psp2pkg/sce_sys/livearea/contents/
@@ -25,6 +33,18 @@ ifdef DIST_FILES_NETWORKING
 endif
 ifdef DIST_FILES_VKEYBD
 	cp $(DIST_FILES_VKEYBD) psp2pkg/data/
+endif
+ifdef DYNAMIC_MODULES
+	mkdir -p psp2pkg/plugins
+	# Each plugin is built as ELF with .suprx extension in main directory because of PLUGIN_SUFFIX variable
+	# Then it's stripped and converted here to Vita ELF and SELF inside the package directory
+	set -e ;\
+	for p in $(PLUGINS); do \
+		p=$${p%.suprx} ;\
+		$(STRIP) --strip-debug $$p.suprx -o $$p.stripped.elf ;\
+		vita-elf-create -n -e $(srcdir)/backends/plugins/psp2/plugin.yml $$p.stripped.elf $$p.velf ;\
+		vita-make-fself -s $$p.velf psp2pkg/plugins/$$(basename "$$p").suprx ;\
+	done
 endif
 	cp $(DIST_FILES_DOCS) psp2pkg/doc/
 	cp $(srcdir)/dists/psp2/readme-psp2.md psp2pkg/doc/
diff --git a/backends/plugins/psp2/plugin.cpp b/backends/plugins/psp2/plugin.cpp
new file mode 100644
index 00000000000..ec80e4d371c
--- /dev/null
+++ b/backends/plugins/psp2/plugin.cpp
@@ -0,0 +1,113 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+// Disable symbol overrides so that we can use system headers.
+#define FORBIDDEN_SYMBOL_ALLOW_ALL
+
+#include "common/scummsys.h"
+
+#if defined(DYNAMIC_MODULES) && defined(PSP2)
+
+#include <cxxabi.h>
+#include <psp2/kernel/modulemgr.h>
+
+#include "base/plugins.h"
+#include "backends/plugins/psp2/psp2-plugin.h"
+
+extern "C" {
+
+int32 PLUGIN_getVersion();
+int32 PLUGIN_getType();
+int32 PLUGIN_getTypeVersion();
+PluginObject *PLUGIN_getObject();
+
+static PSP2FunctionPointers PSP2Functions = {
+	PSP2FunctionPointers_VERSION,
+	PLUGIN_getVersion,
+	PLUGIN_getType,
+	PLUGIN_getTypeVersion,
+	PLUGIN_getObject,
+};
+
+// hacks to make libc work
+//void* __dso_handle = (void*) &__dso_handle;
+extern void *__dso_handle __attribute__((weak));
+
+/* These magic symbols are provided by the linker.  */
+extern void (*__preinit_array_start []) (void) __attribute__((weak));
+extern void (*__preinit_array_end []) (void) __attribute__((weak));
+extern void (*__init_array_start []) (void) __attribute__((weak));
+extern void (*__init_array_end []) (void) __attribute__((weak));
+extern void (*__fini_array_start [])(void) __attribute__((weak));
+extern void (*__fini_array_end [])(void) __attribute__((weak));
+
+static void __libc_init_array(void) {
+	size_t count, i;
+
+	count = __preinit_array_end - __preinit_array_start;
+	for (i = 0; i < count; i++) {
+		__preinit_array_start[i]();
+	}
+
+	count = __init_array_end - __init_array_start;
+	for (i = 0; i < count; i++) {
+		__init_array_start[i]();
+	}
+}
+
+static void __libc_fini_array(void) {
+	size_t count, i;
+
+	count = __fini_array_end - __fini_array_start;
+	for (i = count; i > 0; i--) {
+		__fini_array_start[i-1]();
+	}
+}
+
+int module_stop(SceSize argc, const void *args) {
+	if (&__dso_handle != nullptr) {
+		__cxxabiv1::__cxa_finalize(&__dso_handle);
+	}
+	__libc_fini_array();
+	return SCE_KERNEL_STOP_SUCCESS;
+}
+
+int module_exit() {
+	if (&__dso_handle != nullptr) {
+		__cxxabiv1::__cxa_finalize(&__dso_handle);
+	}
+	__libc_fini_array();
+	return SCE_KERNEL_STOP_SUCCESS;
+}
+
+int _start(SceSize argc, void *args) __attribute__ ((weak, alias ("module_start")));
+int module_start(SceSize argc, void *args) {
+	PSP2FunctionPointers **arg = *(PSP2FunctionPointers ***)args;
+
+	__libc_init_array();
+
+	*arg = &PSP2Functions;
+
+	return SCE_KERNEL_START_SUCCESS;
+}
+
+}
+#endif // defined(DYNAMIC_MODULES) && defined(PSP2)
diff --git a/backends/plugins/psp2/plugin.yml b/backends/plugins/psp2/plugin.yml
new file mode 100644
index 00000000000..0fd1384946a
--- /dev/null
+++ b/backends/plugins/psp2/plugin.yml
@@ -0,0 +1,9 @@
+plugin:
+  attributes: 0
+  version:
+    major: 1
+    minor: 1
+  main:
+    start: module_start
+    stop: module_stop
+    exit: module_exit
diff --git a/backends/plugins/psp2/psp2-plugin.h b/backends/plugins/psp2/psp2-plugin.h
new file mode 100644
index 00000000000..d5223468f08
--- /dev/null
+++ b/backends/plugins/psp2/psp2-plugin.h
@@ -0,0 +1,41 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef BACKENDS_PLUGINS_PSP2_PLUGIN_H
+#define BACKENDS_PLUGINS_PSP2_PLUGIN_H
+
+#if defined(DYNAMIC_MODULES) && defined(PSP2)
+
+struct PSP2FunctionPointers {
+	uint32 version;
+	int32 (*PLUGIN_getVersion)();
+	int32 (*PLUGIN_getType)();
+	int32 (*PLUGIN_getTypeVersion)();
+	PluginObject *(*PLUGIN_getObject)();
+};
+
+// Increment this when modifying the structure above
+#define PSP2FunctionPointers_VERSION 1
+
+#endif // defined(DYNAMIC_MODULES) && defined(PSP2)
+
+#endif
+
diff --git a/backends/plugins/psp2/psp2-provider.cpp b/backends/plugins/psp2/psp2-provider.cpp
new file mode 100644
index 00000000000..72b0f7570bb
--- /dev/null
+++ b/backends/plugins/psp2/psp2-provider.cpp
@@ -0,0 +1,160 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+// Disable symbol overrides so that we can use system headers.
+#define FORBIDDEN_SYMBOL_ALLOW_ALL
+
+#include "common/scummsys.h"
+
+#if defined(DYNAMIC_MODULES) && defined(PSP2)
+
+#include <psp2/kernel/modulemgr.h>
+
+#include "backends/plugins/psp2/psp2-provider.h"
+#include "backends/plugins/psp2/psp2-plugin.h"
+#include "common/debug.h"
+#include "common/fs.h"
+
+// HACK: This is needed so that standard library functions that are only
+// used in plugins can be found in the main executable.
+#include <cxxabi.h>
+void *forceLinkFunctions[] = {
+	// Select the nothrow variant
+	(void *)(void *(*)(std::size_t, std::nothrow_t const&))operator new [],
+	(void *)coshf,
+	(void *)fgetc,
+	(void *)fmaxf,
+	(void *)fminf,
+	(void *)frexpf,
+	(void *)getc,
+	(void *)mbstowcs,
+	// Select the double version
+	(void *)(double (*)(double))nearbyint,
+	(void *)rename,
+	(void *)sinhf,
+	(void *)strcoll,
+	(void *)strspn,
+	(void *)tanhf,
+	(void *)vsprintf,
+	(void *)wcstombs,
+	(void *)__cxxabiv1::__cxa_finalize
+};
+
+class PSP2Plugin final : public Plugin {
+protected:
+	SceUID _modId;
+	const Common::String _filename;
+
+public:
+	PSP2Plugin(const Common::String &filename)
+		: _filename(filename), _modId(0) {}
+
+	bool loadPlugin() override {
+		assert(!_modId);
+		PSP2FunctionPointers *functions = nullptr;
+		PSP2FunctionPointers **arg = &functions;
+
+		int status = 0;
+		_modId = sceKernelLoadStartModule(_filename.c_str(), sizeof( arg ), &arg, 0, NULL, &status );
+
+		if (!_modId) {
+			debug("Failed loading plugin '%s' (error code %d)", _filename.c_str(), status);
+			return false;
+		} else {
+			debug(1, "Success loading plugin '%s', handle %08x", _filename.c_str(), _modId);
+		}
+
+		// Validate the Vita version
+		if (!functions) {
+			debug("Failed loading plugin '%s': no pointer", _filename.c_str());
+			unloadPlugin();
+			return false;
+		}
+		if (functions->version != PSP2FunctionPointers_VERSION) {
+			debug("Failed loading plugin '%s': unexpected version %d", _filename.c_str(), functions->version);
+			unloadPlugin();
+			return false;
+		}
+
+		// Validate the plugin API version
+		int32 version = functions->PLUGIN_getVersion();
+		if (version != PLUGIN_VERSION) {
+			warning("Plugin uses a different API version (you have: '%d', needed is: '%d')", version, PLUGIN_VERSION);
+			unloadPlugin();
+			return false;
+		}
+
+		// Get the type of the plugin
+		_type = (PluginType)functions->PLUGIN_getType();
+		if (_type >= PLUGIN_TYPE_MAX) {
+			warning("Plugin type unknown: %d", _type);
+			unloadPlugin();
+			return false;
+		}
+
+		// Validate the plugin type API version
+		int32 typeVersion = functions->PLUGIN_getTypeVersion();
+		if (typeVersion != pluginTypeVersions[_type]) {
+			warning("Plugin uses a different type API version (you have: '%d', needed is: '%d')", typeVersion, pluginTypeVersions[_type]);
+			unloadPlugin();
+			return false;
+		}
+
+		// Get the plugin object
+		_pluginObject = functions->PLUGIN_getObject();
+		if (!_pluginObject) {
+			warning("Couldn't get the plugin object");
+			unloadPlugin();
+			return false;
+		}
+
+		debug(1, "Successfully loaded plugin '%s'", _filename.c_str());
+		return true;
+	}
+
+	void unloadPlugin() override {
+		delete _pluginObject;
+
+		if (_modId) {
+			int status = 0;
+			int ret = sceKernelStopUnloadModule(_modId, 0, NULL, 0, NULL, &status);
+			if (ret != SCE_OK) {
+				debug("Failed unloading plugin '%s': %d/%d", _filename.c_str(), ret, status);
+			}
+			_modId = 0;
+		}
+	}
+
+	virtual const char *getFileName() const {
+		return _filename.c_str();
+	}
+};
+
+
+Plugin* PSP2PluginProvider::createPlugin(const Common::FSNode &node) const {
+	return new PSP2Plugin(node.getPath());
+}
+
+void PSP2PluginProvider::addCustomDirectories(Common::FSList &dirs) const {
+	dirs.push_back(Common::FSNode("app0:/plugins"));
+}
+
+#endif // defined(DYNAMIC_MODULES) && defined(PSP2)
diff --git a/backends/plugins/psp2/psp2-provider.h b/backends/plugins/psp2/psp2-provider.h
new file mode 100644
index 00000000000..f5a6e766a0d
--- /dev/null
+++ b/backends/plugins/psp2/psp2-provider.h
@@ -0,0 +1,37 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef BACKENDS_PLUGINS_PSP2_PROVIDER_H
+#define BACKENDS_PLUGINS_PSP2_PROVIDER_H
+
+#include "base/plugins.h"
+
+#if defined(DYNAMIC_MODULES) && defined(PSP2)
+
+class PSP2PluginProvider final : public FilePluginProvider {
+protected:
+	Plugin* createPlugin(const Common::FSNode &node) const override;
+	void addCustomDirectories(Common::FSList &dirs) const;
+};
+
+#endif // defined(DYNAMIC_MODULES) && defined(PSP2)
+
+#endif
diff --git a/base/plugins.cpp b/base/plugins.cpp
index 04f9a6d74b2..a30d3511a91 100644
--- a/base/plugins.cpp
+++ b/base/plugins.cpp
@@ -188,7 +188,9 @@ PluginList FilePluginProvider::getPlugins() {
 	#ifndef WIN32
 	pluginDirs.push_back(Common::FSNode("."));
 	#endif
+	#ifndef PSP2
 	pluginDirs.push_back(Common::FSNode("plugins"));
+	#endif
 
 	// Add the provider's custom directories
 	addCustomDirectories(pluginDirs);
diff --git a/configure b/configure
index 7370740ded9..58f1e1b1900 100755
--- a/configure
+++ b/configure
@@ -3059,16 +3059,21 @@ EOF
 		append_var CXXFLAGS "-mlong-calls"
 		append_var CXXFLAGS "-mword-relocations"
 		append_var CXXFLAGS "-fomit-frame-pointer"
-		#use link time optimization to further reduce exe size
-		append_var CXXFLAGS "-flto"
-		append_var LDFLAGS "-flto=jobserver"
 		#ensure verbose output during linking to prevent buildbot kills after 1200 seconds
 		if test "$_verbose_build" = yes ; then
 			append_var LDFLAGS "-Wl,-v --verbose"
 		fi
-		#use linker dead code elimination to further reduce exe size
-		append_var CXXFLAGS "-ffunction-sections -fdata-sections"
-		append_var LDFLAGS "-Wl,--gc-sections"
+		if test "$_dynamic_modules" = yes ; then
+			_detection_features_static=no
+			_plugins_default=dynamic
+		else
+			#use link time optimization to further reduce exe size
+			append_var CXXFLAGS "-flto"
+			append_var LDFLAGS "-flto=jobserver"
+			#use linker dead code elimination to further reduce exe size
+			append_var CXXFLAGS "-ffunction-sections -fdata-sections"
+			append_var LDFLAGS "-Wl,--gc-sections"
+		fi
 		if test "$_debug_build" = no; then
 		#optimize for smallest file size. This is necessary to prevent a crash on startup
 		#due to the large executable file size when many engines are enabled
@@ -4254,6 +4259,19 @@ POST_OBJS_FLAGS := -Wl,-no-whole-archive
 _mak_plugins='
 LDFLAGS				+= -Wl,-T$(srcdir)/backends/plugins/psp/main_prog.ld  -Wl,-zmax-page-size=128
 PLUGIN_LDFLAGS		+= -Wl,-T$(srcdir)/backends/plugins/psp/plugin.ld -Wl,-zmax-page-size=128 -lstdc++
+'
+		;;
+	psp2)
+		_plugin_prefix=""
+		# This will create an ELF with a suprx extension which we will have to mangle when packaging
+		_plugin_suffix=".suprx"
+		append_var CXXFLAGS "-fuse-cxa-atexit"
+		append_var DEFINES "-DUNCACHED_PLUGINS"
+_mak_plugins='
+PLUGIN_EXTRA_DEPS	= $(EXECUTABLE) backends/plugins/psp2/plugin.o
+PLUGIN_LDFLAGS		+= -nostartfiles -nodefaultlibs backends/plugins/psp2/plugin.o -Wl,-q -Xlinker --just-symbols -Xlinker $(EXECUTABLE) -lgcc
+PRE_OBJS_FLAGS		:= -Wl,--whole-archive
+POST_OBJS_FLAGS		:= -Wl,--no-whole-archive
 '
 		;;
 	riscos)


Commit: f925c14971d760e552044a57b71398979192838a
    https://github.com/scummvm/scummvm/commit/f925c14971d760e552044a57b71398979192838a
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2022-08-07T18:15:09+02:00

Commit Message:
VITA: Move link optimizations at the end of configure

Changed paths:
    configure


diff --git a/configure b/configure
index 58f1e1b1900..062749346e6 100755
--- a/configure
+++ b/configure
@@ -3066,13 +3066,6 @@ EOF
 		if test "$_dynamic_modules" = yes ; then
 			_detection_features_static=no
 			_plugins_default=dynamic
-		else
-			#use link time optimization to further reduce exe size
-			append_var CXXFLAGS "-flto"
-			append_var LDFLAGS "-flto=jobserver"
-			#use linker dead code elimination to further reduce exe size
-			append_var CXXFLAGS "-ffunction-sections -fdata-sections"
-			append_var LDFLAGS "-Wl,--gc-sections"
 		fi
 		if test "$_debug_build" = no; then
 		#optimize for smallest file size. This is necessary to prevent a crash on startup
@@ -6287,6 +6280,16 @@ case $_host_os in
 		# during linking stage
 		append_var LIBS "-lc -lgcc -lnosys"
 		;;
+	psp2)
+		if test "$_dynamic_modules" = no ; then
+			#use link time optimization to further reduce exe size
+			append_var CXXFLAGS "-flto"
+			append_var LDFLAGS "-flto=jobserver"
+			#use linker dead code elimination to further reduce exe size
+			append_var CXXFLAGS "-ffunction-sections -fdata-sections"
+			append_var LDFLAGS "-Wl,--gc-sections"
+		fi
+		;;
 esac
 
 


Commit: 8829a9b4c0623a13ef6e5fb4209c89ae3d043d58
    https://github.com/scummvm/scummvm/commit/8829a9b4c0623a13ef6e5fb4209c89ae3d043d58
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2022-08-07T18:15:09+02:00

Commit Message:
VITA: Remove the now useless alternative targets

Changed paths:
    backends/platform/sdl/psp2/psp2.mk


diff --git a/backends/platform/sdl/psp2/psp2.mk b/backends/platform/sdl/psp2/psp2.mk
index f9ecbe0fea6..c595d0fb37f 100644
--- a/backends/platform/sdl/psp2/psp2.mk
+++ b/backends/platform/sdl/psp2/psp2.mk
@@ -50,58 +50,4 @@ endif
 	cp $(srcdir)/dists/psp2/readme-psp2.md psp2pkg/doc/
 	cd psp2pkg && zip -r ../$(EXECUTABLE).vpk . && cd ..
 
-psp2othervpk: $(PSP2_EXE_STRIPPED)
-	rm -rf psp2pkg
-	rm -f $(EXECUTABLE).vpk
-	mkdir -p psp2pkg/sce_sys/livearea/contents
-	mkdir -p psp2pkg/data/
-	mkdir -p psp2pkg/doc/
-	vita-elf-create $(PSP2_EXE_STRIPPED) $(EXECUTABLE).velf
-	vita-make-fself -s -c $(EXECUTABLE).velf psp2pkg/eboot.bin
-	vita-mksfoex -s TITLE_ID=VSCU00002 -d ATTRIBUTE2=12 "$(EXECUTABLE)_other_engines" psp2pkg/sce_sys/param.sfo
-	cp $(srcdir)/dists/psp2/icon0.png psp2pkg/sce_sys/
-	cp $(srcdir)/dists/psp2/template.xml psp2pkg/sce_sys/livearea/contents/
-	cp $(srcdir)/dists/psp2/bg.png psp2pkg/sce_sys/livearea/contents/
-	cp $(srcdir)/dists/psp2/startup.png psp2pkg/sce_sys/livearea/contents/
-	cp $(DIST_FILES_THEMES) psp2pkg/data/
-ifdef DIST_FILES_ENGINEDATA
-	cp $(DIST_FILES_ENGINEDATA) psp2pkg/data/
-endif
-ifdef DIST_FILES_NETWORKING
-	cp $(DIST_FILES_NETWORKING) psp2pkg/data/
-endif
-ifdef DIST_FILES_VKEYBD
-	cp $(DIST_FILES_VKEYBD) psp2pkg/data/
-endif
-	cp $(DIST_FILES_DOCS) psp2pkg/doc/
-	cp $(srcdir)/dists/psp2/readme-psp2.md psp2pkg/doc/
-	cd psp2pkg && zip -r ../$(EXECUTABLE)-other-engines.vpk . && cd ..
-
-psp2unstablevpk: $(PSP2_EXE_STRIPPED)
-	rm -rf psp2pkg
-	rm -f $(EXECUTABLE).vpk
-	mkdir -p psp2pkg/sce_sys/livearea/contents
-	mkdir -p psp2pkg/data/
-	mkdir -p psp2pkg/doc/
-	vita-elf-create $(PSP2_EXE_STRIPPED) $(EXECUTABLE).velf
-	vita-make-fself -s -c $(EXECUTABLE).velf psp2pkg/eboot.bin
-	vita-mksfoex -s TITLE_ID=VSCU00003 -d ATTRIBUTE2=12 "$(EXECUTABLE)_unstable_engines" psp2pkg/sce_sys/param.sfo
-	cp $(srcdir)/dists/psp2/icon0.png psp2pkg/sce_sys/
-	cp $(srcdir)/dists/psp2/template.xml psp2pkg/sce_sys/livearea/contents/
-	cp $(srcdir)/dists/psp2/bg.png psp2pkg/sce_sys/livearea/contents/
-	cp $(srcdir)/dists/psp2/startup.png psp2pkg/sce_sys/livearea/contents/
-	cp $(DIST_FILES_THEMES) psp2pkg/data/
-ifdef DIST_FILES_ENGINEDATA
-	cp $(DIST_FILES_ENGINEDATA) psp2pkg/data/
-endif
-ifdef DIST_FILES_NETWORKING
-	cp $(DIST_FILES_NETWORKING) psp2pkg/data/
-endif
-ifdef DIST_FILES_VKEYBD
-	cp $(DIST_FILES_VKEYBD) psp2pkg/data/
-endif
-	cp $(DIST_FILES_DOCS) psp2pkg/doc/
-	cp $(srcdir)/dists/psp2/readme-psp2.md psp2pkg/doc/
-	cd psp2pkg && zip -r ../$(EXECUTABLE)-unstable-engines.vpk . && cd ..
-
-.PHONY: psp2vpk psp2othervpk psp2unstablevpk
+.PHONY: psp2vpk




More information about the Scummvm-git-logs mailing list