Skip to content

Instantly share code, notes, and snippets.

@theshadowx
Last active September 24, 2021 17:35
Show Gist options
  • Save theshadowx/438297ac465874a5e226 to your computer and use it in GitHub Desktop.
Save theshadowx/438297ac465874a5e226 to your computer and use it in GitHub Desktop.
Qt/Qml With Chrome Native Client (NaCl)
#!/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)
+}
@theshadowx
Copy link
Author

@polrus
Sorry for the late response.

Have you been able to run an app successfully in Chrome with the script + your modifications ?

@kom1che
Copy link

kom1che commented May 22, 2017

Hi Ali,

Thank you for respond.
I tried to do all you advise, but unfortunately on the step "$ /path/to/QtNaCl.sh" I received the followinr error in the command line:

Ваша ветка обновлена в соответствии с (Your branch updated related to) «origin/5.6».
Checking out files: 100% (2035/2035), done.
Предыдущая позиция (Previous position) HEAD была (was) 50d9ee2... Improve QStringBuilder docs
Ветка (Branch) wip/nacl отслеживает внешнюю ветку (Keeps track of the external branch) wip/nacl из (from) origin.
Переключено на новую ветку (Switched to a new branch) «wip/nacl»
Checking out files: 100% (733/733), done.
Предыдущая позиция (Previous position) HEAD была (was) 2da8e40... QML: clear the property cache on QObjectWrapper destuction
Ветка (Branch) wip/nacl отслеживает внешнюю ветку (Keeps track of the external branch) wip/nacl из (from) origin.
Переключено на новую ветку (Switched to a new branch) «wip/nacl»

Directory not found: /home/komche/./nacl_sdk/pepper_47 ./nacl_sdk/pepper_49. Check NACL_SDK_ROOT.

make: *** Нет правила для сборки цели (There is no rule to build a goal) `module-qtbase'. Останов (Stoped).

May be I need to delete all previous Qt versions before start, or rebbot the OS? How do you think?

@theshadowx
Copy link
Author

@kom1che the issue is that you have two versions of pepper installed in your home directory
--> /home/komche/./nacl_sdk/pepper_47
--> /home/komche/./nacl_sdk/pepper_49

so when $(find ./nacl_sdk -maxdepth 1 -type d -name "pepper*") is executed it finds two elements that's why NACL_SDK_ROOT is /home/komche/./nacl_sdk/pepper_47 ./nacl_sdk/pepper_49 where it should be /home/komche/./nacl_sdk/pepper_47 if you had installed just pepper 47

@kom1che
Copy link

kom1che commented May 23, 2017

Thank you! It helped.

One more question, when I am trying to generate makefile

$> docker run --rm -it -v /path/to/ProjectFolder:/data/example theshadowx/qt_nacl:pepper47_qt56 bash -c "/opt/QtNaCl_5.4/qtbase/bin/qmake /data/example -o /data/example/build/"

the following problem occured -

komche@komche-K56CM:/$ sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 bash -c "/home/komche/QtNaCl_56/qtbase/bin/qmake /home/komche/RD_stage -o /home/komche/RD_stage/build/"
[sudo] password for komche:
bash: /home/komche/QtNaCl_56/qtbase/bin/qmake: No such file or directory
komche@komche-K56CM:/$ cd /home/komche
komche@komche-K56CM:~$

However , /path/to/QtNaCl.sh created this folder (QtNaCl_56) exactly in this path - /home/komche/QtNaCl_56

2017-05-23 23 55 23

@theshadowx
Copy link
Author

theshadowx commented May 24, 2017

This because docker run will start a container and all the commands that are used will be launched inside this container.
so the path /home/komche/QtNaCl_56/qtbase/bin/qmake doesn't exist inside the container but in the host (your computer).
So the solution is to use /opt/QtNaCl_5.4/qtbase/bin/qmake:

sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 bash -c "/opt/QtNaCl_5.4/qtbase/bin/qmake /home/komche/RD_stage -o /home/komche/RD_stage/build/"

I think you can directly execute qmake without bash -c

sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_5.4/qtbase/bin/qmake /home/komche/RD_stage -o /home/komche/RD_stage/build/

N.B

If you want to use Docker, you don't need to execute the script.
Using Docker image (theshadowx/qt_nacl) is an alternative that simplifies the use of Qt compiled with NaCl, you'll need just to to pull the image and run the container and then voila, you have Qt with qmake and all the binaries needed to build your app and deploy it, no need to clone Qt nor configure, nor compile it. ;)

@kom1che
Copy link

kom1che commented May 24, 2017

Unfortunatelly, it doesn't work properly:

komche@komche-K56CM:$ sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 bash -c "mkdir /home/komche/RD_stage/build/"
komche@komche-K56CM:
$ sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_5.4/qtbase/bin/qmake /home/komche/RD_stage -o /home/komche/RD_stage/build/
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: "/opt/QtNaCl_5.4/qtbase/bin/qmake": stat /opt/QtNaCl_5.4/qtbase/bin/qmake: no such file or directory".

When I launched script from your repository, all three folders (nacl_sdk, Qt5.6 and QtNaCl_56) were created inside my home folder (/home/komche). So, there is no QtNaCl_5.4 folder in the path /opt/QtNaCl_5.4/qtbase/bin/qmake.

@kom1che
Copy link

kom1che commented May 24, 2017

May be I need to launch your script inside /opt ?

@theshadowx
Copy link
Author

no need, if you use the script and everything goes well, you should find QtNaCl_56 in the same directory as the script

@kom1che
Copy link

kom1che commented May 24, 2017

yes, you wright. Script created three folders in the same place (/home/komche). But in the command for generating makefile stand /opt/QtNaCl_5.4/qtbase/bin/qmake which is not existed in my host folder /opt (/opt/QtNaCl_5.4/qtbase/bin/qmake: no such file or directory). So what I need to put instead?
image

@kom1che
Copy link

kom1che commented May 24, 2017

In addition, I noticed that in docker command stand QtNaCl_5.4 and script creates QtNaCl_56...

@theshadowx
Copy link
Author

theshadowx commented May 24, 2017

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.

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 ..

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

sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage -w=/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 make

Deploy

Just be sure that the file generated is CheckRD.bc

sudo docker run --rm -it -v /home/komche/CheckRD:/home/komche/RD_stage -p 8000:8000 -w=/home/komche/RD_stage theshadowx/qt_nacl:pepper47_qt56 /opt/QtNaCl_56/qtbase/bin/nacldeployqt CheckRD.bc --run

@kom1che
Copy link

kom1che commented May 25, 2017

Hi, you are right. this is project folder
image

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: .
.

@theshadowx
Copy link
Author

theshadowx commented May 25, 2017

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

@kom1che
Copy link

kom1che commented May 26, 2017

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

@kom1che
Copy link

kom1che commented May 26, 2017

image

@theshadowx
Copy link
Author

the main function should be modified.
Have a look at :
https://github.com/msorvig/qt-nacl-manualtests/tree/dev/window_widgets

@kom1che
Copy link

kom1che commented May 27, 2017

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:

image

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((

@kom1che
Copy link

kom1che commented May 27, 2017

image

@theshadowx
Copy link
Author

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

@kom1che
Copy link

kom1che commented May 28, 2017

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?

@theshadowx
Copy link
Author

theshadowx commented May 28, 2017

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.

@kom1che
Copy link

kom1che commented Jun 4, 2017

Hi Ali!

Did you read this article on official Google web-site:

https://developer.chrome.com/native-client/migration

@theshadowx
Copy link
Author

@kom1che thanks for this info.
hope Qt guys will make Qt able to work with WebAssembly.

@kom1che
Copy link

kom1che commented Jun 10, 2017

@theshadowx
Copy link
Author

Thanks, that's great !!!

@theshadowx
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment