mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-11-26 10:44:15 +01:00
Pass native library dir to OS + reorder OS init order so paths are first
This is required for integrating libadrenotools, which needs access to library and app directories in the GPU class constructor.
This commit is contained in:
parent
900d00a876
commit
dd91d063a5
@ -74,6 +74,7 @@ extern "C" JNIEXPORT void Java_emu_skyline_EmulationActivity_executeApplication(
|
|||||||
jint preferenceFd,
|
jint preferenceFd,
|
||||||
jint systemLanguage,
|
jint systemLanguage,
|
||||||
jstring appFilesPathJstring,
|
jstring appFilesPathJstring,
|
||||||
|
jstring nativeLibraryPathJstring,
|
||||||
jobject assetManager
|
jobject assetManager
|
||||||
) {
|
) {
|
||||||
skyline::signal::ScopedStackBlocker stackBlocker; // We do not want anything to unwind past JNI code as there are invalid stack frames which can lead to a segmentation fault
|
skyline::signal::ScopedStackBlocker stackBlocker; // We do not want anything to unwind past JNI code as there are invalid stack frames which can lead to a segmentation fault
|
||||||
@ -98,10 +99,13 @@ extern "C" JNIEXPORT void Java_emu_skyline_EmulationActivity_executeApplication(
|
|||||||
perfetto::TrackEvent::Register();
|
perfetto::TrackEvent::Register();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
skyline::JniString nativeLibraryPath(env, nativeLibraryPathJstring);
|
||||||
|
|
||||||
auto os{std::make_shared<skyline::kernel::OS>(
|
auto os{std::make_shared<skyline::kernel::OS>(
|
||||||
jvmManager,
|
jvmManager,
|
||||||
settings,
|
settings,
|
||||||
appFilesPath,
|
appFilesPath,
|
||||||
|
nativeLibraryPath,
|
||||||
GetTimeZoneName(),
|
GetTimeZoneName(),
|
||||||
static_cast<skyline::language::SystemLanguage>(systemLanguage),
|
static_cast<skyline::language::SystemLanguage>(systemLanguage),
|
||||||
std::make_shared<skyline::vfs::AndroidAssetFileSystem>(AAssetManager_fromJava(env, assetManager))
|
std::make_shared<skyline::vfs::AndroidAssetFileSystem>(AAssetManager_fromJava(env, assetManager))
|
||||||
|
@ -17,11 +17,13 @@ namespace skyline::kernel {
|
|||||||
std::shared_ptr<JvmManager> &jvmManager,
|
std::shared_ptr<JvmManager> &jvmManager,
|
||||||
std::shared_ptr<Settings> &settings,
|
std::shared_ptr<Settings> &settings,
|
||||||
std::string appFilesPath,
|
std::string appFilesPath,
|
||||||
|
std::string nativeLibraryPath,
|
||||||
std::string deviceTimeZone,
|
std::string deviceTimeZone,
|
||||||
language::SystemLanguage systemLanguage,
|
language::SystemLanguage systemLanguage,
|
||||||
std::shared_ptr<vfs::FileSystem> assetFileSystem)
|
std::shared_ptr<vfs::FileSystem> assetFileSystem)
|
||||||
: state(this, jvmManager, settings),
|
: nativeLibraryPath(std::move(nativeLibraryPath)),
|
||||||
appFilesPath(std::move(appFilesPath)),
|
appFilesPath(std::move(appFilesPath)),
|
||||||
|
state(this, jvmManager, settings),
|
||||||
deviceTimeZone(std::move(deviceTimeZone)),
|
deviceTimeZone(std::move(deviceTimeZone)),
|
||||||
assetFileSystem(std::move(assetFileSystem)),
|
assetFileSystem(std::move(assetFileSystem)),
|
||||||
serviceManager(state),
|
serviceManager(state),
|
||||||
|
@ -14,8 +14,9 @@ namespace skyline::kernel {
|
|||||||
*/
|
*/
|
||||||
class OS {
|
class OS {
|
||||||
public:
|
public:
|
||||||
DeviceState state;
|
std::string nativeLibraryPath; //!< The full path to the app's native library directory
|
||||||
std::string appFilesPath; //!< The full path to the app's files directory
|
std::string appFilesPath; //!< The full path to the app's files directory
|
||||||
|
DeviceState state;
|
||||||
std::string deviceTimeZone; //!< The timezone name (e.g. Europe/London)
|
std::string deviceTimeZone; //!< The timezone name (e.g. Europe/London)
|
||||||
std::shared_ptr<vfs::FileSystem> assetFileSystem; //!< A filesystem to be used for accessing emulator assets (like tzdata)
|
std::shared_ptr<vfs::FileSystem> assetFileSystem; //!< A filesystem to be used for accessing emulator assets (like tzdata)
|
||||||
service::ServiceManager serviceManager;
|
service::ServiceManager serviceManager;
|
||||||
@ -30,6 +31,7 @@ namespace skyline::kernel {
|
|||||||
std::shared_ptr<Settings> &settings,
|
std::shared_ptr<Settings> &settings,
|
||||||
std::string appFilesPath,
|
std::string appFilesPath,
|
||||||
std::string deviceTimeZone,
|
std::string deviceTimeZone,
|
||||||
|
std::string nativeLibraryPath,
|
||||||
language::SystemLanguage systemLanguage,
|
language::SystemLanguage systemLanguage,
|
||||||
std::shared_ptr<vfs::FileSystem> assetFileSystem
|
std::shared_ptr<vfs::FileSystem> assetFileSystem
|
||||||
);
|
);
|
||||||
|
@ -70,9 +70,10 @@ class EmulationActivity : AppCompatActivity(), SurfaceHolder.Callback, View.OnTo
|
|||||||
* @param romFd The file descriptor of the ROM object
|
* @param romFd The file descriptor of the ROM object
|
||||||
* @param preferenceFd The file descriptor of the Preference XML
|
* @param preferenceFd The file descriptor of the Preference XML
|
||||||
* @param appFilesPath The full path to the app files directory
|
* @param appFilesPath The full path to the app files directory
|
||||||
|
* @param nativeLibraryPath The full path to the app native library directory
|
||||||
* @param assetManager The asset manager used for accessing app assets
|
* @param assetManager The asset manager used for accessing app assets
|
||||||
*/
|
*/
|
||||||
private external fun executeApplication(romUri : String, romType : Int, romFd : Int, preferenceFd : Int, language : Int, appFilesPath : String, assetManager : AssetManager)
|
private external fun executeApplication(romUri : String, romType : Int, romFd : Int, preferenceFd : Int, language : Int, appFilesPath : String, nativeLibraryPath : String, assetManager : AssetManager)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param join If the function should only return after all the threads join or immediately
|
* @param join If the function should only return after all the threads join or immediately
|
||||||
@ -211,7 +212,7 @@ class EmulationActivity : AppCompatActivity(), SurfaceHolder.Callback, View.OnTo
|
|||||||
val preferenceFd = ParcelFileDescriptor.open(File("${applicationInfo.dataDir}/shared_prefs/${applicationInfo.packageName}_preferences.xml"), ParcelFileDescriptor.MODE_READ_WRITE)
|
val preferenceFd = ParcelFileDescriptor.open(File("${applicationInfo.dataDir}/shared_prefs/${applicationInfo.packageName}_preferences.xml"), ParcelFileDescriptor.MODE_READ_WRITE)
|
||||||
|
|
||||||
emulationThread = Thread {
|
emulationThread = Thread {
|
||||||
executeApplication(rom.toString(), romType, romFd.detachFd(), preferenceFd.detachFd(), settings.systemLanguage, applicationContext.filesDir.canonicalPath + "/", assets)
|
executeApplication(rom.toString(), romType, romFd.detachFd(), preferenceFd.detachFd(), settings.systemLanguage, applicationContext.filesDir.canonicalPath + "/", applicationInfo.nativeLibraryDir + "/", assets)
|
||||||
returnFromEmulation()
|
returnFromEmulation()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user