mirror of
https://github.com/Vita3K/Vita3K.git
synced 2024-05-16 03:40:38 -04:00
build: Add support for building AppImages under linux
This commit is contained in:
parent
ecdeb625d6
commit
ae08826fed
53
.github/workflows/c-cpp.yml
vendored
53
.github/workflows/c-cpp.yml
vendored
|
@ -21,12 +21,20 @@ jobs:
|
|||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
config: [Release]
|
||||
version: [zip, appimage]
|
||||
include:
|
||||
- os: ubuntu-latest
|
||||
version: appimage
|
||||
cache_path: ~/.ccache
|
||||
extra_cmake_args: -DLINUXDEPLOY_COMMAND=/usr/local/bin/linuxdeploy-x86_64.AppImage
|
||||
cmake_preset: linux-ninja-clang15-appimage
|
||||
- os: ubuntu-latest
|
||||
version: zip
|
||||
cache_path: ~/.ccache
|
||||
extra_cmake_args:
|
||||
cmake_preset: linux-ninja-clang15
|
||||
- os: windows-latest
|
||||
version: zip
|
||||
cache_path: |
|
||||
C:\vcpkg\installed
|
||||
C:\vcpkg\packages
|
||||
|
@ -34,9 +42,15 @@ jobs:
|
|||
extra_cmake_args: -DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake
|
||||
cmake_preset: windows-ninja
|
||||
- os: macos-latest
|
||||
version: zip
|
||||
cache_path: ~/Library/Caches/ccache
|
||||
extra_cmake_args:
|
||||
cmake_preset: macos-ninja
|
||||
exclude:
|
||||
- os: macos-latest
|
||||
version: appimage
|
||||
- os: windows-latest
|
||||
version: appimage
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
@ -58,8 +72,9 @@ jobs:
|
|||
- name: Set up build environment (ubuntu-latest)
|
||||
run: |
|
||||
sudo add-apt-repository -y ppa:mhier/libboost-latest
|
||||
sudo add-apt-repository universe
|
||||
sudo apt update
|
||||
sudo apt -y install ccache libboost-filesystem1.81-dev libboost-program-options1.81-dev libboost-system1.81-dev libgtk-3-dev libsdl2-dev ninja-build
|
||||
sudo apt -y install ccache libboost-filesystem1.81-dev libboost-program-options1.81-dev libboost-system1.81-dev libgtk-3-dev libsdl2-dev ninja-build libfuse2
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
|
||||
- uses: ilammy/msvc-dev-cmd@v1
|
||||
|
@ -96,6 +111,15 @@ jobs:
|
|||
sudo make -C SDL2-${SDL2VER} install
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
|
||||
- name: Set up linuxdeploy (ubuntu-latest, appimage)
|
||||
run: |
|
||||
if [[ ! -e linuxdeploy-x86_64.AppImage ]]; then
|
||||
curl -sLO https://github.com/linuxdeploy/linuxdeploy/releases/latest/download/linuxdeploy-x86_64.AppImage
|
||||
fi
|
||||
sudo cp -f linuxdeploy-x86_64.AppImage /usr/local/bin/
|
||||
sudo chmod +x /usr/local/bin/linuxdeploy-x86_64.AppImage
|
||||
if: matrix.os == 'ubuntu-latest' && matrix.version == 'appimage'
|
||||
|
||||
- name: Ccache setup
|
||||
run: ccache -z
|
||||
|
||||
|
@ -143,9 +167,18 @@ jobs:
|
|||
rm -rf Vita3K.app
|
||||
if: matrix.os == 'macos-latest'
|
||||
|
||||
- name: Clean appimage build (ubuntu-latest, appimage)
|
||||
run: |
|
||||
cd build/${{ matrix.cmake_preset }}/bin/${{ matrix.config }}
|
||||
cp -f *AppImage* ../
|
||||
rm -rf ./*
|
||||
cp -f ../*AppImage* ./
|
||||
rm -f ../*AppImage*
|
||||
if: matrix.os == 'ubuntu-latest' && matrix.version == 'appimage'
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: vita3k-${{ env.git_short_sha }}-${{ matrix.os }}
|
||||
name: vita3k-${{ env.git_short_sha }}-${{ matrix.version }}-${{ matrix.os }}
|
||||
# path is set up to be <binary_dir>/bin/<config_type> since that's how multi-config
|
||||
# generators work on CMake
|
||||
path: build/${{ matrix.cmake_preset }}/bin/${{ matrix.config }}
|
||||
|
@ -176,8 +209,20 @@ jobs:
|
|||
then
|
||||
cp $(basename $f)/$(basename $f).dmg artifacts/macos-latest.dmg
|
||||
else
|
||||
echo "Compressing $f"
|
||||
(cd $(basename $f) && zip -r ../artifacts/$(basename $f | cut -d "-" -f 3)-latest.zip *)
|
||||
if [[ $f == *ubuntu-latest ]]
|
||||
then
|
||||
if [[ $f == *AppImage* ]]
|
||||
then
|
||||
cp $(basename $f)/$(basename $f).AppImage* ../artifacts/
|
||||
else
|
||||
rm -f $(basename $f)/$(basename $f).AppImage*
|
||||
echo "Compressing $f"
|
||||
(cd $(basename $f) && zip -r ../artifacts/$(basename $f | cut -d "-" -f 4)-latest.zip *)
|
||||
fi
|
||||
else
|
||||
echo "Compressing $f"
|
||||
(cd $(basename $f) && zip -r ../artifacts/$(basename $f | cut -d "-" -f 4)-latest.zip *)
|
||||
fi
|
||||
fi
|
||||
done
|
||||
ls -al artifacts/
|
||||
|
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -14,3 +14,5 @@ build
|
|||
.cache
|
||||
# CMake user presets
|
||||
CMakeUserPresets.json
|
||||
# AppImage builder
|
||||
appimage/linuxdeploy.AppImage
|
||||
|
|
|
@ -12,6 +12,7 @@ set(CMAKE_OSX_DEPLOYMENT_TARGET 12.0)
|
|||
|
||||
option(USE_DISCORD_RICH_PRESENCE "Build Vita3K with Discord Rich Presence" ON)
|
||||
option(USE_VITA3K_UPDATE "Build Vita3K with updater." ON)
|
||||
option(BUILD_APPIMAGE "Build an AppImage." OFF)
|
||||
|
||||
if("${CMAKE_CXX_COMPILER_LAUNCHER}" STREQUAL "")
|
||||
find_program(CCACHE_PROGRAM ccache)
|
||||
|
@ -228,6 +229,17 @@ if (MSVC AND (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") AND (MSVC_VERSION GREATER_E
|
|||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /external:I${CMAKE_SOURCE_DIR}/external/ /external:W0 /external:templates-")
|
||||
endif()
|
||||
|
||||
if (${BUILD_APPIMAGE})
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
set(LINUXDEPLOY_COMMAND "${CMAKE_SOURCE_DIR}/appimage/linuxdeploy.AppImage" CACHE INTERNAL "")
|
||||
if (NOT EXISTS "${LINUXDEPLOY_COMMAND}")
|
||||
message(FATAL_ERROR "Could not find linuxdeploy at ${LINUXDEPLOY_COMMAND}!")
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Cannot build an AppImage for a non-Linux host.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
add_subdirectory(external)
|
||||
add_subdirectory(vita3k)
|
||||
add_subdirectory(tools/gen-modules)
|
||||
|
|
|
@ -105,6 +105,16 @@
|
|||
"LDFLAGS": "-fuse-ld=lld-15"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "linux-ninja-clang15-appimage",
|
||||
"inherits": "linux-ninja-clang15",
|
||||
"displayName": "Linux AppImage with Ninja and Clang",
|
||||
"description": "Linux AppImage build using Ninja Multi-Config generator and Clang 15 compiler",
|
||||
"cacheVariables": {
|
||||
"CMAKE_INSTALL_PREFIX": "/usr",
|
||||
"BUILD_APPIMAGE": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "linux-ninja-gnu",
|
||||
"inherits": "linux-ninja",
|
||||
|
@ -247,6 +257,13 @@
|
|||
"configuration": "Release",
|
||||
"configurePreset": "linux-ninja-clang"
|
||||
},
|
||||
{
|
||||
"name": "linux-ninja-clang15-appimage-release",
|
||||
"displayName": "Release",
|
||||
"description": "Build with compiler optimizations enabled and no debugging information as an AppImage",
|
||||
"configuration": "Release",
|
||||
"configurePreset": "linux-ninja-clang15-appimage"
|
||||
},
|
||||
{
|
||||
"name": "linux-ninja-clang15-debug",
|
||||
"displayName": "Debug",
|
||||
|
|
4
appimage/apprun.sh
Normal file
4
appimage/apprun.sh
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
if [ "${APPIMAGE}" != "" ]; then
|
||||
XDG_DATA_DIRS="${APPDIR}/usr/share:${XDG_DATA_DIRS}" "${APPDIR}/usr/bin/Vita3K" $@
|
||||
fi
|
5
appimage/build.sh
Executable file
5
appimage/build.sh
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
echo "Executing linuxdeploy with cmdline: LDAI_VERBOSE=1 $@"
|
||||
|
||||
LDAI_VERBOSE=1 $@
|
8
appimage/build_updater.sh
Executable file
8
appimage/build_updater.sh
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Note: The documentation at https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/blob/master/README.md for embedding update info is wrong.
|
||||
# The correct env-variable name to use is UPDATE_INFORMATION, and *not* LDAI_UPDATE_INFORMATION.
|
||||
|
||||
echo "Executing linuxdeploy with cmdline: LDAI_VERBOSE=1 UPDATE_INFORMATION=\"gh-releases-zsync|Vita3K|Vita3K|latest|Vita3K-x86_64.AppImage.zsync\" $@"
|
||||
|
||||
LDAI_VERBOSE=1 UPDATE_INFORMATION="gh-releases-zsync|Vita3K|Vita3K|latest|Vita3K-x86_64.AppImage.zsync" $@
|
5
appimage/vita3k.desktop
Normal file
5
appimage/vita3k.desktop
Normal file
|
@ -0,0 +1,5 @@
|
|||
[Desktop Entry]
|
||||
Type=Application
|
||||
Name=Vita3K
|
||||
Icon=vita3k
|
||||
Categories=Game;Emulator;X-None;
|
|
@ -174,9 +174,9 @@ if(APPLE)
|
|||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${PROJECT_SOURCE_DIR}/external/sdl/macos/SDL2.framework" "$<TARGET_FILE_DIR:vita3k>/../Frameworks/SDL2.framework")
|
||||
if(USE_VITA3K_UPDATE)
|
||||
add_custom_command(
|
||||
TARGET vita3k
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/script/update-macos.sh" "$<TARGET_FILE_DIR:vita3k>/../Resources/update-vita3k.sh")
|
||||
TARGET vita3k
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/script/update-macos.sh" "$<TARGET_FILE_DIR:vita3k>/../Resources/update-vita3k.sh")
|
||||
endif()
|
||||
if(USE_DISCORD_RICH_PRESENCE)
|
||||
add_custom_command(
|
||||
|
@ -201,17 +201,46 @@ if(APPLE)
|
|||
set_source_files_properties(${MOLTENVK_DYLIB} PROPERTIES MACOSX_PACKAGE_LOCATION Frameworks)
|
||||
elseif(LINUX)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath='$ORIGIN'")
|
||||
add_custom_command(
|
||||
if(BUILD_APPIMAGE)
|
||||
set(APPDIR "${CMAKE_BINARY_DIR}/AppImage")
|
||||
add_custom_command(
|
||||
TARGET vita3k
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/../data" "$<TARGET_FILE_DIR:vita3k>/data"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/../lang" "$<TARGET_FILE_DIR:vita3k>/lang"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/shaders-builtin" "$<TARGET_FILE_DIR:vita3k>/shaders-builtin")
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory "${APPDIR}/usr/share/Vita3K"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/../data" "${APPDIR}/usr/share/Vita3K/data"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/../lang" "${APPDIR}/usr/share/Vita3K/lang"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/shaders-builtin" "${APPDIR}/usr/share/Vita3K/shaders-builtin")
|
||||
if(USE_VITA3K_UPDATE)
|
||||
set(LINUXDEPLOY_WRAPPER "${CMAKE_SOURCE_DIR}/appimage/build_updater.sh")
|
||||
else()
|
||||
set(LINUXDEPLOY_WRAPPER "${CMAKE_SOURCE_DIR}/appimage/build.sh")
|
||||
endif()
|
||||
if(USE_DISCORD_RICH_PRESENCE)
|
||||
set(DISCORD_LIB_APPIMAGE "-l \"${CMAKE_BINARY_DIR}/external/discord_game_sdk/lib/x86_64/libdiscord_game_sdk.so\"")
|
||||
else()
|
||||
set(DISCORD_LIB_APPIMAGE "")
|
||||
endif()
|
||||
add_custom_command(
|
||||
TARGET vita3k
|
||||
POST_BUILD
|
||||
COMMAND ${LINUXDEPLOY_WRAPPER} ${LINUXDEPLOY_COMMAND} --appdir="${APPDIR}"
|
||||
-e "$<TARGET_FILE:vita3k>" --icon-filename="vita3k"
|
||||
-i "${CMAKE_CURRENT_SOURCE_DIR}/../data/image/icon.png" -d "${CMAKE_CURRENT_SOURCE_DIR}/../appimage/vita3k.desktop"
|
||||
--custom-apprun="${CMAKE_CURRENT_SOURCE_DIR}/../appimage/apprun.sh" --output=appimage ${DISCORD_LIB_APPIMAGE}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_BINARY_DIR}/*.AppImage*" "$<TARGET_FILE_DIR:vita3k>/"
|
||||
COMMAND ${CMAKE_COMMAND} -E rm "${CMAKE_CURRENT_BINARY_DIR}/*.AppImage*")
|
||||
endif()
|
||||
add_custom_command(
|
||||
TARGET vita3k
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/../data" "$<TARGET_FILE_DIR:vita3k>/data"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/../lang" "$<TARGET_FILE_DIR:vita3k>/lang"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/shaders-builtin" "$<TARGET_FILE_DIR:vita3k>/shaders-builtin")
|
||||
if(USE_VITA3K_UPDATE)
|
||||
add_custom_command(
|
||||
TARGET vita3k
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/script/update-linux.sh" "$<TARGET_FILE_DIR:vita3k>/update-vita3k.sh")
|
||||
TARGET vita3k
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/script/update-linux.sh" "$<TARGET_FILE_DIR:vita3k>/update-vita3k.sh")
|
||||
endif()
|
||||
if(USE_DISCORD_RICH_PRESENCE)
|
||||
add_custom_command(
|
||||
|
@ -232,9 +261,9 @@ elseif(WIN32)
|
|||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/external/sdl/windows/lib/x64/SDL2.dll" "$<TARGET_FILE_DIR:vita3k>")
|
||||
if(USE_VITA3K_UPDATE)
|
||||
add_custom_command(
|
||||
TARGET vita3k
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/script/update-windows.bat" "$<TARGET_FILE_DIR:vita3k>/update-vita3k.bat")
|
||||
TARGET vita3k
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/script/update-windows.bat" "$<TARGET_FILE_DIR:vita3k>/update-vita3k.bat")
|
||||
endif()
|
||||
if(USE_DISCORD_RICH_PRESENCE)
|
||||
add_custom_command(
|
||||
|
|
Loading…
Reference in a new issue