Merge branch 'master' into tex-cache
This commit is contained in:
commit
9268b7d48e
|
@ -1,12 +1,15 @@
|
||||||
#!/bin/bash -ex
|
#!/bin/bash -ex
|
||||||
|
|
||||||
export NDK_CCACHE=$(which ccache)
|
export NDK_CCACHE=$(which ccache)
|
||||||
|
[ "$GITHUB_REPOSITORY" = "citra-emu/citra-canary" ] &&
|
||||||
|
BUILD_FLAVOR=canary ||
|
||||||
|
BUILD_FLAVOR=nightly
|
||||||
|
|
||||||
ccache -s
|
ccache -s
|
||||||
|
|
||||||
cd src/android
|
cd src/android
|
||||||
chmod +x ./gradlew
|
chmod +x ./gradlew
|
||||||
./gradlew bundleRelease
|
./gradlew assemble${BUILD_FLAVOR}Release
|
||||||
./gradlew assembleRelease
|
./gradlew bundle${BUILD_FLAVOR}Release
|
||||||
|
|
||||||
ccache -s
|
ccache -s
|
||||||
|
|
|
@ -3,8 +3,21 @@
|
||||||
. ./.ci/common/pre-upload.sh
|
. ./.ci/common/pre-upload.sh
|
||||||
|
|
||||||
REV_NAME="citra-${GITDATE}-${GITREV}"
|
REV_NAME="citra-${GITDATE}-${GITREV}"
|
||||||
|
[ "${GITHUB_REPOSITORY}" = "citra-emu/citra-canary" ] &&
|
||||||
|
BUILD_FLAVOR=canary ||
|
||||||
|
BUILD_FLAVOR=nightly
|
||||||
|
|
||||||
cp src/android/app/build/outputs/apk/release/app-release.apk \
|
cp src/android/app/build/outputs/apk/${BUILD_FLAVOR}/release/app-${BUILD_FLAVOR}-release.apk \
|
||||||
"artifacts/${REV_NAME}.apk"
|
"artifacts/${REV_NAME}.apk"
|
||||||
cp src/android/app/build/outputs/bundle/release/app-release.aab \
|
cp src/android/app/build/outputs/bundle/${BUILD_FLAVOR}Release/app-${BUILD_FLAVOR}-release.aab \
|
||||||
"artifacts/${REV_NAME}.aab"
|
"artifacts/${REV_NAME}.aab"
|
||||||
|
|
||||||
|
if [ ! -z "${ANDROID_KEYSTORE_B64}" ]
|
||||||
|
then
|
||||||
|
echo "Signing apk..."
|
||||||
|
base64 --decode <<< "${ANDROID_KEYSTORE_B64}" > ks.jks
|
||||||
|
|
||||||
|
java -jar $(which apksigner) sign --ks ks.jks \
|
||||||
|
--ks-key-alias "${ANDROID_KEY_ALIAS}" \
|
||||||
|
--ks-pass env:ANDROID_KEYSTORE_PASS "artifacts/${REV_NAME}.apk"
|
||||||
|
fi
|
||||||
|
|
|
@ -129,10 +129,14 @@ jobs:
|
||||||
- name: Deps
|
- name: Deps
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install ccache -y
|
sudo apt-get install ccache apksigner -y
|
||||||
- name: Build
|
- name: Build
|
||||||
run: ./.ci/android/build.sh
|
run: ./.ci/android/build.sh
|
||||||
- name: Copy artifacts
|
- name: Copy and sign artifacts
|
||||||
|
env:
|
||||||
|
ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
|
||||||
|
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
|
||||||
|
ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
|
||||||
run: ./.ci/android/upload.sh
|
run: ./.ci/android/upload.sh
|
||||||
- name: Upload
|
- name: Upload
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
|
@ -153,7 +157,7 @@ jobs:
|
||||||
TRANSIFEX_API_TOKEN: ${{ secrets.TRANSIFEX_API_TOKEN }}
|
TRANSIFEX_API_TOKEN: ${{ secrets.TRANSIFEX_API_TOKEN }}
|
||||||
release:
|
release:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [build]
|
needs: [build, android]
|
||||||
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/download-artifact@v3
|
- uses: actions/download-artifact@v3
|
||||||
|
@ -174,4 +178,4 @@ jobs:
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
asset_paths: '["./**/*.tar.*","./**/*.7z","./**/*.zip"]'
|
asset_paths: '["./**/*.tar.*","./**/*.7z","./**/*.zip","./**/*.apk","./**/*.aab"]'
|
||||||
|
|
|
@ -2158,6 +2158,10 @@ PlotWidget {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TouchScreenPreview {
|
||||||
|
qproperty-dotHighlightColor: #3daee9;
|
||||||
|
background-color: #0f1922;
|
||||||
|
}
|
||||||
|
|
||||||
QListWidget#selectorList {
|
QListWidget#selectorList {
|
||||||
background-color: #0f1922;
|
background-color: #0f1922;
|
||||||
|
|
|
@ -116,6 +116,10 @@ function(find_ffmpeg LIBNAME)
|
||||||
endforeach()
|
endforeach()
|
||||||
string(TOUPPER ${LIBNAME} LIBNAME_UPPER)
|
string(TOUPPER ${LIBNAME} LIBNAME_UPPER)
|
||||||
file(STRINGS "${FFmpeg_INCLUDE_${LIBNAME}}/lib${LIBNAME}/version.h" _FFmpeg_VERSION_H_CONTENTS REGEX "#define LIB${LIBNAME_UPPER}_VERSION_(MAJOR|MINOR|MICRO) ")
|
file(STRINGS "${FFmpeg_INCLUDE_${LIBNAME}}/lib${LIBNAME}/version.h" _FFmpeg_VERSION_H_CONTENTS REGEX "#define LIB${LIBNAME_UPPER}_VERSION_(MAJOR|MINOR|MICRO) ")
|
||||||
|
if (EXISTS "${FFmpeg_INCLUDE_${LIBNAME}}/lib${LIBNAME}/version_major.h")
|
||||||
|
file(STRINGS "${FFmpeg_INCLUDE_${LIBNAME}}/lib${LIBNAME}/version_major.h" _FFmpeg_MAJOR_VERSION_H_CONTENTS REGEX "#define LIB${LIBNAME_UPPER}_VERSION_MAJOR ")
|
||||||
|
string(APPEND _FFmpeg_VERSION_H_CONTENTS "\n" ${_FFmpeg_MAJOR_VERSION_H_CONTENTS})
|
||||||
|
endif()
|
||||||
set(_FFmpeg_VERSION_REGEX "([0-9]+)")
|
set(_FFmpeg_VERSION_REGEX "([0-9]+)")
|
||||||
foreach(v MAJOR MINOR MICRO)
|
foreach(v MAJOR MINOR MICRO)
|
||||||
if("${_FFmpeg_VERSION_H_CONTENTS}" MATCHES "#define LIB${LIBNAME_UPPER}_VERSION_${v}[\\t ]+${_FFmpeg_VERSION_REGEX}")
|
if("${_FFmpeg_VERSION_H_CONTENTS}" MATCHES "#define LIB${LIBNAME_UPPER}_VERSION_${v}[\\t ]+${_FFmpeg_VERSION_REGEX}")
|
||||||
|
|
|
@ -83,6 +83,17 @@ android {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flavorDimensions "version"
|
||||||
|
productFlavors {
|
||||||
|
canary {
|
||||||
|
dimension "version"
|
||||||
|
applicationIdSuffix ".canary"
|
||||||
|
}
|
||||||
|
nightly {
|
||||||
|
dimension "version"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
cmake {
|
cmake {
|
||||||
version "3.18.1"
|
version "3.18.1"
|
||||||
|
@ -140,5 +151,10 @@ def getVersion() {
|
||||||
logger.error('Cannot find git, defaulting to dummy version number')
|
logger.error('Cannot find git, defaulting to dummy version number')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (System.getenv("GITHUB_ACTIONS") != null) {
|
||||||
|
def gitTag = System.getenv("GIT_TAG_NAME")
|
||||||
|
versionName = gitTag ?: versionName
|
||||||
|
}
|
||||||
|
|
||||||
return versionName
|
return versionName
|
||||||
}
|
}
|
||||||
|
|
|
@ -391,6 +391,9 @@ int main(int argc, char** argv) {
|
||||||
return -1;
|
return -1;
|
||||||
case Core::System::ResultStatus::Success:
|
case Core::System::ResultStatus::Success:
|
||||||
break; // Expected case
|
break; // Expected case
|
||||||
|
default:
|
||||||
|
LOG_ERROR(Frontend, "Error while loading ROM: {}", system.GetStatusDetails());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
system.TelemetrySession().AddField(Common::Telemetry::FieldType::App, "Frontend", "SDL");
|
system.TelemetrySession().AddField(Common::Telemetry::FieldType::App, "Frontend", "SDL");
|
||||||
|
@ -437,7 +440,18 @@ int main(int argc, char** argv) {
|
||||||
});
|
});
|
||||||
|
|
||||||
while (emu_window->IsOpen()) {
|
while (emu_window->IsOpen()) {
|
||||||
system.RunLoop();
|
const auto result = system.RunLoop();
|
||||||
|
|
||||||
|
switch (result) {
|
||||||
|
case Core::System::ResultStatus::ShutdownRequested:
|
||||||
|
emu_window->RequestClose();
|
||||||
|
break;
|
||||||
|
case Core::System::ResultStatus::Success:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LOG_ERROR(Frontend, "Error in main run loop: {}", result, system.GetStatusDetails());
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
render_thread.join();
|
render_thread.join();
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,10 @@ bool EmuWindow_SDL2::IsOpen() const {
|
||||||
return is_open;
|
return is_open;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EmuWindow_SDL2::RequestClose() {
|
||||||
|
is_open = false;
|
||||||
|
}
|
||||||
|
|
||||||
void EmuWindow_SDL2::OnResize() {
|
void EmuWindow_SDL2::OnResize() {
|
||||||
int width, height;
|
int width, height;
|
||||||
SDL_GetWindowSize(render_window, &width, &height);
|
SDL_GetWindowSize(render_window, &width, &height);
|
||||||
|
@ -134,7 +138,7 @@ void EmuWindow_SDL2::Fullscreen() {
|
||||||
EmuWindow_SDL2::EmuWindow_SDL2(bool fullscreen) {
|
EmuWindow_SDL2::EmuWindow_SDL2(bool fullscreen) {
|
||||||
// Initialize the window
|
// Initialize the window
|
||||||
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER) < 0) {
|
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER) < 0) {
|
||||||
LOG_CRITICAL(Frontend, "Failed to initialize SDL2! Exiting...");
|
LOG_CRITICAL(Frontend, "Failed to initialize SDL2: {}! Exiting...", SDL_GetError());
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,7 +262,7 @@ void EmuWindow_SDL2::PollEvents() {
|
||||||
OnResize();
|
OnResize();
|
||||||
break;
|
break;
|
||||||
case SDL_WINDOWEVENT_CLOSE:
|
case SDL_WINDOWEVENT_CLOSE:
|
||||||
is_open = false;
|
RequestClose();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -289,7 +293,7 @@ void EmuWindow_SDL2::PollEvents() {
|
||||||
OnFingerUp();
|
OnFingerUp();
|
||||||
break;
|
break;
|
||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
is_open = false;
|
RequestClose();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -46,6 +46,9 @@ public:
|
||||||
/// Whether the window is still open, and a close request hasn't yet been sent
|
/// Whether the window is still open, and a close request hasn't yet been sent
|
||||||
bool IsOpen() const;
|
bool IsOpen() const;
|
||||||
|
|
||||||
|
/// Close the window.
|
||||||
|
void RequestClose();
|
||||||
|
|
||||||
/// Creates a new context that is shared with the current context
|
/// Creates a new context that is shared with the current context
|
||||||
std::unique_ptr<GraphicsContext> CreateSharedContext() const override;
|
std::unique_ptr<GraphicsContext> CreateSharedContext() const override;
|
||||||
|
|
||||||
|
|
Reference in New Issue