From 754bc58a5bf12f6ec4261e286bf644c7da12e397 Mon Sep 17 00:00:00 2001 From: Rosalie Wanders Date: Sun, 20 Sep 2020 20:37:48 +0200 Subject: [PATCH] work --- CMakeLists.txt | 6 +++- Source/3rdParty/CMakeLists.txt | 10 ++++-- Source/Installer/CMakeLists.txt | 6 +--- Source/Installer/RMG.iss | 41 +---------------------- Source/Installer/create_installer.bat.in | 6 ++++ Source/Script/Build.sh | 13 +++++++- Source/Script/BundleDependencies.sh | 42 ++++++++++++++++++++++++ 7 files changed, 75 insertions(+), 49 deletions(-) create mode 100644 Source/Installer/create_installer.bat.in create mode 100644 Source/Script/BundleDependencies.sh diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ab9e6e3..cffc09a3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ set(CMAKE_INSTALL_PREFIX "") find_package(Git REQUIRED) execute_process( COMMAND ${GIT_EXECUTABLE} describe --tags --always --dirty - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" + WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" OUTPUT_VARIABLE GIT_VERSION ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE @@ -23,6 +23,10 @@ install(TARGETS RMG if (WIN32) add_subdirectory(Source/Installer) + + add_custom_target(bundle_dependencies + COMMAND "${CMAKE_SOURCE_DIR}/Source/Script/BundleDependencies.sh" "${CMAKE_SOURCE_DIR}/Bin/${CMAKE_BUILD_TYPE}/rmg/RMG.exe" "${CMAKE_SOURCE_DIR}/Bin/${CMAKE_BUILD_TYPE}/rmg" "/mingw64/bin" + ) endif() add_subdirectory(Source/3rdParty) diff --git a/Source/3rdParty/CMakeLists.txt b/Source/3rdParty/CMakeLists.txt index 53c24da6..42348a0d 100644 --- a/Source/3rdParty/CMakeLists.txt +++ b/Source/3rdParty/CMakeLists.txt @@ -88,11 +88,17 @@ ExternalProject_Add(mupen64plus-input-raphnetraw ) set(GLIDEN64_BUILD_DIR "${THIRDPARTY_DIR}/mupen64plus-video-GLideN64/projects/cmake") +if (MSYS) + set(GLIDEN64_LIB "${GLIDEN64_BUILD_DIR}/mupen64plus-video-GLideN64.${SO_EXT}") +else() + set(GLIDEN64_LIB "${GLIDEN64_BUILD_DIR}/plugin/${CMAKE_BUILD_TYPE}/mupen64plus-video-GLideN64.${SO_EXT}") +endif() + ExternalProject_Add(mupen64plus-video-GLideN64 SOURCE_DIR mupen64plus-video-GLideN64 GIT_REPOSITORY https://github.com/gonetz/GLideN64 - GIT_TAG 229a6bc788fe4601fbe00288fcccdedb9396340f + GIT_TAG 1f5f9874d947bf5d10b9ef0e4f80cc6b4fa10d0d INSTALL_COMMAND "" @@ -102,7 +108,7 @@ ExternalProject_Add(mupen64plus-video-GLideN64 SOURCE_SUBDIR ./src/ BINARY_DIR ${GLIDEN64_BUILD_DIR} - BUILD_BYPRODUCTS ${GLIDEN64_BUILD_DIR}/plugin/${CMAKE_BUILD_TYPE}/mupen64plus-video-GLideN64.${SO_EXT} + BUILD_BYPRODUCTS ${GLIDEN64_LIB} BUILD_BYPRODUCTS ${THIRDPARTY_DIR}/mupen64plus-video-GLideN64/ini/GLideN64.custom.ini ) diff --git a/Source/Installer/CMakeLists.txt b/Source/Installer/CMakeLists.txt index 7f95e571..b2a5d295 100644 --- a/Source/Installer/CMakeLists.txt +++ b/Source/Installer/CMakeLists.txt @@ -1,8 +1,4 @@ # # InnoSetup Installer CMakeLists.txt # -add_custom_target(create_installer - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMENT "Creating InnoSetup Installer" - COMMAND ISCC.exe .\\RMG.iss /DMyAppDir="${CMAKE_SOURCE_DIR}\\Bin\\${CMAKE_BUILD_TYPE}\\rmg" /DMyAppVer="${GIT_VERSION}" /DMyOutDir="${CMAKE_SOURCE_DIR}\\Bin" /DMySrcDir="${CMAKE_SOURCE_DIR}" -) +configure_file(create_installer.bat.in create_installer.bat) diff --git a/Source/Installer/RMG.iss b/Source/Installer/RMG.iss index e4aecc34..cbd9ede2 100644 --- a/Source/Installer/RMG.iss +++ b/Source/Installer/RMG.iss @@ -47,46 +47,7 @@ Name: "english"; MessagesFile: "compiler:Default.isl" Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] -Source: "{#MyAppDir}\RMG.exe"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\Config\stylesheet.qss"; DestDir: "{app}\Config"; Flags: ignoreversion -Source: "{#MyAppDir}\Core\*"; DestDir: "{app}\Core"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#MyAppDir}\Data\*"; DestDir: "{app}\Data"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#MyAppDir}\iconengines\*"; DestDir: "{app}\iconengines"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#MyAppDir}\imageformats\*"; DestDir: "{app}\imageformats"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#MyAppDir}\platforms\*"; DestDir: "{app}\platforms"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#MyAppDir}\Plugin\*"; DestDir: "{app}\Plugin"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#MyAppDir}\styles\*"; DestDir: "{app}\styles"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#MyAppDir}\translations\*"; DestDir: "{app}\translations"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "{#MyAppDir}\libbrotlicommon.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libbrotlidec.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libbz2-1.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libdouble-conversion.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libfreetype-6.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libgcc_s_seh-1.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libglib-2.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libgraphite2.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libharfbuzz-0.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libhidapi-0.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libiconv-2.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libicudt67.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libicuin67.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libicuuc67.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libintl-8.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libminizip-1.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libpcre-1.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libpcre2-16-0.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libpng16-16.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libsamplerate-0.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libspeexdsp-1.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libstdc++-6.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libwinpthread-1.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\libzstd.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\Qt5Core.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\Qt5Gui.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\Qt5Svg.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\Qt5Widgets.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\SDL2.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#MyAppDir}\zlib1.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "{#MyAppDir}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] diff --git a/Source/Installer/create_installer.bat.in b/Source/Installer/create_installer.bat.in new file mode 100644 index 00000000..0960fe2b --- /dev/null +++ b/Source/Installer/create_installer.bat.in @@ -0,0 +1,6 @@ +ISCC.exe ^ + ".\Source\Installer\RMG.iss" ^ + "/DMyAppDir=..\..\Bin\${CMAKE_BUILD_TYPE}\rmg" ^ + "/DMyAppVer=${GIT_VERSION}" ^ + "/DMyOutDir=..\..\Bin" ^ + "/DMySrcDir=..\..\" \ No newline at end of file diff --git a/Source/Script/Build.sh b/Source/Script/Build.sh index 312c2645..ec2fbcdf 100755 --- a/Source/Script/Build.sh +++ b/Source/Script/Build.sh @@ -6,14 +6,25 @@ toplvl_dir="$(realpath "$script_dir/../../")" build_dir="$toplvl_dir/Build" build_config="${1:-Debug}" install_dir="$toplvl_dir/Bin/$build_config" +generator="${2:-Unix Makefiles}" mkdir -p "$build_dir" pushd "$build_dir" -cmake -S "$toplvl_dir" -B "$build_dir" -DCMAKE_BUILD_TYPE="$build_config" +if [[ $(uname -s) = *MINGW64* ]] +then + generator="MSYS Makefiles" +fi + +cmake -S "$toplvl_dir" -B "$build_dir" -DCMAKE_BUILD_TYPE="$build_config" -G "$generator" make -j6 make install DESTDIR="$install_dir" +if [[ $(uname -s) = *MINGW64* ]] +then + make bundle_dependencies +fi + popd diff --git a/Source/Script/BundleDependencies.sh b/Source/Script/BundleDependencies.sh new file mode 100644 index 00000000..3ba5bcef --- /dev/null +++ b/Source/Script/BundleDependencies.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +# +# ./BundleDependencies.sh "./Bin/Release/rmg/RMG.exe" "./Bin/Release/rmg" "/mingw64/bin" +# +set -e + +exe="$1" +bin_dir="$2" +path="$3" + +function copyForOBJ() { + local deps=`objdump.exe -p $1 | grep 'DLL Name:' | sed -e "s/\t*DLL Name: //g"` + while read -r line + do + findAndCopyDLL $line + done <<< "$deps" +} + +function findAndCopyDLL() { + local file="$path/$1" + + if [ -f $file ] && [ ! -f "$bin_dir/$1" ] + then + cp "$file" "$bin_dir" + copyForOBJ $file + return 0 + fi + + return 0 +} + + +for ext in dll exe +do + while read -r file_line + do + echo "=> Copying dependencies for $file_line" + copyForOBJ "$file_line" + done < <(find "$bin_dir" -name "*.$ext") +done + +windeployqt "$exe"