From d1fffede2c798fd5a0f545ffe4fb9f93648a1069 Mon Sep 17 00:00:00 2001 From: Sacha Date: Tue, 8 Jul 2014 17:15:28 +1000 Subject: [PATCH] Qt: Modularise the settings file in to platforms with Arch / OS detection. --- Qt/PPSSPP.pro | 74 ++-------------------------- Qt/Platform/ArchDetection.pri | 37 ++++++++++++++ Qt/Platform/OSDetection.pri | 19 ++++++++ Qt/Platform/Windows.pri | 15 ++++++ Qt/Platform/android.pri | 7 +++ Qt/Platform/blackberry.pri | 7 +++ Qt/Platform/ios.pri | 1 + Qt/Platform/linux.pri | 11 +++++ Qt/Platform/macosx.pri | 6 +++ Qt/Platform/maemo.pri | 14 ++++++ Qt/Platform/symbian.pri | 21 ++++++++ Qt/Settings.pri | 91 ++++++++--------------------------- 12 files changed, 163 insertions(+), 140 deletions(-) create mode 100644 Qt/Platform/ArchDetection.pri create mode 100644 Qt/Platform/OSDetection.pri create mode 100644 Qt/Platform/Windows.pri create mode 100644 Qt/Platform/android.pri create mode 100644 Qt/Platform/blackberry.pri create mode 100644 Qt/Platform/ios.pri create mode 100644 Qt/Platform/linux.pri create mode 100644 Qt/Platform/macosx.pri create mode 100644 Qt/Platform/maemo.pri create mode 100644 Qt/Platform/symbian.pri diff --git a/Qt/PPSSPP.pro b/Qt/PPSSPP.pro index e05de953b..b7c00fd9a 100644 --- a/Qt/PPSSPP.pro +++ b/Qt/PPSSPP.pro @@ -19,36 +19,9 @@ greaterThan(QT_MAJOR_VERSION,4) { symbian: MOBILITY += systeminfo feedback } -# PPSSPP Libs -QMAKE_LIBDIR += $$CONFIG_DIR -symbian: LIBS += -lCore.lib -lGPU.lib -lCommon.lib -lNative.lib -else: LIBS += -lCore -lGPU -lCommon -lNative - -# FFMPEG Path -win32: QMAKE_LIBDIR += $$P/ffmpeg/Windows/$${QMAKE_TARGET.arch}/lib/ -linux { - arm: QMAKE_LIBDIR += $$P/ffmpeg/linux/armv7/lib/ - else:QMAKE_LIBDIR += $$P/ffmpeg/linux/$${QMAKE_TARGET.arch}/lib/ -} -macx: QMAKE_LIBDIR += $$P/ffmpeg/macosx/x86_64/lib/ -ios: QMAKE_LIBDIR += $$P/ffmpeg/ios/universal/lib/ -qnx: QMAKE_LIBDIR += $$P/ffmpeg/blackberry/armv7/lib/ -symbian:QMAKE_LIBDIR += $$P/ffmpeg/symbian/armv6/lib/ -android:QMAKE_LIBDIR += $$P/ffmpeg/android/armv7/lib/ - -contains(DEFINES, USE_FFMPEG): LIBS += -lavformat -lavcodec -lavutil -lswresample -lswscale - # External (platform-dependant) libs -win32 { - #Use a fixed base-address under windows - QMAKE_LFLAGS += /FIXED /BASE:"0x00400000" /DYNAMICBASE:NO - LIBS += -lwinmm -lws2_32 -lShell32 -lAdvapi32 - contains(QMAKE_TARGET.arch, x86_64): LIBS += $$files($$P/dx9sdk/Lib/x64/*.lib) - else: LIBS += $$files($$P/dx9sdk/Lib/x86/*.lib) -} - -macx|linux { +macx|equals(PLATFORM_NAME, "linux") { PRE_TARGETDEPS += $$CONFIG_DIR/libCommon.a $$CONFIG_DIR/libCore.a $$CONFIG_DIR/libGPU.a $$CONFIG_DIR/libNative.a CONFIG += link_pkgconfig packagesExist(sdl) { @@ -63,18 +36,13 @@ macx|linux { } } -linux:!android: LIBS += -ldl -lrt -macx: LIBS += -liconv -qnx: LIBS += -lscreen -symbian: LIBS += -lremconcoreapi -lremconinterfacebase -linux:arm|android: LIBS += -lEGL unix:contains(QT_CONFIG, system-zlib) { LIBS += -lz } # Qt Multimedia (if SDL is not found) !contains(DEFINES, QT_HAS_SDL) { - linux:lessThan(QT_MAJOR_VERSION,5):!exists($$[QT_INSTALL_HEADERS]/QtMultimedia) { + lessThan(QT_MAJOR_VERSION,5):!exists($$[QT_INSTALL_HEADERS]/QtMultimedia) { # Fallback to mobility audio CONFIG += mobility MOBILITY += multimedia @@ -112,7 +80,7 @@ INCLUDEPATH += $$P $$P/Common $$P/native $$P/native/ext mobile_platform: RESOURCES += $$P/Qt/assets.qrc else { # TODO: Rewrite Debugger with same backend as Windows version - # Don't use .ui forms. Use Qt5 + C++11 features to minimise code + # Do not use .ui forms. Use Qt5 + C++11 features to minimise code SOURCES += $$P/Qt/*.cpp $$P/Qt/Debugger/*.cpp HEADERS += $$P/Qt/*.h $$P/Qt/Debugger/*.h FORMS += $$P/Qt/Debugger/*.ui @@ -136,45 +104,11 @@ else { lang.name = $$LREL_TOOL ${QMAKE_FILE_IN} lang.input = TRANSLATIONS lang.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.qm + lang.commands = $$LREL_TOOL ${QMAKE_FILE_IN} lang.CONFIG = no_link QMAKE_EXTRA_COMPILERS += lang PRE_TARGETDEPS += compiler_lang_make_all } -# Packaging -win32: ICON = $$P/Windows/ppsspp.rc - -symbian { - TARGET.UID3 = 0xE0095B1D - DEPLOYMENT.display_name = PPSSPP - vendor_deploy.pkg_prerules = "%{\"Qtness\"}" ":\"Qtness\"" - ICON = $$P/assets/icon.svg - - DEPLOYMENT += vendor_deploy - MMP_RULES += "DEBUGGABLE" - - # 268 MB maximum - TARGET.EPOCHEAPSIZE = 0x40000 0x10000000 - TARGET.EPOCSTACKSIZE = 0x10000 -} - -linux { - icon.files = $$P/assets/icon-114.png - icon.path = /usr/share/icons/hicolor/114x114/apps - INSTALLS += icon -} - -maemo { - target.path = /opt/PPSSPP/bin - desktopfile.files = PPSSPP.desktop - desktopfile.path = /usr/share/applications - INSTALLS += target desktopfile - # Booster - QMAKE_CXXFLAGS += -fPIC -fvisibility=hidden -fvisibility-inlines-hidden - QMAKE_LFLAGS += -pie -rdynamic - CONFIG += qt-boostable -} - -ANDROID_PACKAGE_SOURCE_DIR = $$P/android diff --git a/Qt/Platform/ArchDetection.pri b/Qt/Platform/ArchDetection.pri new file mode 100644 index 000000000..3d12b33d6 --- /dev/null +++ b/Qt/Platform/ArchDetection.pri @@ -0,0 +1,37 @@ +PLATFORM_ARCH="generic" + +contains(QT_ARCH, ".*86.*")|contains(QMAKE_TARGET.arch, ".*86.*") { + !win32-msvc*: QMAKE_ALLFLAGS += -msse2 + else: QMAKE_ALLFLAGS += /arch:SSE2 + CONFIG += i86 + + contains(QT_ARCH, x86_64)|contains(QMAKE_TARGET.arch, x86_64): PLATFORM_ARCH = x86_64 + else: PLATFORM_ARCH = x86 + + # Fix 32-bit/64-bit defines + equals(PLATFORM_ARCH, x86_64): DEFINES += _M_X64 + else: DEFINES += _M_IX86 +} else:contains(QT_ARCH, ".*arm.*")|contains(QMAKE_TARGET.arch, ".*arm.*") { + DEFINES += ARM + CONFIG += arm + # Will need to see how QT_ARCH and QMAKE_TARGET.arch are populated for various ARM platforms. + symbian: PLATFORM_ARCH="armv6" + else { + PLATFORM_ARCH="armv7" + CONFIG += armv7 + QMAKE_CFLAGS_RELEASE ~= s/-mfpu.*/ + QMAKE_CFLAGS_DEBUG ~= s/-mfpu.*/ + QMAKE_ALLFLAGS_DEBUG += -march=armv7-a -mtune=cortex-a8 -mfpu=neon -ftree-vectorize + QMAKE_ALLFLAGS_RELEASE += -march=armv7-a -mtune=cortex-a8 -mfpu=neon -ftree-vectorize + } + # TODO: armv8? +} else { + # Generic + warning("You are using an untested arch. Only x86 and ARM CPUs are supported") + DEFINES += GENERIC_ARCH + CONFIG += generic +} + + +# Odd one out +ios: PLATFORM_ARCH="universal" diff --git a/Qt/Platform/OSDetection.pri b/Qt/Platform/OSDetection.pri new file mode 100644 index 000000000..51bac94d7 --- /dev/null +++ b/Qt/Platform/OSDetection.pri @@ -0,0 +1,19 @@ +# This file is to add features deemed necessary that don't exist in qmake.conf +# There is no linux setting in qmake.conf + +# For our purposes, maemo5 and meego perform the same. +maemo5|contains(MEEGO_EDITION,harmattan): CONFIG += maemo + +# All supported platforms that require tweaks +PLATFORM_NAME="generic" +win32: PLATFORM_NAME="Windows" +unix: PLATFORM_NAME="linux" +qnx: PLATFORM_NAME="blackberry" +mac: PLATFORM_NAME="macosx" +ios: PLATFORM_NAME="ios" +maemo: PLATFORM_NAME="maemo" +symbian: PLATFORM_NAME="symbian" +android: PLATFORM_NAME="android" + +!equals(PLATFORM_NAME, "generic"): include($$PLATFORM_NAME".pri") + diff --git a/Qt/Platform/Windows.pri b/Qt/Platform/Windows.pri new file mode 100644 index 000000000..c7b0df5ac --- /dev/null +++ b/Qt/Platform/Windows.pri @@ -0,0 +1,15 @@ +PRECOMPILED_HEADER = $$P/Windows/stdafx.h +PRECOMPILED_SOURCE = $$P/Windows/stdafx.cpp +INCLUDEPATH += $$P + +equals(TARGET, PPSSPPQt) { + # Executable + # Use a fixed base-address under windows + QMAKE_LFLAGS += /FIXED /BASE:"0x00400000" /DYNAMICBASE:NO + LIBS += -lwinmm -lws2_32 -lShell32 -lAdvapi32 + contains(QMAKE_TARGET.arch, x86_64): LIBS += $$files($$P/dx9sdk/Lib/x64/*.lib) + else: LIBS += $$files($$P/dx9sdk/Lib/x86/*.lib) + + # Packaging + ICON = $$P/Windows/ppsspp.rc +} diff --git a/Qt/Platform/android.pri b/Qt/Platform/android.pri new file mode 100644 index 000000000..55b25acc1 --- /dev/null +++ b/Qt/Platform/android.pri @@ -0,0 +1,7 @@ +DEFINES += ANDROID +INCLUDEPATH += $$P/native/ext/libzip + +equals(TARGET, PPSSPPQt) { + # Packaging + ANDROID_PACKAGE_SOURCE_DIR = $$P/android +} diff --git a/Qt/Platform/blackberry.pri b/Qt/Platform/blackberry.pri new file mode 100644 index 000000000..22c2829d5 --- /dev/null +++ b/Qt/Platform/blackberry.pri @@ -0,0 +1,7 @@ +# Use a mkspec that allows g++ +DEFINES += BLACKBERRY "_QNX_SOURCE=1" "_C99=1" + +equals(TARGET, PPSSPPQt) { + # Executable + LIBS += -lscreen -liconv +} diff --git a/Qt/Platform/ios.pri b/Qt/Platform/ios.pri new file mode 100644 index 000000000..a9bc62a59 --- /dev/null +++ b/Qt/Platform/ios.pri @@ -0,0 +1 @@ +DEFINES += IOS diff --git a/Qt/Platform/linux.pri b/Qt/Platform/linux.pri new file mode 100644 index 000000000..564313bc0 --- /dev/null +++ b/Qt/Platform/linux.pri @@ -0,0 +1,11 @@ + + +equals(TARGET, PPSSPPQt) { + # Executable + LIBS += -ldl -lrt + + # Packaging + icon.files = $$P/assets/icon-114.png + icon.path = /usr/share/icons/hicolor/114x114/apps + INSTALLS += icon +} diff --git a/Qt/Platform/macosx.pri b/Qt/Platform/macosx.pri new file mode 100644 index 000000000..86fc3f664 --- /dev/null +++ b/Qt/Platform/macosx.pri @@ -0,0 +1,6 @@ +QMAKE_MAC_SDK=macosx10.9 + +equals(TARGET, PPSSPPQt) { + # Executable + LIBS += -liconv +} diff --git a/Qt/Platform/maemo.pri b/Qt/Platform/maemo.pri new file mode 100644 index 000000000..79210f198 --- /dev/null +++ b/Qt/Platform/maemo.pri @@ -0,0 +1,14 @@ +DEFINES += MAEMO __GL_EXPORTS +contains(MEEGO_EDITION,harmattan): DEFINES += "_SYS_UCONTEXT_H=1" + +equals(TARGET, PPSSPPQt) { + # Packaging + target.path = /opt/PPSSPP/bin + desktopfile.files = PPSSPP.desktop + desktopfile.path = /usr/share/applications + INSTALLS += target desktopfile + # Booster + QMAKE_CXXFLAGS += -fPIC -fvisibility=hidden -fvisibility-inlines-hidden + QMAKE_LFLAGS += -pie -rdynamic + CONFIG += qt-boostable +} diff --git a/Qt/Platform/symbian.pri b/Qt/Platform/symbian.pri new file mode 100644 index 000000000..e78e83b12 --- /dev/null +++ b/Qt/Platform/symbian.pri @@ -0,0 +1,21 @@ +INCLUDEPATH += $$EPOCROOT/epoc32/include/stdapis +DEFINES += "BOOST_COMPILER_CONFIG=\"$$EPOCROOT/epoc32/include/stdapis/boost/mpl/aux_/config/gcc.hpp\"" SYMBIAN_OGLES_DLL_EXPORTS +QMAKE_CXXFLAGS += -marm -Wno-parentheses -Wno-comment -Wno-unused-local-typedefs + +contains(TARGET, PPSSPPQt) { + # Executable + LIBS += -lremconcoreapi -lremconinterfacebase + + # Packaging + TARGET.UID3 = 0xE0095B1D + DEPLOYMENT.display_name = PPSSPP + vendor_deploy.pkg_prerules = "%{\"Qtness\"}" ":\"Qtness\"" + ICON = $$P/assets/icon.svg + + DEPLOYMENT += vendor_deploy + MMP_RULES += "DEBUGGABLE" + + # 268 MB maximum + TARGET.EPOCHEAPSIZE = 0x40000 0x10000000 + TARGET.EPOCSTACKSIZE = 0x10000 +} diff --git a/Qt/Settings.pri b/Qt/Settings.pri index fd238a10f..71b7708fa 100644 --- a/Qt/Settings.pri +++ b/Qt/Settings.pri @@ -1,7 +1,5 @@ VERSION = 0.9.8 DEFINES += USING_QT_UI USE_FFMPEG -unix:!qnx:!symbian:!mac: CONFIG += linux -maemo5|contains(MEEGO_EDITION,harmattan): CONFIG += maemo # Global specific win32:CONFIG(release, debug|release): CONFIG_DIR = $$join(OUT_PWD,,,/release) @@ -10,9 +8,28 @@ else:CONFIG_DIR=$$OUT_PWD OBJECTS_DIR = $$CONFIG_DIR/.obj/$$TARGET MOC_DIR = $$CONFIG_DIR/.moc/$$TARGET UI_DIR = $$CONFIG_DIR/.ui/$$TARGET +QMAKE_CLEAN += -r $$MOC_DIR $$UI_DIR $$OBJECTS_DIR $$TARGET P = $$_PRO_FILE_PWD_/.. INCLUDEPATH += $$P/ext/zlib $$P/Common +equals(TARGET, PPSSPPQt) { + # PPSSPP Libs need to go first + QMAKE_LIBDIR += $$CONFIG_DIR $$P/ffmpeg/$${PLATFORM_NAME}/$${PLATFORM_ARCH}/lib/ + equals(PLATFORM_NAME, "linux"):arm|android: LIBS += -lEGL + symbian: LIBS += -lCore.lib -lGPU.lib -lCommon.lib -lNative.lib + else: LIBS += -lCore -lGPU -lCommon -lNative + + contains(DEFINES, USE_FFMPEG): LIBS += -lavformat -lavcodec -lavutil -lswresample -lswscale +} + +# Work out arch name +include(Platform/ArchDetection.pri) +# Work out platform name +include(Platform/OSDetection.pri) +# OS dependent paths +INCLUDEPATH += $$P/ffmpeg/$${PLATFORM_NAME}/$${PLATFORM_ARCH}/include + +# Work out the git version in a way that works on every QMake symbian { exists($$P/.git): GIT_VERSION = $$system(git describe --always) isEmpty(GIT_VERSION): GIT_VERSION = $$VERSION @@ -23,6 +40,7 @@ symbian { } DEFINES += PPSSPP_GIT_VERSION=\"$$GIT_VERSION\" +# Optimisations win32-msvc* { DEFINES += _MBCS GLEW_STATIC _CRT_SECURE_NO_WARNINGS "_VARIADIC_MAX=10" contains(DEFINES, UNICODE): DEFINES += _UNICODE @@ -36,83 +54,16 @@ win32-msvc* { QMAKE_CXXFLAGS_RELEASE ~= s/-O.*/ QMAKE_ALLFLAGS_RELEASE += -O3 -ffast-math } -# Arch specific - -contains(QT_ARCH, ".*86.*")|contains(QMAKE_TARGET.arch, ".*86.*") { - !win32-msvc*: QMAKE_ALLFLAGS += -msse2 - else: QMAKE_ALLFLAGS += /arch:SSE2 -} else { # Assume ARM - DEFINES += ARM - CONFIG += arm -} -arm:!symbian { - CONFIG += armv7 - QMAKE_CFLAGS_RELEASE ~= s/-mfpu.*/ - QMAKE_CFLAGS_DEBUG ~= s/-mfpu.*/ - QMAKE_ALLFLAGS_DEBUG += -march=armv7-a -mtune=cortex-a8 -mfpu=neon -ftree-vectorize - QMAKE_ALLFLAGS_RELEASE += -march=armv7-a -mtune=cortex-a8 -mfpu=neon -ftree-vectorize -} contains(QT_CONFIG, opengles.) { DEFINES += USING_GLES2 # How else do we know if the environment prefers windows? - !linux|android|maemo { + !equals(PLATFORM_NAME, "linux")|android|maemo { DEFINES += MOBILE_DEVICE CONFIG += mobile_platform } } -# Platform specific -contains(MEEGO_EDITION,harmattan): DEFINES += "_SYS_UCONTEXT_H=1" -maemo: DEFINES += MAEMO - -win32 { - PRECOMPILED_HEADER = $$P/Windows/stdafx.h - PRECOMPILED_SOURCE = $$P/Windows/stdafx.cpp - INCLUDEPATH += $$P $$P/ffmpeg/Windows/$${QMAKE_TARGET.arch}/include -} -macx { - QMAKE_MAC_SDK=macosx10.9 - INCLUDEPATH += $$P/ffmpeg/macosx/x86_64/include -} -ios { - DEFINES += IOS - INCLUDEPATH += $$P/ffmpeg/ios/universal/include -} -android { - DEFINES += ANDROID - INCLUDEPATH += $$P/ffmpeg/android/armv7/include $$P/native/ext/libzip -} - -linux:!android { - arm: INCLUDEPATH += $$P/ffmpeg/linux/armv7/include - else { - contains(QT_ARCH, x86_64) QMAKE_TARGET.arch = x86_64 - else: QMAKE_TARGET.arch = x86 - INCLUDEPATH += $$P/ffmpeg/linux/$${QMAKE_TARGET.arch}/include - } -} -# Fix 32-bit/64-bit defines -!arm { - contains(QMAKE_TARGET.arch, x86_64): DEFINES += _M_X64 - else: DEFINES += _M_IX86 -} - -qnx { - # Use mkspec: unsupported/qws/qnx-armv7-g++ - DEFINES += BLACKBERRY "_QNX_SOURCE=1" "_C99=1" - INCLUDEPATH += $$P/ffmpeg/blackberry/armv7/include -} -symbian { - DEFINES += "BOOST_COMPILER_CONFIG=\"$$EPOCROOT/epoc32/include/stdapis/boost/mpl/aux_/config/gcc.hpp\"" SYMBIAN_OGLES_DLL_EXPORTS - QMAKE_CXXFLAGS += -marm -Wno-parentheses -Wno-comment -Wno-unused-local-typedefs - INCLUDEPATH += $$EPOCROOT/epoc32/include/stdapis - INCLUDEPATH += $$P/ffmpeg/symbian/armv6/include -} -maemo { - DEFINES += __GL_EXPORTS -} - # Handle flags for both C and C++ QMAKE_CFLAGS += $$QMAKE_ALLFLAGS QMAKE_CXXFLAGS += $$QMAKE_ALLFLAGS