From 387f81ba935c9ff081264ed7a949e3e690a207e0 Mon Sep 17 00:00:00 2001 From: CatalystG Date: Fri, 19 Apr 2013 13:31:51 -0400 Subject: [PATCH] (BlackBerry) A working BB10 Cascades frontend to choose rom and core currently --- blackberry-qnx/bb10/RetroArch-Cascades.pro | 21 +- blackberry-qnx/bb10/assets/MainMenu.qml | 108 +++++++ blackberry-qnx/bb10/assets/coreInfo.json | 42 +++ blackberry-qnx/bb10/assets/main.qml | 11 + blackberry-qnx/bb10/assets/mainPage.qml | 116 -------- blackberry-qnx/bb10/bar-descriptor.xml | 5 + .../bb10/src/RetroArch-Cascades.cpp | 274 ++++++++++++++++-- blackberry-qnx/bb10/src/RetroArch-Cascades.h | 39 ++- blackberry-qnx/bb10/src/main.cpp | 2 + frontend/frontend_bbqnx.c | 5 +- gfx/context/bbqnx_ctx.c | 8 +- griffin/griffin.c | 2 +- 12 files changed, 483 insertions(+), 150 deletions(-) create mode 100644 blackberry-qnx/bb10/assets/MainMenu.qml create mode 100644 blackberry-qnx/bb10/assets/coreInfo.json create mode 100644 blackberry-qnx/bb10/assets/main.qml delete mode 100644 blackberry-qnx/bb10/assets/mainPage.qml diff --git a/blackberry-qnx/bb10/RetroArch-Cascades.pro b/blackberry-qnx/bb10/RetroArch-Cascades.pro index e147755860..e2c36e3e21 100644 --- a/blackberry-qnx/bb10/RetroArch-Cascades.pro +++ b/blackberry-qnx/bb10/RetroArch-Cascades.pro @@ -2,7 +2,24 @@ APP_NAME = RetroArch-Cascades CONFIG += qt warn_on cascades10 -LIBS += -lscreen -LIBS += -lbbcascadespickers +LIBS += -lscreen -lbps -lOpenAL -lpng -lEGL -lGLESv2 +LIBS += -lbbcascadespickers -lbbdata + +DEFINES += HAVE_RGUI HAVE_NEON \ + SINC_LOWER_QUALITY HAVE_RARCH_MAIN_IMPLEMENTATION \ + HAVE_VID_CONTEXT HAVE_FBO HAVE_GRIFFIN __LIBRETRO__ \ + HAVE_DYNAMIC HAVE_ZLIB __BLACKBERRY_QNX__ HAVE_OPENGLES \ + PACKAGE_VERSION=\"0.9.8.4\" HAVE_OPENGLES2 HAVE_NULLINPUT \ + HAVE_AL HAVE_THREADS WANT_MINIZ HAVE_OVERLAY HAVE_GLSL \ + USING_GL20 HAVE_OPENGL __STDC_CONSTANT_MACROS HAVE_BB10 + +INCLUDEPATH += ../../../../RetroArch + +QMAKE_CXXFLAGS += +QMAKE_CFLAGS += -Wc,-std=gnu99 -marm -mfpu=neon + +SOURCES += ../../../griffin/griffin.c \ + ../../../audio/sinc_neon.S \ + ../../../audio/utils_neon.S include(config.pri) diff --git a/blackberry-qnx/bb10/assets/MainMenu.qml b/blackberry-qnx/bb10/assets/MainMenu.qml new file mode 100644 index 0000000000..4ee3b9aeaf --- /dev/null +++ b/blackberry-qnx/bb10/assets/MainMenu.qml @@ -0,0 +1,108 @@ +import bb.cascades 1.0 +import bb.cascades.pickers 1.0 + +Page { + actions: [ + ActionItem { + title: "Play" + ActionBar.placement: ActionBarPlacement.OnBar + imageSource: "asset:///images/open.png" + onTriggered: { + if(RetroArch.rom == "" || RetroArch.core == "") + { + //Do something to focus on select rom box + } + else + { + RetroArch.startEmulator(); + } + } + } + ] + + titleBar: TitleBar { + id: titleBar + title: "RetroArch" + } + + Container { + horizontalAlignment: HorizontalAlignment.Fill + verticalAlignment: VerticalAlignment.Fill + rightPadding: 20 + leftPadding: 20 + + layout: DockLayout {} + + Container { + preferredWidth: 680 + horizontalAlignment: HorizontalAlignment.Center + verticalAlignment: VerticalAlignment.Center + + ImageView + { + horizontalAlignment: HorizontalAlignment.Center + imageSource: "asset:///images/icon.png" + preferredWidth: 200 + preferredHeight: 200 + } + + DropDown + { + id: _core + objectName: "dropdown_core" + horizontalAlignment: HorizontalAlignment.Center + title: "Core Selection" + //Handled in C++ + } + + Container { + horizontalAlignment: HorizontalAlignment.Center + preferredWidth: 680 + + layout: StackLayout { + orientation: LayoutOrientation.LeftToRight + } + + //I like the look as a textbox + DropDown + { + id: romName + verticalAlignment: VerticalAlignment.Center + horizontalAlignment: HorizontalAlignment.Center + preferredWidth: 600 + enabled: false + title: if(picker.selectedFile) + picker.selectedFile + else + "Rom Selection" + } + + ImageButton { + horizontalAlignment: HorizontalAlignment.Right + defaultImageSource: "asset:///images/file.png" + onClicked: { + picker.open(); + } + } + } + } + } + attachedObjects: [ + FilePicker { + id: picker + + property string selectedFile + + title: "Rom Selector" + filter: { RetroArch.romExtensions.split("|") } + type: FileType.Other + directories: ["/accounts/1000/shared/documents/roms"] + + onFileSelected: { + RetroArch.rom = selectedFiles[0]; + selectedFile = RetroArch.rom.substr(RetroArch.rom.lastIndexOf('/')+1); + picker.directories = [RetroArch.rom.substr(0, RetroArch.rom.lastIndexOf('/'))]; + } + } + ] +} diff --git a/blackberry-qnx/bb10/assets/coreInfo.json b/blackberry-qnx/bb10/assets/coreInfo.json new file mode 100644 index 0000000000..2da92d8b12 --- /dev/null +++ b/blackberry-qnx/bb10/assets/coreInfo.json @@ -0,0 +1,42 @@ +{ + "snes9x_next_libretro.so":{ + "display_name":"SNES / Super Famicom", + "supported_extensions":"*.smc|*.fig|*.sfc|*.gd3|*.gd7|*.dx2|*.bsx|*.swc", + "corename":"SNES9x Next", + "manufacturer":"Nintendo", + "systemname":"Super Nintendo Entertainment System", + "default_overlay":"app/native/overlays/snes-landscape.cfg" + }, + "genesis_plus_gx_libretro.so":{ + "display_name":"Sega (MS/GG/MD/CD)", + "supported_extensions":"*.md|*.smd|*.gen|*.sms|*.gg|*.sg|*.bin|*.cue|*.ios", + "corename":"Genesis Plus GX", + "manufacturer":"Sega", + "systemname":"Sega (Various)", + "default_overlay":"app/native/overlays/genesis6-landscape.cfg" + }, + "vba_next_libretro.so":{ + "display_name":"Game Boy Advance", + "supported_extensions":"*.gba", + "corename":"VBA Next", + "manufacturer":"Nintendo", + "systemname":"Game Boy Advance", + "default_overlay":"app/native/overlays/box-gba.cfg" + }, + "pcsx_rearmed_libretro.so":{ + "display_name":"PlayStation1", + "supported_extensions":"*.bin|*.cue|*.img|*.mdf|*.pbp|*.cbn|*.toc", + "corename":"PCSX ReARMed", + "manufacturer":"Sony", + "systemname":"PlayStation", + "default_overlay":"app/native/overlays/psx-landscape.cfg" + }, + "fb_alpha_libretro.so":{ + "display_name":"Arcade", + "supported_extensions":"*.zip|*.ZIP", + "corename":"Final Burn Alpha", + "manufacturer":"Various", + "systemname":"Arcade (various)", + "default_overlay":"app/native/overlays/snes-landscape.cfg" + } +} diff --git a/blackberry-qnx/bb10/assets/main.qml b/blackberry-qnx/bb10/assets/main.qml new file mode 100644 index 0000000000..ab8cd70a1c --- /dev/null +++ b/blackberry-qnx/bb10/assets/main.qml @@ -0,0 +1,11 @@ +import bb.cascades 1.0 +import bb.cascades.pickers 1.0 + +TabbedPane { + Tab { + MainMenu + { + + } + } +} diff --git a/blackberry-qnx/bb10/assets/mainPage.qml b/blackberry-qnx/bb10/assets/mainPage.qml deleted file mode 100644 index 66c9824cf7..0000000000 --- a/blackberry-qnx/bb10/assets/mainPage.qml +++ /dev/null @@ -1,116 +0,0 @@ -import bb.cascades 1.0 -import bb.cascades.pickers 1.0 - -TabbedPane { - Tab { - Page { - actions: [ - ActionItem { - title: "Play" - ActionBar.placement: ActionBarPlacement.OnBar - imageSource: "asset:///images/open.png" - onTriggered: { - if(RetroArch.rom == "" || RetroArch.core == ""){ - //Do something to focus on select rom box - } else { - OrientationSupport.supportedDisplayOrientation = - SupportedDisplayOrientation.DisplayLandscape; - } - } - } - ] - - titleBar: TitleBar { - id: titleBar - title: "RetroArch" - } - - Container { - horizontalAlignment: HorizontalAlignment.Fill - verticalAlignment: VerticalAlignment.Fill - rightPadding: 20 - leftPadding: 20 - - layout: DockLayout {} - - Container { - preferredWidth: 680 - horizontalAlignment: HorizontalAlignment.Center - verticalAlignment: VerticalAlignment.Center - - ImageView - { - horizontalAlignment: HorizontalAlignment.Center - imageSource: "asset:///images/icon.png" - preferredWidth: 200 - preferredHeight: 200 - } - - DropDown - { - id: _core - objectName: "dropdown_core" - horizontalAlignment: HorizontalAlignment.Center - title: "Core Selection" - } - - Container { - horizontalAlignment: HorizontalAlignment.Center - preferredWidth: 680 - - layout: StackLayout { - orientation: LayoutOrientation.LeftToRight - } - - DropDown - { - id: romName - verticalAlignment: VerticalAlignment.Center - horizontalAlignment: HorizontalAlignment.Center - preferredWidth: 600 - enabled: false - //hintText: "Select a ROM" - title: if(picker.selectedFile) - picker.selectedFile - else - "Rom Selection" - } - - ImageButton { - horizontalAlignment: HorizontalAlignment.Right - defaultImageSource: "asset:///images/file.png" - onClicked: { - picker.open(); - } - } - } - } - } - attachedObjects: [ - FilePicker { - id: picker - - property string selectedFile - - title: "Rom Selector" - filter: [] - type: FileType.Other - directories: ["/accounts/1000/shared/documents/roms"] - - onFileSelected: { - RetroArch.rom = selectedFiles[0]; - selectedFile = RetroArch.rom.substr(RetroArch.rom.lastIndexOf('/')+1); - picker.directories = [RetroArch.rom.substr(0, RetroArch.rom.lastIndexOf('/'))]; - } - } - ] - } - } - Tab { - Page { - Container { - - } - } - } -} diff --git a/blackberry-qnx/bb10/bar-descriptor.xml b/blackberry-qnx/bb10/bar-descriptor.xml index dda123717e..e04a5c2f4d 100644 --- a/blackberry-qnx/bb10/bar-descriptor.xml +++ b/blackberry-qnx/bb10/bar-descriptor.xml @@ -54,6 +54,7 @@ + icon.png @@ -63,7 +64,11 @@ + retroarch.cfg + lib + overlays assets + icon.png diff --git a/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp b/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp index 0a2559644e..86f612013c 100644 --- a/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp +++ b/blackberry-qnx/bb10/src/RetroArch-Cascades.cpp @@ -13,6 +13,13 @@ * limitations under the License. */ #include "RetroArch-Cascades.h" +#include "general.h" +#include "conf/config_file.h" +#include "file.h" + +#ifdef HAVE_RGUI +#include "frontend/menu/rgui.h" +#endif #include #include @@ -20,71 +27,284 @@ #include #include #include +#include + +#include +#include +#include +#include #include +#include +#include using namespace bb::cascades; +using namespace bb::data; + +//Use after calling findCores +#define GET_CORE_INFO(x, y) coreInfo[coreList[x]].toMap()[y].toString() RetroArch::RetroArch() { - qmlRegisterType("bb.cascades.pickers", 1, 0, "FilePicker"); - qmlRegisterUncreatableType("bb.cascades.pickers", 1, 0, "FileType", ""); + qmlRegisterType("bb.cascades.pickers", 1, 0, "FilePicker"); + qmlRegisterUncreatableType("bb.cascades.pickers", 1, 0, "FileType", ""); - // Create a QML document and load the main UI QML file, using build patterns. - QmlDocument *qml = QmlDocument::create("asset:///mainPage.qml"); + // Create channel to signal threads on + chid = ChannelCreate(0); + coid = ConnectAttach(0, 0, chid, _NTO_SIDE_CHANNEL, 0); - if (!qml->hasErrors()) { + bool res = connect( + OrientationSupport::instance(), SIGNAL(rotationCompleted()), + this, SLOT(onRotationCompleted())); - // Set the context property we want to use from inside the QML document. Functions exposed - // via Q_INVOKABLE will be found with this property and the name of the function. - qml->setContextProperty("RetroArch", this); + rarch_main_clear_state(); - // The application Page is created from QML. - AbstractPane *mAppPane = qml->createRootObject(); + strlcpy(g_settings.libretro, "app/native/lib", sizeof(g_settings.libretro)); + coreSelectedIndex = -1; - if (mAppPane) { + QmlDocument *qml = QmlDocument::create("asset:///main.qml"); - Application::instance()->setScene(mAppPane); + if (!qml->hasErrors()) + { + qml->setContextProperty("RetroArch", this); - // Start the thread in which we render to the custom window. - start(); - } - } + AbstractPane *mAppPane = qml->createRootObject(); + + if (mAppPane) + { + //Get core DropDown reference to populate it in C++ + coreSelection = mAppPane->findChild("dropdown_core"); + connect(coreSelection, SIGNAL(selectedValueChanged(QVariant)), this, SLOT(onCoreSelected(QVariant))); + findCores(); + + Application::instance()->setScene(mAppPane); + + // Start the thread in which we render to the custom window. + start(); + } + } } RetroArch::~RetroArch() { - // Stop the thread. - terminate(); - wait(); + free(coreList); } +void RetroArch::aboutToQuit() +{ + recv_msg msg; + + msg.code = RETROARCH_EXIT; + + MsgSend(coid, (void*)&msg, sizeof(msg), (void*)NULL, 0); + + wait(); +} + +extern screen_window_t screen_win; +extern screen_context_t screen_ctx; void RetroArch::run() { - while (true) { - sleep(1); - } + int rcvid = -1; + recv_msg msg; + + while (true) { + rcvid = MsgReceive(chid, &msg, sizeof(msg), 0); + + if (rcvid > 0) + { + switch (msg.code) + { + case RETROARCH_START_REQUESTED: + { + printf("RetroArch Started Received\n");fflush(stdout); + + MsgReply(rcvid,0,NULL,0); + + screen_create_context(&screen_ctx, 0); + + bps_initialize(); + + if (screen_request_events(screen_ctx) != BPS_SUCCESS) + { + RARCH_ERR("screen_request_events failed.\n"); + } + + if (navigator_request_events(0) != BPS_SUCCESS) + { + RARCH_ERR("navigator_request_events failed.\n"); + } + + if (navigator_rotation_lock(false) != BPS_SUCCESS) + { + RARCH_ERR("navigator_location_lock failed.\n"); + } + + screen_create_window_type(&screen_win, screen_ctx, SCREEN_CHILD_WINDOW); + + screen_join_window_group(screen_win, Application::instance()->mainWindow()->groupId().toAscii().constData()); + + char *win_id = "RetroArch_Emulator_Window"; + screen_set_window_property_cv(screen_win, SCREEN_PROPERTY_ID_STRING, strlen(win_id), win_id); + + int z = 10; + if (screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_ZORDER, &z) != 0) { + return; + } + + initRASettings(); + + rarch_main(0, NULL); + break; + } + case RETROARCH_EXIT: + MsgReply(rcvid,0,NULL,0); + goto exit; + default: + break; + } + } + } + exit: + return; } + /* * Properties */ - QString RetroArch::getRom() { - return rom; + return rom; } void RetroArch::setRom(QString rom) { - this->rom = rom; + this->rom = rom; } QString RetroArch::getCore() { - return core; + return core; } + void RetroArch::setCore(QString core) { - this->core = core; + this->core = core; } + +QString RetroArch::getRomExtensions() +{ + return romExtensions; +} + +/* + * Slots + */ +void RetroArch::onRotationCompleted() +{ + if (OrientationSupport::instance()->orientation() == UIOrientation::Landscape) + { + if (state == RETROARCH_START_REQUESTED) + { + startEmulator(); + } + } +} + +void RetroArch::onCoreSelected(QVariant value) +{ + coreSelectedIndex = value.toInt(); + + core.clear(); + core.append("app/native/lib/"); + core.append(coreList[coreSelectedIndex]); + emit coreChanged(core); + + romExtensions = GET_CORE_INFO(coreSelectedIndex, "supported_extensions"); + emit romExtensionsChanged(romExtensions); + + qDebug() << "Core Selected: " << core; + qDebug() << "Supported Extensions: " << romExtensions; +} + +/* + * Functions + */ +void RetroArch::startEmulator() +{ + state = RETROARCH_START_REQUESTED; + + if (OrientationSupport::instance()->orientation() == UIOrientation::Portrait) + { + OrientationSupport::instance()->setSupportedDisplayOrientation(SupportedDisplayOrientation::DisplayLandscape); + } + else + { + recv_msg msg; + msg.code = RETROARCH_START_REQUESTED; + + MsgSend(coid, (void*)&msg, sizeof(msg), (void*)NULL, 0); + + state = RETROARCH_RUNNING; + } +} + +void RetroArch::findCores() +{ + DIR *dirp; + struct dirent* direntp; + int count=0, i=0; + + dirp = opendir(g_settings.libretro); + if( dirp != NULL ) { + for(;;) { + direntp = readdir( dirp ); + if( direntp == NULL ) break; + count++; + } + fflush(stdout); + rewinddir(dirp); + + if(count==2){ + printf("No Cores Found");fflush(stdout); + } + + coreList = (char**)malloc(count*sizeof(char*)); + count = 0; + + for(;;){ + direntp = readdir( dirp ); + if( direntp == NULL ) break; + coreList[count++] = strdup((char*)direntp->d_name); + } + + //Load info for Cores + JsonDataAccess jda; + + coreInfo = jda.load("app/native/assets/coreInfo.json").toMap(); + + Option *tmp; + + //Populate DropDown + for (i = 2; i < count; ++i) + { + qDebug() << GET_CORE_INFO(i, "display_name"); + + tmp = Option::create().text(GET_CORE_INFO(i, "display_name")) + .value(i); + + coreSelection->add(tmp); + } + } + + closedir(dirp); +} + +void RetroArch::initRASettings() +{ + strlcpy(g_settings.libretro,(char *)core.toAscii().constData(), sizeof(g_settings.libretro)); + strlcpy(g_extern.fullpath, (char *)rom.toAscii().constData(), sizeof(g_extern.fullpath)); + strlcpy(g_settings.input.overlay, GET_CORE_INFO(coreSelectedIndex, "default_overlay").toAscii().constData(), sizeof(g_settings.input.overlay)); +} + diff --git a/blackberry-qnx/bb10/src/RetroArch-Cascades.h b/blackberry-qnx/bb10/src/RetroArch-Cascades.h index 4d1efe74b9..aa58391922 100644 --- a/blackberry-qnx/bb10/src/RetroArch-Cascades.h +++ b/blackberry-qnx/bb10/src/RetroArch-Cascades.h @@ -2,9 +2,13 @@ #define _RETROARCHCASCADES_H_ #include -#include +#include +#include #include +#include +#include + using namespace bb::cascades; namespace bb @@ -21,14 +25,24 @@ class RetroArch: public QThread Q_PROPERTY(QString rom READ getRom WRITE setRom NOTIFY romChanged) Q_PROPERTY(QString core READ getCore WRITE setCore NOTIFY coreChanged) + Q_PROPERTY(QString romExtensions READ getRomExtensions NOTIFY romExtensionsChanged) public: RetroArch(); ~ RetroArch(); + Q_INVOKABLE void startEmulator(); + Q_INVOKABLE void findCores(); + signals: void romChanged(QString); void coreChanged(QString); + void romExtensionsChanged(QString); + +public slots: + void aboutToQuit(); + void onRotationCompleted(); + void onCoreSelected(QVariant); private: /** @@ -45,6 +59,29 @@ private: QString getCore(); void setCore(QString core); + QString romExtensions; + QString getRomExtensions(); + + void initRASettings(); + + int chid, coid; + int state; + DropDown *coreSelection; + QVariantMap coreInfo; + char **coreList; + int coreSelectedIndex; }; +enum { + RETROARCH_RUNNING, + RETROARCH_START_REQUESTED, + RETROARCH_EXIT +}; + + +typedef union { + _pulse pulse; + int code; +} recv_msg; + #endif diff --git a/blackberry-qnx/bb10/src/main.cpp b/blackberry-qnx/bb10/src/main.cpp index 072343c469..1f9cd50ca1 100644 --- a/blackberry-qnx/bb10/src/main.cpp +++ b/blackberry-qnx/bb10/src/main.cpp @@ -27,6 +27,8 @@ Q_DECL_EXPORT int main(int argc, char **argv) // Initialize our application. RetroArch mainApp; + QObject::connect(&app, SIGNAL( aboutToQuit() ), &mainApp, SLOT( aboutToQuit() )); + // We complete the transaction started in the main application constructor and start the // client event loop here. When loop is exited the Application deletes the scene which // deletes all its children. diff --git a/frontend/frontend_bbqnx.c b/frontend/frontend_bbqnx.c index c254826835..d271aa41b2 100644 --- a/frontend/frontend_bbqnx.c +++ b/frontend/frontend_bbqnx.c @@ -26,13 +26,16 @@ int rarch_main(int argc, char *argv[]) { //Initialize bps +#ifndef HAVE_BB10 bps_initialize(); rarch_main_clear_state(); - strlcpy(g_extern.config_path, "app/native/retroarch.cfg", sizeof(g_extern.config_path)); strlcpy(g_settings.libretro, "app/native/lib", sizeof(g_settings.libretro)); strlcpy(g_extern.fullpath, "--menu", sizeof(g_extern.fullpath)); +#endif + + strlcpy(g_extern.config_path, "app/native/retroarch.cfg", sizeof(g_extern.config_path)); config_load(); diff --git a/gfx/context/bbqnx_ctx.c b/gfx/context/bbqnx_ctx.c index 9c8a8517b8..107db75872 100644 --- a/gfx/context/bbqnx_ctx.c +++ b/gfx/context/bbqnx_ctx.c @@ -45,7 +45,7 @@ static EGLConfig egl_config; static bool g_resize; screen_context_t screen_ctx; -static screen_window_t screen_win; +screen_window_t screen_win; static screen_display_t screen_disp; GLfloat _angle; @@ -209,6 +209,7 @@ static bool gfx_ctx_init(void) goto error; } +#ifndef HAVE_BB10 int angle = atoi(getenv("ORIENTATION")); screen_display_mode_t screen_mode; @@ -219,7 +220,8 @@ static bool gfx_ctx_init(void) } int size[2]; - if (screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, size)) { + if (screen_get_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, size)) + { RARCH_ERR("screen_get_window_property_iv [SCREEN_PROPERTY_BUFFER_SIZE] failed.\n"); goto error; } @@ -243,6 +245,7 @@ static bool gfx_ctx_init(void) goto error; } + if (screen_set_window_property_iv(screen_win, SCREEN_PROPERTY_BUFFER_SIZE, buffer_size)) { RARCH_ERR("screen_set_window_property_iv [SCREEN_PROPERTY_BUFFER_SIZE] failed.\n"); @@ -254,6 +257,7 @@ static bool gfx_ctx_init(void) RARCH_ERR("screen_set_window_property_iv [SCREEN_PROPERTY_ROTATION] failed.\n"); goto error; } +#endif if (screen_create_window_buffers(screen_win, WINDOW_BUFFERS)) { diff --git a/griffin/griffin.c b/griffin/griffin.c index cf67ea3e67..bb1ceee88e 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -401,7 +401,7 @@ MAIN #include "../frontend/frontend_ios.c" #endif -#if !defined(ANDROID) && !defined(IOS) +#if !defined(ANDROID) && !defined(IOS) && !(defined(__BLACKBERRY_QNX__) && defined(HAVE_BB10)) #include "../frontend/frontend.c" #endif