mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	travis: Split build scripts for different platforms
This commit also separates clang-format from the linux build, closing #2702.
This commit is contained in:
		
							parent
							
								
									74d4050924
								
							
						
					
					
						commit
						15a2388a33
					
				
					 14 changed files with 233 additions and 227 deletions
				
			
		|  | @ -1,59 +0,0 @@ | ||||||
| #!/bin/bash |  | ||||||
| 
 |  | ||||||
| set -e |  | ||||||
| set -x |  | ||||||
| 
 |  | ||||||
| if grep -nr '\s$' src *.yml *.txt *.md Doxyfile .gitignore .gitmodules .travis* dist/*.desktop \ |  | ||||||
|                  dist/*.svg dist/*.xml; then |  | ||||||
|     echo Trailing whitespace found, aborting |  | ||||||
|     exit 1 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # Only run clang-format on Linux because we don't have 4.0 on OS X images |  | ||||||
| if [ "$TRAVIS_OS_NAME" = "linux" ]; then |  | ||||||
|     # Default clang-format points to default 3.5 version one |  | ||||||
|     CLANG_FORMAT=clang-format-3.9 |  | ||||||
|     $CLANG_FORMAT --version |  | ||||||
| 
 |  | ||||||
|     if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then |  | ||||||
|         # Get list of every file modified in this pull request |  | ||||||
|         files_to_lint="$(git diff --name-only --diff-filter=ACMRTUXB $TRAVIS_COMMIT_RANGE | grep '^src/[^.]*[.]\(cpp\|h\)$' || true)" |  | ||||||
|     else |  | ||||||
|         # Check everything for branch pushes |  | ||||||
|         files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')" |  | ||||||
|     fi |  | ||||||
| 
 |  | ||||||
|     # Turn off tracing for this because it's too verbose |  | ||||||
|     set +x |  | ||||||
| 
 |  | ||||||
|     for f in $files_to_lint; do |  | ||||||
|         d=$(diff -u "$f" <($CLANG_FORMAT "$f") || true) |  | ||||||
|         if ! [ -z "$d" ]; then |  | ||||||
|             echo "!!! $f not compliant to coding style, here is the fix:" |  | ||||||
|             echo "$d" |  | ||||||
|             fail=1 |  | ||||||
|         fi |  | ||||||
|     done |  | ||||||
| 
 |  | ||||||
|     set -x |  | ||||||
| 
 |  | ||||||
|     if [ "$fail" = 1 ]; then |  | ||||||
|         exit 1 |  | ||||||
|     fi |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| #if OS is linux or is not set |  | ||||||
| if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then |  | ||||||
|     docker run -v $(pwd):/citra ubuntu:16.04 /bin/bash /citra/.travis-build-docker.sh |  | ||||||
| elif [ "$TRAVIS_OS_NAME" = "osx" ]; then |  | ||||||
|     set -o pipefail |  | ||||||
| 
 |  | ||||||
|     export MACOSX_DEPLOYMENT_TARGET=10.9 |  | ||||||
|     export Qt5_DIR=$(brew --prefix)/opt/qt5 |  | ||||||
| 
 |  | ||||||
|     mkdir build && cd build |  | ||||||
|     cmake .. -DUSE_SYSTEM_CURL=ON -DCMAKE_OSX_ARCHITECTURES="x86_64;x86_64h" -DCMAKE_BUILD_TYPE=Release |  | ||||||
|     make -j4 |  | ||||||
| 
 |  | ||||||
|     ctest -VV -C Release |  | ||||||
| fi |  | ||||||
|  | @ -1,12 +0,0 @@ | ||||||
| #!/bin/sh |  | ||||||
| 
 |  | ||||||
| set -e |  | ||||||
| set -x |  | ||||||
| 
 |  | ||||||
| #if OS is linux or is not set |  | ||||||
| if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then |  | ||||||
|     docker pull ubuntu:16.04 |  | ||||||
| elif [ "$TRAVIS_OS_NAME" = "osx" ]; then |  | ||||||
|     brew update |  | ||||||
|     brew install qt5 sdl2 dylibbundler p7zip |  | ||||||
| fi |  | ||||||
|  | @ -1,139 +0,0 @@ | ||||||
| GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`" |  | ||||||
| GITREV="`git show -s --format='%h'`" |  | ||||||
| mkdir -p artifacts |  | ||||||
| 
 |  | ||||||
| if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then |  | ||||||
|     REV_NAME="citra-linux-${GITDATE}-${GITREV}" |  | ||||||
|     ARCHIVE_NAME="${REV_NAME}.tar.xz" |  | ||||||
|     COMPRESSION_FLAGS="-cJvf" |  | ||||||
|     mkdir "$REV_NAME" |  | ||||||
| 
 |  | ||||||
|     cp build/src/citra/citra "$REV_NAME" |  | ||||||
|     cp build/src/citra_qt/citra-qt "$REV_NAME" |  | ||||||
| elif [ "$TRAVIS_OS_NAME" = "osx" ]; then |  | ||||||
|     REV_NAME="citra-osx-${GITDATE}-${GITREV}" |  | ||||||
|     ARCHIVE_NAME="${REV_NAME}.tar.gz" |  | ||||||
|     COMPRESSION_FLAGS="-czvf" |  | ||||||
|     mkdir "$REV_NAME" |  | ||||||
| 
 |  | ||||||
|     cp build/src/citra/citra "$REV_NAME" |  | ||||||
|     cp -r build/src/citra_qt/citra-qt.app "$REV_NAME" |  | ||||||
| 
 |  | ||||||
|     # move qt libs into app bundle for deployment |  | ||||||
|     $(brew --prefix)/opt/qt5/bin/macdeployqt "${REV_NAME}/citra-qt.app" |  | ||||||
| 
 |  | ||||||
|     # move SDL2 libs into folder for deployment |  | ||||||
|     dylibbundler -b -x "${REV_NAME}/citra" -cd -d "${REV_NAME}/libs" -p "@executable_path/libs/" |  | ||||||
| 
 |  | ||||||
|     # Make the changes to make the citra-qt app standalone (i.e. not dependent on the current brew installation). |  | ||||||
|     # To do this, the absolute references to each and every QT framework must be re-written to point to the local frameworks |  | ||||||
|     # (in the Contents/Frameworks folder). |  | ||||||
|     # The "install_name_tool" is used to do so. |  | ||||||
| 
 |  | ||||||
|     # Coreutils is a hack to coerce Homebrew to point to the absolute Cellar path (symlink dereferenced). i.e: |  | ||||||
|     # ls -l /usr/local/opt/qt5:: /usr/local/opt/qt5 -> ../Cellar/qt5/5.6.1-1 |  | ||||||
|     # grealpath ../Cellar/qt5/5.6.1-1:: /usr/local/Cellar/qt5/5.6.1-1 |  | ||||||
|     brew install coreutils |  | ||||||
| 
 |  | ||||||
|     REV_NAME_ALT=$REV_NAME/ |  | ||||||
|     # grealpath is located in coreutils, there is no "realpath" for OS X :( |  | ||||||
|     QT_BREWS_PATH=$(grealpath "$(brew --prefix qt5)") |  | ||||||
|     BREW_PATH=$(brew --prefix) |  | ||||||
|     QT_VERSION_NUM=5 |  | ||||||
| 
 |  | ||||||
|     $BREW_PATH/opt/qt5/bin/macdeployqt "${REV_NAME_ALT}citra-qt.app" \ |  | ||||||
|         -executable="${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt" |  | ||||||
| 
 |  | ||||||
|     # These are the files that macdeployqt packed into Contents/Frameworks/ - we don't want those, so we replace them. |  | ||||||
|     declare -a macos_libs=("QtCore" "QtWidgets" "QtGui" "QtOpenGL" "QtPrintSupport") |  | ||||||
| 
 |  | ||||||
|     for macos_lib in "${macos_libs[@]}" |  | ||||||
|     do |  | ||||||
|         SC_FRAMEWORK_PART=$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib |  | ||||||
|         # Replace macdeployqt versions of the Frameworks with our own (from /usr/local/opt/qt5/lib/) |  | ||||||
|         cp "$BREW_PATH/opt/qt5/lib/$SC_FRAMEWORK_PART" "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" |  | ||||||
| 
 |  | ||||||
|         # Replace references within the embedded Framework files with "internal" versions. |  | ||||||
|         for macos_lib2 in "${macos_libs[@]}" |  | ||||||
|         do |  | ||||||
|             # Since brew references both the non-symlinked and symlink paths of QT5, it needs to be duplicated. |  | ||||||
|             # /usr/local/Cellar/qt5/5.6.1-1/lib and /usr/local/opt/qt5/lib both resolve to the same files. |  | ||||||
|             # So the two lines below are effectively duplicates when resolved as a path, but as strings, they aren't. |  | ||||||
|             RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2 |  | ||||||
|             install_name_tool -change \ |  | ||||||
|                 $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \ |  | ||||||
|                 @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ |  | ||||||
|                 "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" |  | ||||||
|             install_name_tool -change \ |  | ||||||
|                 "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \ |  | ||||||
|                 @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ |  | ||||||
|                 "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" |  | ||||||
|         done |  | ||||||
|     done |  | ||||||
| 
 |  | ||||||
|     # Handles `This application failed to start because it could not find or load the Qt platform plugin "cocoa"` |  | ||||||
|     # Which manifests itself as: |  | ||||||
|     # "Exception Type: EXC_CRASH (SIGABRT) | Exception Codes: 0x0000000000000000, 0x0000000000000000 | Exception Note: EXC_CORPSE_NOTIFY" |  | ||||||
|     # There may be more dylibs needed to be fixed... |  | ||||||
|     declare -a macos_plugins=("Plugins/platforms/libqcocoa.dylib") |  | ||||||
| 
 |  | ||||||
|     for macos_lib in "${macos_plugins[@]}" |  | ||||||
|     do |  | ||||||
|         install_name_tool -id @executable_path/../$macos_lib "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" |  | ||||||
|         for macos_lib2 in "${macos_libs[@]}" |  | ||||||
|         do |  | ||||||
|             RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2 |  | ||||||
|             install_name_tool -change \ |  | ||||||
|                 $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \ |  | ||||||
|                 @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ |  | ||||||
|                 "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" |  | ||||||
|             install_name_tool -change \ |  | ||||||
|                 "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \ |  | ||||||
|                 @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ |  | ||||||
|                 "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" |  | ||||||
|         done |  | ||||||
|     done |  | ||||||
| 
 |  | ||||||
|     for macos_lib in "${macos_libs[@]}" |  | ||||||
|     do |  | ||||||
|         # Debugging info for Travis-CI |  | ||||||
|         otool -L "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib" |  | ||||||
|     done |  | ||||||
| 
 |  | ||||||
|     # Make the citra-qt.app application launch a debugging terminal. |  | ||||||
|     # Store away the actual binary |  | ||||||
|     mv ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt-bin |  | ||||||
| 
 |  | ||||||
|     cat > ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt <<EOL |  | ||||||
| #!/usr/bin/env bash |  | ||||||
| cd "\`dirname "\$0"\`" |  | ||||||
| chmod +x citra-qt-bin |  | ||||||
| open citra-qt-bin --args "\$@" |  | ||||||
| EOL |  | ||||||
|     # Content that will serve as the launching script for citra (within the .app folder) |  | ||||||
| 
 |  | ||||||
|     # Make the launching script executable |  | ||||||
|     chmod +x ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt |  | ||||||
| 
 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # Copy documentation |  | ||||||
| cp license.txt "$REV_NAME" |  | ||||||
| cp README.md "$REV_NAME" |  | ||||||
| 
 |  | ||||||
| tar $COMPRESSION_FLAGS "$ARCHIVE_NAME" "$REV_NAME" |  | ||||||
| 
 |  | ||||||
| # Find out what release we are building |  | ||||||
| if [ -z $TRAVIS_TAG ]; then |  | ||||||
|     RELEASE_NAME=head |  | ||||||
| else |  | ||||||
|     RELEASE_NAME=$(echo $TRAVIS_TAG | cut -d- -f1) |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| mv "$REV_NAME" $RELEASE_NAME |  | ||||||
| 
 |  | ||||||
| 7z a "$REV_NAME.7z" $RELEASE_NAME |  | ||||||
| 
 |  | ||||||
| # move the compiled archive into the artifacts directory to be uploaded by travis releases |  | ||||||
| mv "$ARCHIVE_NAME" artifacts/ |  | ||||||
| mv "$REV_NAME.7z" artifacts/ |  | ||||||
							
								
								
									
										34
									
								
								.travis.yml
									
										
									
									
									
								
							
							
						
						
									
										34
									
								
								.travis.yml
									
										
									
									
									
								
							|  | @ -2,24 +2,32 @@ language: cpp | ||||||
| matrix: | matrix: | ||||||
|   include: |   include: | ||||||
|     - os: linux |     - os: linux | ||||||
|  |       env: NAME="linux build" | ||||||
|       sudo: required |       sudo: required | ||||||
|       dist: trusty |       dist: trusty | ||||||
|  |       services: docker | ||||||
|  |       addons: | ||||||
|  |         apt: | ||||||
|  |           packages: | ||||||
|  |             - p7zip-full | ||||||
|  |       install: "./.travis/linux/deps.sh" | ||||||
|  |       script: "./.travis/linux/build.sh" | ||||||
|  |       after_success: "./.travis/linux/upload.sh" | ||||||
|     - os: osx |     - os: osx | ||||||
|  |       env: NAME="macos build" | ||||||
|       sudo: false |       sudo: false | ||||||
|       osx_image: xcode7.3 |       osx_image: xcode7.3 | ||||||
| 
 |       install: "./.travis/macos/deps.sh" | ||||||
| services: |       script: "./.travis/macos/build.sh" | ||||||
|   - docker |       after_success: "./.travis/macos/upload.sh" | ||||||
| 
 |     - os: linux | ||||||
| addons: |       env: NAME="clang-format" | ||||||
|   apt: |       dist: trusty | ||||||
|     packages: |       addons: | ||||||
|       - clang-format-3.9 |         apt: | ||||||
|       - p7zip-full |           packages: | ||||||
| 
 |             - clang-format-3.9 | ||||||
| install: "./.travis-deps.sh" |       script: "./.travis/clang-format/script.sh" | ||||||
| script: "./.travis-build.sh" |  | ||||||
| after_success: "./.travis-upload.sh" |  | ||||||
| 
 | 
 | ||||||
| deploy: | deploy: | ||||||
|   provider: releases |   provider: releases | ||||||
|  |  | ||||||
							
								
								
									
										37
									
								
								.travis/clang-format/script.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										37
									
								
								.travis/clang-format/script.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,37 @@ | ||||||
|  | #!/bin/bash -ex | ||||||
|  | 
 | ||||||
|  | if grep -nr '\s$' src *.yml *.txt *.md Doxyfile .gitignore .gitmodules .travis* dist/*.desktop \ | ||||||
|  |                  dist/*.svg dist/*.xml; then | ||||||
|  |     echo Trailing whitespace found, aborting | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | # Default clang-format points to default 3.5 version one | ||||||
|  | CLANG_FORMAT=clang-format-3.9 | ||||||
|  | $CLANG_FORMAT --version | ||||||
|  | 
 | ||||||
|  | if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then | ||||||
|  |     # Get list of every file modified in this pull request | ||||||
|  |     files_to_lint="$(git diff --name-only --diff-filter=ACMRTUXB $TRAVIS_COMMIT_RANGE | grep '^src/[^.]*[.]\(cpp\|h\)$' || true)" | ||||||
|  | else | ||||||
|  |     # Check everything for branch pushes | ||||||
|  |     files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | # Turn off tracing for this because it's too verbose | ||||||
|  | set +x | ||||||
|  | 
 | ||||||
|  | for f in $files_to_lint; do | ||||||
|  |     d=$(diff -u "$f" <($CLANG_FORMAT "$f") || true) | ||||||
|  |     if ! [ -z "$d" ]; then | ||||||
|  |         echo "!!! $f not compliant to coding style, here is the fix:" | ||||||
|  |         echo "$d" | ||||||
|  |         fail=1 | ||||||
|  |     fi | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | set -x | ||||||
|  | 
 | ||||||
|  | if [ "$fail" = 1 ]; then | ||||||
|  |     exit 1 | ||||||
|  | fi | ||||||
							
								
								
									
										22
									
								
								.travis/common/post-upload.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										22
									
								
								.travis/common/post-upload.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,22 @@ | ||||||
|  | #!/bin/bash -ex | ||||||
|  | 
 | ||||||
|  | # Copy documentation | ||||||
|  | cp license.txt "$REV_NAME" | ||||||
|  | cp README.md "$REV_NAME" | ||||||
|  | 
 | ||||||
|  | tar $COMPRESSION_FLAGS "$ARCHIVE_NAME" "$REV_NAME" | ||||||
|  | 
 | ||||||
|  | # Find out what release we are building | ||||||
|  | if [ -z $TRAVIS_TAG ]; then | ||||||
|  |     RELEASE_NAME=head | ||||||
|  | else | ||||||
|  |     RELEASE_NAME=$(echo $TRAVIS_TAG | cut -d- -f1) | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | mv "$REV_NAME" $RELEASE_NAME | ||||||
|  | 
 | ||||||
|  | 7z a "$REV_NAME.7z" $RELEASE_NAME | ||||||
|  | 
 | ||||||
|  | # move the compiled archive into the artifacts directory to be uploaded by travis releases | ||||||
|  | mv "$ARCHIVE_NAME" artifacts/ | ||||||
|  | mv "$REV_NAME.7z" artifacts/ | ||||||
							
								
								
									
										6
									
								
								.travis/common/pre-upload.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								.travis/common/pre-upload.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,6 @@ | ||||||
|  | #!/bin/bash -ex | ||||||
|  | 
 | ||||||
|  | GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`" | ||||||
|  | GITREV="`git show -s --format='%h'`" | ||||||
|  | 
 | ||||||
|  | mkdir -p artifacts | ||||||
							
								
								
									
										3
									
								
								.travis/linux/build.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								.travis/linux/build.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,3 @@ | ||||||
|  | #!/bin/bash -ex | ||||||
|  | 
 | ||||||
|  | docker run -v $(pwd):/citra ubuntu:16.04 /bin/bash /citra/.travis/linux/docker.sh | ||||||
							
								
								
									
										3
									
								
								.travis/linux/deps.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								.travis/linux/deps.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,3 @@ | ||||||
|  | #!/bin/sh -ex | ||||||
|  | 
 | ||||||
|  | docker pull ubuntu:16.04 | ||||||
							
								
								
									
										5
									
								
								.travis-build-docker.sh → .travis/linux/docker.sh
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										5
									
								
								.travis-build-docker.sh → .travis/linux/docker.sh
									
										
									
									
									
										
										
										Normal file → Executable file
									
								
							|  | @ -1,7 +1,4 @@ | ||||||
| #!/bin/sh | #!/bin/bash -ex | ||||||
| 
 |  | ||||||
| set -e |  | ||||||
| set -x |  | ||||||
| 
 | 
 | ||||||
| cd /citra | cd /citra | ||||||
| 
 | 
 | ||||||
							
								
								
									
										14
									
								
								.travis/linux/upload.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								.travis/linux/upload.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,14 @@ | ||||||
|  | #!/bin/bash -ex | ||||||
|  | 
 | ||||||
|  | . .travis/common/pre-upload.sh | ||||||
|  | 
 | ||||||
|  | REV_NAME="citra-linux-${GITDATE}-${GITREV}" | ||||||
|  | ARCHIVE_NAME="${REV_NAME}.tar.xz" | ||||||
|  | COMPRESSION_FLAGS="-cJvf" | ||||||
|  | 
 | ||||||
|  | mkdir "$REV_NAME" | ||||||
|  | 
 | ||||||
|  | cp build/src/citra/citra "$REV_NAME" | ||||||
|  | cp build/src/citra_qt/citra-qt "$REV_NAME" | ||||||
|  | 
 | ||||||
|  | . .travis/common/post-upload.sh | ||||||
							
								
								
									
										12
									
								
								.travis/macos/build.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								.travis/macos/build.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | #!/bin/bash -ex | ||||||
|  | 
 | ||||||
|  | set -o pipefail | ||||||
|  | 
 | ||||||
|  | export MACOSX_DEPLOYMENT_TARGET=10.9 | ||||||
|  | export Qt5_DIR=$(brew --prefix)/opt/qt5 | ||||||
|  | 
 | ||||||
|  | mkdir build && cd build | ||||||
|  | cmake .. -DUSE_SYSTEM_CURL=ON -DCMAKE_OSX_ARCHITECTURES="x86_64;x86_64h" -DCMAKE_BUILD_TYPE=Release | ||||||
|  | make -j4 | ||||||
|  | 
 | ||||||
|  | ctest -VV -C Release | ||||||
							
								
								
									
										4
									
								
								.travis/macos/deps.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								.travis/macos/deps.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,4 @@ | ||||||
|  | #!/bin/sh -ex | ||||||
|  | 
 | ||||||
|  | brew update | ||||||
|  | brew install qt5 sdl2 dylibbundler p7zip | ||||||
							
								
								
									
										110
									
								
								.travis/macos/upload.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										110
									
								
								.travis/macos/upload.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,110 @@ | ||||||
|  | #!/bin/bash -ex | ||||||
|  | 
 | ||||||
|  | . .travis/common/pre-upload.sh | ||||||
|  | 
 | ||||||
|  | REV_NAME="citra-osx-${GITDATE}-${GITREV}" | ||||||
|  | ARCHIVE_NAME="${REV_NAME}.tar.gz" | ||||||
|  | COMPRESSION_FLAGS="-czvf" | ||||||
|  | 
 | ||||||
|  | mkdir "$REV_NAME" | ||||||
|  | 
 | ||||||
|  | cp build/src/citra/citra "$REV_NAME" | ||||||
|  | cp -r build/src/citra_qt/citra-qt.app "$REV_NAME" | ||||||
|  | 
 | ||||||
|  | # move qt libs into app bundle for deployment | ||||||
|  | $(brew --prefix)/opt/qt5/bin/macdeployqt "${REV_NAME}/citra-qt.app" | ||||||
|  | 
 | ||||||
|  | # move SDL2 libs into folder for deployment | ||||||
|  | dylibbundler -b -x "${REV_NAME}/citra" -cd -d "${REV_NAME}/libs" -p "@executable_path/libs/" | ||||||
|  | 
 | ||||||
|  | # Make the changes to make the citra-qt app standalone (i.e. not dependent on the current brew installation). | ||||||
|  | # To do this, the absolute references to each and every QT framework must be re-written to point to the local frameworks | ||||||
|  | # (in the Contents/Frameworks folder). | ||||||
|  | # The "install_name_tool" is used to do so. | ||||||
|  | 
 | ||||||
|  | # Coreutils is a hack to coerce Homebrew to point to the absolute Cellar path (symlink dereferenced). i.e: | ||||||
|  | # ls -l /usr/local/opt/qt5:: /usr/local/opt/qt5 -> ../Cellar/qt5/5.6.1-1 | ||||||
|  | # grealpath ../Cellar/qt5/5.6.1-1:: /usr/local/Cellar/qt5/5.6.1-1 | ||||||
|  | brew install coreutils || brew upgrade coreutils || true | ||||||
|  | 
 | ||||||
|  | REV_NAME_ALT=$REV_NAME/ | ||||||
|  | # grealpath is located in coreutils, there is no "realpath" for OS X :( | ||||||
|  | QT_BREWS_PATH=$(grealpath "$(brew --prefix qt5)") | ||||||
|  | BREW_PATH=$(brew --prefix) | ||||||
|  | QT_VERSION_NUM=5 | ||||||
|  | 
 | ||||||
|  | $BREW_PATH/opt/qt5/bin/macdeployqt "${REV_NAME_ALT}citra-qt.app" \ | ||||||
|  |     -executable="${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt" | ||||||
|  | 
 | ||||||
|  | # These are the files that macdeployqt packed into Contents/Frameworks/ - we don't want those, so we replace them. | ||||||
|  | declare -a macos_libs=("QtCore" "QtWidgets" "QtGui" "QtOpenGL" "QtPrintSupport") | ||||||
|  | 
 | ||||||
|  | for macos_lib in "${macos_libs[@]}" | ||||||
|  | do | ||||||
|  |     SC_FRAMEWORK_PART=$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib | ||||||
|  |     # Replace macdeployqt versions of the Frameworks with our own (from /usr/local/opt/qt5/lib/) | ||||||
|  |     cp "$BREW_PATH/opt/qt5/lib/$SC_FRAMEWORK_PART" "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" | ||||||
|  | 
 | ||||||
|  |     # Replace references within the embedded Framework files with "internal" versions. | ||||||
|  |     for macos_lib2 in "${macos_libs[@]}" | ||||||
|  |     do | ||||||
|  |         # Since brew references both the non-symlinked and symlink paths of QT5, it needs to be duplicated. | ||||||
|  |         # /usr/local/Cellar/qt5/5.6.1-1/lib and /usr/local/opt/qt5/lib both resolve to the same files. | ||||||
|  |         # So the two lines below are effectively duplicates when resolved as a path, but as strings, they aren't. | ||||||
|  |         RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2 | ||||||
|  |         install_name_tool -change \ | ||||||
|  |             $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \ | ||||||
|  |             @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ | ||||||
|  |             "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" | ||||||
|  |         install_name_tool -change \ | ||||||
|  |             "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \ | ||||||
|  |             @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ | ||||||
|  |             "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" | ||||||
|  |     done | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | # Handles `This application failed to start because it could not find or load the Qt platform plugin "cocoa"` | ||||||
|  | # Which manifests itself as: | ||||||
|  | # "Exception Type: EXC_CRASH (SIGABRT) | Exception Codes: 0x0000000000000000, 0x0000000000000000 | Exception Note: EXC_CORPSE_NOTIFY" | ||||||
|  | # There may be more dylibs needed to be fixed... | ||||||
|  | declare -a macos_plugins=("Plugins/platforms/libqcocoa.dylib") | ||||||
|  | 
 | ||||||
|  | for macos_lib in "${macos_plugins[@]}" | ||||||
|  | do | ||||||
|  |     install_name_tool -id @executable_path/../$macos_lib "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" | ||||||
|  |     for macos_lib2 in "${macos_libs[@]}" | ||||||
|  |     do | ||||||
|  |         RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2 | ||||||
|  |         install_name_tool -change \ | ||||||
|  |             $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \ | ||||||
|  |             @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ | ||||||
|  |             "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" | ||||||
|  |         install_name_tool -change \ | ||||||
|  |             "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \ | ||||||
|  |             @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ | ||||||
|  |             "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" | ||||||
|  |     done | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | for macos_lib in "${macos_libs[@]}" | ||||||
|  | do | ||||||
|  |     # Debugging info for Travis-CI | ||||||
|  |     otool -L "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib" | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | # Make the citra-qt.app application launch a debugging terminal. | ||||||
|  | # Store away the actual binary | ||||||
|  | mv ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt-bin | ||||||
|  | 
 | ||||||
|  | cat > ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt <<EOL | ||||||
|  | #!/usr/bin/env bash | ||||||
|  | cd "\`dirname "\$0"\`" | ||||||
|  | chmod +x citra-qt-bin | ||||||
|  | open citra-qt-bin --args "\$@" | ||||||
|  | EOL | ||||||
|  | # Content that will serve as the launching script for citra (within the .app folder) | ||||||
|  | 
 | ||||||
|  | # Make the launching script executable | ||||||
|  | chmod +x ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt | ||||||
|  | 
 | ||||||
|  | . .travis/common/post-upload.sh | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue