-
-
Save theshadowx/438297ac465874a5e226 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
set -e | |
# Install NaCl | |
wget http://storage.googleapis.com/nativeclient-mirror/nacl/nacl_sdk/nacl_sdk.zip | |
unzip nacl_sdk.zip | |
rm nacl_sdk.zip | |
nacl_sdk/naclsdk list | |
# get the latest stable bender | |
nacl_sdk/naclsdk install pepper_47 | |
NACL_SDK_ROOT=$(pwd)/$(find ./nacl_sdk -maxdepth 1 -type d -name "pepper*") | |
echo "export NACL_SDK_ROOT=$NACL_SDK_ROOT">> ~/.bashrc | |
source ~/.bashrc | |
# Checkout Qt 5.6.0 | |
git clone git://code.qt.io/qt/qt5.git Qt5.6 | |
cd Qt5.6 | |
git checkout 5.6 | |
perl init-repository | |
git checkout 5.6 | |
cd .. | |
cd Qt5.6/qtbase | |
git checkout wip/nacl | |
cd ../qtdeclarative | |
git checkout wip/nacl | |
cd ../qtxmlpatterns | |
git apply ../../qtxmlpatterns.patch | |
cd ../.. | |
mkdir QtNaCl_56 | |
cd QtNaCl_56 | |
../Qt5.6/qtbase/nacl-configure linux_x86_newlib release 64 | |
make module-qtbase -j6 | |
make module-qtdeclarative -j6 | |
make module-qtquickcontrols -j6 | |
#running the example | |
# cd ../Qt5.4.2/qtdeclarative/examples/nacl | |
# mkdir build | |
# cd build | |
# ../../../../../QtNacl_5.4/qtbase/bin/qmake .. | |
# make | |
# ../../../../../QtNacl_5.4/qtbase/bin/nacldeployqt nacl.nexe --run |
diff --git a/tools/tools.pro b/tools/tools.pro | |
index 92bbaca..0040747 100644 | |
--- a/tools/tools.pro | |
+++ b/tools/tools.pro | |
@@ -1,9 +1,11 @@ | |
TEMPLATE = subdirs | |
load(qfeatures) | |
-!android|android_app { | |
- SUBDIRS += xmlpatterns | |
- !contains(QT_DISABLED_FEATURES, xmlschema) { | |
- SUBDIRS += xmlpatternsvalidator | |
+!nacl { | |
+ !android|android_app { | |
+ SUBDIRS += xmlpatterns | |
+ !contains(QT_DISABLED_FEATURES, xmlschema) { | |
+ SUBDIRS += xmlpatternsvalidator | |
+ } | |
} | |
} | |
diff --git a/tools/xmlpatterns/xmlpatterns.pro b/tools/xmlpatterns/xmlpatterns.pro | |
index 0f1ee4f..1172883 100644 | |
--- a/tools/xmlpatterns/xmlpatterns.pro | |
+++ b/tools/xmlpatterns/xmlpatterns.pro | |
@@ -14,4 +14,4 @@ HEADERS = main.h \ | |
load(qt_tool) | |
# with c++11 / __STRICT_ANSI__ mingw.org stdio.h doesn't declare e.g. _fileno | |
-win32-g++*: QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x | |
\ No newline at end of file | |
+win32-g++*: QMAKE_CXXFLAGS_CXX11 = -std=gnu++0x | |
diff --git a/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro b/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro | |
index af9469f..21b1b18 100644 | |
--- a/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro | |
+++ b/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro | |
@@ -1,6 +1,8 @@ | |
-QT = core xmlpatterns | |
+!nacl { | |
+ QT = core xmlpatterns | |
-SOURCES = main.cpp | |
-HEADERS = main.h | |
+ SOURCES = main.cpp | |
+ HEADERS = main.h | |
-load(qt_tool) | |
+ load(qt_tool) | |
+} |
Hi, you are right. this is project folder
However, I tried different commands you gave but next error always arises as follows:
komche@komche-K56CM:~$ sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 bash -c "/opt/QtNaCl_56/qtbase/bin/qmake /home/komche/RD_stage -o /home/komcheRD_stage/build/"
Cannot read /home/komche/RD_stage: file to open is a directory
Error processing project file: /home/komche/RD_stage
komche@komche-K56CM:~$ sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/qmake /home/komche/RD_stage -o /home/komche/RD_stage/build/
Cannot read /home/komche/RD_stage: file to open is a directory
Error processing project file: /home/komche/RD_stage
komche@komche-K56CM:~$ sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage -w=/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/qmake ..
Cannot read /home/komche: file to open is a directory
Error processing project file: ..
From the picture, the project folder is RD_stage and not CheckRD that's why it doesn't work. Then the commands should be as the following :
Qmake
sudo docker run --rm -it -v /home/komche/RD_stage:/home/komche/RD_stage -w=/home/komche/RD_stage/build theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/qmake ..
Make
sudo docker run --rm -it -v /home/komche/RD_stage:/home/komche/RD_stage -w=/home/komche/RD_stage/build theshadowx/qt_nacl:pepper47_qt56 make
Deploy
sudo docker run --rm -it -v /home/komche/RD_stage:/home/komche/RD_stage -p 8000:8000 -w=/home/komche/RD_stage/build theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/nacldeployqt CheckRD.bc --run
Hi Ali!
Finally the makefile has been generated but only with this command:
komche@komche-K56CM:~$ sudo docker run --rm -it -v /home/komche/RD_stage:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/qmake /home/komche/RD_stage -o /home/komche/RD_stage/build/
Then I started command for make as follows:
komche@komche-K56CM:~$ sudo docker run --rm -it -v /home/komche/RD_stage:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 bash -c "cd /home/komche/RD_stage/build && make"
after the process has started in this way, but has stoped with error as follows
komche@komche-K56CM:~$ sudo docker run --rm -it -v /home/komche/RD_stage:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 bash -c "cd /home/komche/RD_stage/build && make"
/opt/QtNaCl_56/qtbase/bin/uic ../service.ui -o ui_service.h
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o main.o ../main.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o service.o ../service.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o originfpl.o ../originfpl.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o anime.o ../anime.cpp
../anime.cpp:11: warning: unused parameter 'parent'
../anime.cpp: In member function 'void Anime::setXY(QList, QList)':
../anime.cpp:38: warning: comparison between signed and unsigned integer expressions
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o rd-artem.nexe_plugin_import.o rd-artem.nexe_plugin_import.cpp
/opt/QtNaCl_56/qtbase/bin/rcc -name src ../src.qrc -o qrc_src.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o qrc_src.o qrc_src.cpp
/opt/QtNaCl_56/qtbase/bin/moc -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -I/home/komche/RD_stage -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3 -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3/x86_64-nacl -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3/backward -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/lib/gcc/x86_64-nacl/4.4.3/include -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/lib/gcc/x86_64-nacl/4.4.3/include-fixed -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include ../service.h -o moc_service.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o moc_service.o moc_service.cpp
/opt/QtNaCl_56/qtbase/bin/moc -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -I/home/komche/RD_stage -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3 -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3/x86_64-nacl -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3/backward -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/lib/gcc/x86_64-nacl/4.4.3/include -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/lib/gcc/x86_64-nacl/4.4.3/include-fixed -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include ../originfpl.h -o moc_originfpl.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o moc_originfpl.o moc_originfpl.cpp
/opt/QtNaCl_56/qtbase/bin/moc -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -I/home/komche/RD_stage -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3 -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3/x86_64-nacl -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include/c++/4.4.3/backward -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/lib/gcc/x86_64-nacl/4.4.3/include -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/lib/gcc/x86_64-nacl/4.4.3/include-fixed -I/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/x86_64-nacl/include ../anime.h -o moc_anime.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -m64 -c -pipe -O2 -std=gnu++0x -Wall -W -fPIC -DQ_OS_NACL_PEPPER -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../../RD_stage -I. -I/opt/QtNaCl_56/qtbase/include -I/opt/QtNaCl_56/qtbase/include/QtWidgets -I/opt/QtNaCl_56/qtbase/include/QtGui -I/opt/QtNaCl_56/qtbase/include/QtCore -I. -I. -I/opt/nacl_sdk/pepper_47/include -I/opt/Qt5.6/qtbase/mkspecs/unsupported/nacl-x86-newlib-g++-64 -o moc_anime.o moc_anime.cpp
/opt/nacl_sdk/pepper_47/toolchain/linux_x86_newlib/bin/x86_64-nacl-g++ -Wl,-O1 -o RD-Artem.nexe main.o service.o originfpl.o anime.o rd-artem.nexe_plugin_import.o qrc_src.o moc_service.o moc_originfpl.o moc_anime.o -L/opt/nacl_sdk/pepper_47/lib/newlib_x86_64/Release -L/opt/QtNaCl_56/qtbase/lib -lQt5Widgets -L/opt/QtNaCl_56/qtbase/plugins/imageformats -lqico -lQt5Gui -lerror_handling -lqtharfbuzzng -lqtfreetype -lQt5Core -lppapi -lppapi_cpp -lqtpcre -lm -lppapi_gles2
/opt/nacl_sdk/pepper_47/lib/newlib_x86_64/Release/libppapi_cpp.a(ppp_entrypoints_x86_64.o): In function PPP_InitializeModule': /mnt/data/b/build/slave/sdk-rel/build/src/out/pepper_47/src/ppapi_cpp/ppp_entrypoints.cc:36: undefined reference to
pp::CreateModule()'
collect2: ld returned 1 exit status
Makefile:162: recipe for target 'RD-Artem.nexe' failed
make: *** [RD-Artem.nexe] Error 1
the main function should be modified.
Have a look at :
https://github.com/msorvig/qt-nacl-manualtests/tree/dev/window_widgets
Hi, thank you for clarification of the main function. I read the your previous description:
@bgrasic here is how the main.cpp should look like
#include
#include
#include "analogclock.h"
AnalogClock *clockA = 0;
// App-provided init and exit functions:
void app_init(int argc, char **argv)
{
clockA = new AnalogClock;
clockA->show();
}
void app_exit()
{
delete clockA;
}
// Register functions with Qt. The type of register function
// selects the QApplicaiton type.
Q_GUI_MAIN(app_init, app_exit);
and inserted some changes in mine project in such way
#include "service.h"
//#include <QApplication>
//#include <QObject>
#include <QtCore>
#include <QtGui>
Service *w = 0;
void app_init(int argc, char **argv)
//int app_init(int argc, char *argv[])
{
//QApplication a(argc, argv);
//Service w;
w = new Service;
//w.show();
w->show();
//return a.exec();
}
void app_exit()
{
delete w;
}
Q_GUI_MAIN(app_init, app_exit);
Then, finaly project has been compiled. Here is the content of buid folder:
After I used run command like this:
sudo docker run --rm -it -p 8000:8000 -v /home/komche/RD_stage:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 bash -c "cd /home/komche/RD_stage/build && /opt/QtNaCl_56/qtbase/bin/nacldeployqt RD-Artem.nexe --run"
Using Chrome (version 56.0.2924.87 (64-bit)) I linked to http://172.17.0.1:8000/, but unfortunately I saw only white screen with frame and the name of the project((
So do I, and also was reported by some people here. I couldn't debug it as the debug option works just for Mac OS.
I think it's better to contact the person maintaining nacl-wip branch in Qt --> https://github.com/msorvig
Thank you very much for your support. I appreciate that.
Ok, I will try to contact with him, but Have you already contacted with him?
Yes, but not for this issue.
https://github.com/msorvig/qt5-qtbase-nacl/issues
The nacl-wip branch in Qt hasn't been updated since last year.
Hi Ali!
Did you read this article on official Google web-site:
@kom1che thanks for this info.
hope Qt guys will make Qt able to work with WebAssembly.
Here is one more article I've found:
https://qtandeverything.blogspot.com/2017/06/qt-for-web-assembly.html?showComment=1497088985199
Thanks, that's great !!!
@kom1che here is porting webassembly to qt https://github.com/msorvig/qt-webassembly-examples
Just forget about the script:
My apologies, I have given you bad docker command line.
Here is what should be done (I have just tested in my machine)
Qmake
I have added workdir argument so it will make things easier. we need just to call qmake add the path to the directory where .pro is present, I presume here that your main .pro is in /home/komche/RD_stage.
Make
The Makefile has been generated in the previous command so as we are setting the workdir as build we need just to call make
Deploy
Just be sure that the file generated is CheckRD.bc