[llvm-dev] Success : VirtualBox(clang-built): Ubuntu 17.10 x86_64(clang-built kernel/modules)
Raghavan Santhanam via llvm-dev
llvm-dev at lists.llvm.org
Tue Jun 12 17:56:39 PDT 2018
Hello All,
On Ubuntu 17.10 x86_64 running on clang-built kernel v4.16.3, after fixing
a whole bunch of issues around VirtualBox 5.2.8 and Qt5.10.1, I have been
able to successfully build VirtualBox 5.2.8(along with its kernel modules)
using clang/LLVM(with its integrated-assembler) and bring-up that with
Qt5.10.1(also clang-built) requited by VirtualBox GUI. So, I wanted to
share the overall experience, research, and final success here for the
interested people.
For easy reading with formatting, etc :
https://ubuntuforums.org/showthread.php?t=2389838
Cheers.
------------------------------
*Issues fixed with respect to VirtualBox 5.2.8 source code, build scripts,
compiler/toolchain environment, etc.*
1. Disabled hard-coded gcc check(gcc 4.x...7.x) since clang/LLVM is the
compiler/toolchain in use.
Code:
File affected : configure
2. Fixed paths of mesa, sdl, qt5.10.1 etc - these are not installed into
default system paths since I have Nvidia hardware-acclerated driver
providing the OpenGL/Mesa functionality for my host system - Ubuntu 17.10
x86_64 and I am having qt5.9.1 in the system path for other applications'
compatibility which gets broken with qt5.10.1 if installed to system
folders(in fact, the latter did happen, it was a big annoyance to fix the
qt* stuff back to get my other applications dependent on older qt5.9.1 to
again work, and so on).
3. Corrected $PATH and SDL-specific variables($INCSDL, $LIBSDL) in
configure script(passing via command-line args didn't work for some reason).
Code:
File affected : configure
4. Corrected Qt5 tools(for moc, etc) path in configure. File affected :
configure
5. Created symlink to the qt5.10.1 source/lib directory in qt-tools
directory of VirtualBox-5.2.8/*
6. Selectively enabled/disabled c++11 standard for clang++ for
applicable C++ source files. Some C++ sources needed c++11 features while
some other failed build. Hence, the need.
7. Disabled any other Qt5(.10.1) installed via the Qt SDK installer.
8. Despite CC/HOSTCC, CXX/HOSTCXX and other variables set to
clang/clang++, there appeared many residual hard-coded gcc/g++ references -
so, I wrote placeholder scripts to redirect all the gcc/g++ invocations to
clang/clang++ respectively.
9. Disabled another gcc-specific check in top-level Makefile.kmk.
Code:
File affected : Makefile.kmk
10. iPxe had some variable length arrays, etc and I didn't need iPxe*
anyway for my use case, so disabled it.
Code:
File affected : src/VBox/Devices/Makefile.kmk
11. Comment symbol in an assembly source code was used to be
frontslash(/) instead of the usual semi-colon(';'). But, since
semi-colon(';') didn't work, used hash(#) - worked.
Code:
File affected :
VirtualBox-5.2.8/src/libs/xpcom18a4/nsprpub/pr/src/md/unix/os_Linux_x86_64.s
.
12. Disabled iPxeBiosBin and NetBiosBinm - not needed for my use case.
File affected : src/VBox/Devices/Makefile.kmk
13. Removed register storage class for the error-flagged(
Code:
error: regiser 'r14' unsuitable for global register variables on this
). After completing all of my effort in this project, I researched on
this error and found rbp register needs to be used in place of r14(AREG0)
register when using clang instead of gcc. But, the latter didn't work :
resulted in another error shown below. So, removed the register qualifier
therein. So far, I didn't see any issues within the guest with this logic.
Code:
File affected : VirtualBox-5.2.8/src/recompiler/target-i386/exec.h
Code:
fatal error: error in backend: register rbp is allocatable:
function has no frame pointer
clang: error: clang frontend command failed with exit code 70 (use
-v to see invocation)
14. Used limits.h in place of not-found syslimits.h.
Code:
File affected :
VirtualBox-5.2.8/src/VBox/ExtPacks/VBoxDTrace/include/VBoxDTraceLibCWrappers.h
15. For Qt5X11Extras libs : added symlinks for qtx11extras/lib/* under
qtbase/lib/* - to keep all the libs referenced from one place
16. Disabled reference to g_abNetBiosBinary as iPxe* are disabled - not
needed for my use case.
Code:
File affected : src/VBox/Devices/build/VBoxDD2.cpp
17. Disabled all the VBox test cases - not needed for my use case - so
ignored any errors therein.
Code:
File affected :
src/VBox/Frontends/VBoxHeadless/testcase/Makefile.kmk and
src/VBox/Frontends/VBoxSDL/Makefile.kmk
18. Disabled reference to g_abNetBiosBinary as iPxe* are disabled - not
needed for my use case.
Code:
File affected : VirtualBox-5.2.8/src/VBox/Devices/PC/DevPcBios.cpp
19. Reordered libpthread and libdl linking them in the last(appended to
LDFLAGS) so that there were no "undefined reference..." errors for dlclose
and sem_getvalue symbols.
Code:
File affected : ./src/VBox/Frontends/VBoxSDL/Makefile.kmk
20. Fixed package string to be free from space - caused issue as the
clang/preprocessing considered them as two strings due to a space between
them(rdesktop 1.8.3) : inserted a hyphen(- : rdesktop-1.8.3) between them
to fix this issue.
Code:
File affected : src/VBox/RDP/client-1.8.3/configure. File affected
: src/VBox/RDP/client-1.8.3/Makefile.kmk
21. Added qtx11extras INC paths needed using CXXFLAGS.
Code:
File affected : VirtualBox-5.2.8/src/VBox/Frontends/VirtualBox/Makefile.kmk
22. Fixed missing lrelease Qt tool by copying it from
qt-everywhere-src-5.10.1/qttools/bin/ to
qt-everywhere-src-5.10.1/qtbase/bin/. Earlier, symlinking it from between
them didn't work - complained about some libQt5*.so* not found, etc - so
copied that lrelease.
23. Disabled other test cases.
Code:
File affected : src/VBox/Runtime/Makefile.kmk
24. VirtualBox build completed without any errors.
25. For Qt5 libs, added qt-everywhere-src-5.10.1..qtbase..lib path to
LD_LIBRARY_PATH(in cmd line)
26. Fixed "could not find or load the Qt platform plugin "xcb"" issue by
providing QT_QPA_PLATFORM_PLUGIN_PATH(in cmd line) with the appropriate
path having Qt xcb library(libqxcb.so*) needed for VirtualBox - this was
annoying to the core as there was no hint from where it was searching for
that lib - I thought of using strace on it and finally that gave away the
path to fix it after a lot of debugging, searching on the internet, etc. By
the way, I did *not* install my clang-built Qt5.10.1 onto system paths
since there were some other applications that weren't compatible with
Qt5.10.1 and needed the older Qt versions for them to properly work. My
post on this can be found here :
https://askubuntu.com/questions/3081...017955#1017955
<https://askubuntu.com/questions/308128/failed-to-load-platform-plugin-xcb-while-launching-qt5-app-on-linux-without/1017955#1017955>
and https://unix.stackexchange.com/a/432606/275686
27. VirtualBox was launched - no issues.
28. Ubuntu 17.10 VM was started with thus clang-built VirtualBox -
failed to run with undefined symbol(memset and also memcpy, in individual
cases) needed by VBoxDDR0.r0.
Code:
<ui_error>
Failed to load R0 module
.../VirtualBox-5.2.8_final/VirtualBox-5.2.8/out/linux.amd64/release/bin/VBoxDDR0.r0:
Unable to locate imported symbol 'memset' for module 'VBoxDDR0.r0'
(VERR_SYMBOL_NOT_FOUND).
Failed to register ourselves as a PCI Bus (VERR_MODULE_NOT_FOUND).
Result Code:
NS_ERROR_FAILURE (0x80004005)
Component:
ConsoleWrap
Interface:
IConsole {872da645-4a9b-1727-bee2-5585105b9eed}
</ui_error>
29. Added my own implementations of memcpy and memset in existing
headers - didn't work - same "undefined symbol..." error as above.
Code:
File affected : ./include/iprt/nocrt/string.h. File affected :
./include/iprt/string.h
30. Added new module with my own implementations of memcpy and memset.
Code:
New file : VirtualBox-5.2.8/my_mem.c
31. Added my new module to VBoxDDR0 sources list for the sake of
VBoxDDR0.cpp which uses memset, etc and that's where "undefined symbol..."
error was flagged from.
Code:
File affected : ./src/VBox/Devices/Makefile.kmk
32. Updated VirtualBox/About dialog box metadata with information of
clang/LLVM/kernel/Ubuntu used in this research and success.
Code:
File affected : ./src/VBox/Frontends/VirtualBox/src/VBoxAboutDlg.cpp
33. VirualBox kernel modules were also built using clang/LLVM(with its
integrated-assembler) - no build issues.
34. Fixed "driver not accessible" specific to /dev/vboxdrv by changing
its permission and ownership to current user.
35. Final command that successfully brings up thus clang-built
VirtualBox :
Code:
QT_QPA_PLATFORM_PLUGIN_PATH=/home/exp/clang-virtualbox/qt-everywhere-src-5.10.1/qtbase/plugins/platforms
LD_LIBRARY_PATH=/home/exp/clang-virtualbox/qt-everywhere-src-5.10.1/qtbase/lib
./VirtualBox
------------------------------
*NOTE : *During the course of the above research, experiment, and success,
my system got so messed up with different Qt(5/4)* versions,
mesa drivers, etc so that my host Ubuntu 17.10 system lost its graphics
configuration and while trying to restore by getting rid
of the newly installed mesa drivers(I use Nvidia hardware-acclerated
drivers for OpenGL/Mesa as mentioned in the beginning), etc,
at somepoint, the removal(apt remove..) got interrupted and after sometime,
when I rebooted, booting got stuck with a black screen
- I lost the home directory itself! So, at that point, I thought I had lost
whole lot of data for the sake of above research and
what not. So, booted the system to Ubuntu-recovery mode, and ran all the
fsck, testdisk(TestDisk tool), etc to recover the home directory
if possible - even then, it was not visible readily when I ran those tests,
etc. At that point, I had decided that I will *not* do
any more research or any more effort in anything that damages/fiddles with
my system graphics(mesa, etc)! But, when I rebooted,
for my relief, I got back the Ubuntu-screen and system started booting(so,
it looked like testdisk, etc worked actually in recovering
some lost i-nodes in the corrupted file system?!). Thereafter, reinstalled
all the Nvidia graphics again, removed the mesa drivers, etc
and finally got my system back to its sane state. Thus, after couple of
days, I got some more motivation again to continue where
I had stopped this research of building VirtualBox with clang/LLVM with
Qt5.10.1(also clang-built by me). This time, I decided,
I won't install the built mesa/SDL, etc into system paths but keep them in
known locations and provide those paths for the VirtualBox
configure script as mentioned in the beginning - thus, I was able to build
VirtualBox using clang/LLVM thereafter and finally after
fixing all the above issues. I had completed VirtualBox-clang/LLVM stuff
already without building Qt5.10.1 myself with clang/LLVM
but using installed Qt5.10.1 - but I wanted the whole thing to be
clang-built(VirtualBox + Qt5.10.1). So, took Qt5.10.1 source and
built it from its source(that had some more issues and they are mentioned
below at the end for the interested people) using clang/LLVM.
Finally, rebuilt VirtualBox entirely for the second set of attempts, with
this clang-built Qt5.10.1 and after fixing all the above
listed issues, I was able to successfully bring up clang-built VirtualBox
on clang-built kernel 4.16.3/Ubuntu 17.10 x86_64.
------------------------------
*Platform Info(host and guest)*
*On host Ubuntu 17.10 x86_64*
Code:
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 17.10
Release: 17.10
Codename: artful
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ cat /proc/version
Linux version 4.16.3 (exp at exp) (clang version 5.0.0-3
(tags/RELEASE_500/final)) #1 SMP Thu Apr 19 05:00:08 PDT 2018
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ ./VirtualBox --help
++ QT_QPA_PLATFORM_PLUGIN_PATH=.../qt-everywhere-src-5.10.1/qtbase/plugins/platforms
++ LD_LIBRARY_PATH=.../qt-everywhere-src-5.10.1/qtbase/lib
++ out/linux.amd64/release/bin/VirtualBox --help
Oracle VM VirtualBox Manager 5.2.8
## Built from src - clang/LLVM-kernel-Ubuntu-17.10 by Raghavan Santhanam
## with Qt5.10.1 - Built from src - clang/LLVM-kernel-Ubuntu-17.10 by
Raghavan Santhanam
(C) 2005-2018 Oracle Corporation
All rights reserved.
Usage:
--startvm <vmname|UUID> start a VM by specifying its UUID or name
--separate start a separate VM process
--normal keep normal (windowed) mode during startup
--fullscreen switch to fullscreen mode during startup
--seamless switch to seamless mode during startup
--scale switch to scale mode during startup
--no-startvm-errormsgbox do not show a message box for VM start errors
--restore-current restore the current snapshot before starting
--no-aggressive-caching delays caching media info in VM processes
--fda <image|none> Mount the specified floppy image
--dvd <image|none> Mount the specified DVD image
--dbg enable the GUI debug menu
--debug like --dbg and show debug windows at VM startup
--debug-command-line like --dbg and show command line window
at VM startup
--debug-statistics like --dbg and show statistics window at VM startup
--no-debug disable the GUI debug menu and debug windows
--start-paused start the VM in the paused state
--start-running start the VM running (for overriding --debug*)
Expert options:
--disable-patm disable code patching (ignored by AMD-V/VT-x)
--disable-csam disable code scanning (ignored by AMD-V/VT-x)
--recompile-supervisor recompiled execution of supervisor code (*)
--recompile-user recompiled execution of user code (*)
--recompile-all recompiled execution of all code, with disabled
code patching and scanning
--execute-all-in-iem For debugging the interpreted execution mode.
--warp-pct <pct> time warp factor, 100% (= 1.0) = normal speed
(*) For AMD-V/VT-x setups the effect is --recompile-all.
The following environment (and extra data) variables are evaluated:
VBOX_GUI_DBG_ENABLED (GUI/Dbg/Enabled)
enable the GUI debug menu if set
VBOX_GUI_DBG_AUTO_SHOW (GUI/Dbg/AutoShow)
show debug windows at VM startup
VBOX_GUI_NO_DEBUGGER disable the GUI debug menu and debug windows
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ eclang
VirtualBox-5.2.8/out/linux.amd64/release/bin/VirtualBox
++ strings -a VirtualBox-5.2.8/out/linux.amd64/release/bin/VirtualBox
++ grep 'clang version'
++ head -1
clang version 5.0.0-3 (tags/RELEASE_500/final)
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
*Within guest Ubuntu 17.10 x86_64*
Code:
exp at exp:~$
exp at exp:~$ dmesg | grep VirtualBox
[ 0.000000] DMI: innotek GmbH VirtualBox/VirtualBox, BIOS
VirtualBox 12/01/2006
[ 1.538806] usb 1-1: Manufacturer: VirtualBox
[ 1.561604] input: VirtualBox USB Tablet as
/devices/pci0000:00/0000:00:1f.4/usb1/1-1/1-1:1.0/0003:80EE:0021.0001/input/input6
[ 1.561781] hid-generic 0003:80EE:0021.0001: input,hidraw0: USB HID
v1.10 Mouse [VirtualBox USB Tablet] on usb-0000:00:1f.4-1/input0
exp at exp:~$
exp at exp:~$
exp at exp:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 17.10
Release: 17.10
Codename: artful
exp at exp:~$
exp at exp:~$
exp at exp:~$ sudo dmidecode -t system | grep "Manufacturer\|Product"
Manufacturer: innotek GmbH
Product Name: VirtualBox
exp at exp:~$
exp at exp:~$
exp at exp:~$
exp at exp:~$
exp at exp:~$ sudo dmidecode -t bios | grep "Vendor\|Version"
Vendor: innotek GmbH
Version: VirtualBox
exp at exp:~$
exp at exp:~$
exp at exp:~$
exp at exp:~$ sudo dmidecode -t baseboard | grep
"Manufacturer\|Product\|Vendor\|Version"
Manufacturer: Oracle Corporation
Product Name: VirtualBox
Version: 1.2
exp at exp:~$
exp at exp:~$
exp at exp:~$ cat /proc/cpuinfo | grep "processor\|vendor_id\|model"
processor : 0
vendor_id : GenuineIntel
model : 60
model name : Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz
processor : 1
vendor_id : GenuineIntel
model : 60
model name : Intel(R) Core(TM) i7-4710HQ CPU @ 2.50GHz
exp at exp:~$
exp at exp:~$
exp at exp:~$ sudo dmidecode --version
3.1
exp at exp:~$
exp at exp:~$
exp at exp:~$ sudo dmidecode
# dmidecode 3.1
Getting SMBIOS data from sysfs.
SMBIOS 2.5 present.
10 structures occupying 449 bytes.
Table at 0x000E1000.
Handle 0x0000, DMI type 0, 20 bytes
BIOS Information
Vendor: innotek GmbH
Version: VirtualBox
.
.
Handle 0x0001, DMI type 1, 27 bytes
System Information
Manufacturer: innotek GmbH
Product Name: VirtualBox
Version: 1.2
.
.
Handle 0x0008, DMI type 2, 15 bytes
Base Board Information
Manufacturer: Oracle Corporation
Product Name: VirtualBox
Version: 1.2
.
.
Handle 0x0003, DMI type 3, 13 bytes
Chassis Information
Manufacturer: Oracle Corporation
.
.
Handle 0x0002, DMI type 11, 7 bytes
OEM Strings
String 1: vboxVer_5.2.8
String 2: vboxRev_120774
.
.
exp at exp:~$
exp at exp:~$
exp at exp:~$ uname -arv
Linux exp 4.13.0-38-generic #43-Ubuntu SMP Wed Mar 14 15:20:44 UTC
2018 x86_64 x86_64 x86_64 GNU/Linux
exp at exp:~$
exp at exp:~$
exp at exp:~$ cat /proc/version
Linux version 4.13.0-38-generic (buildd at lgw01-amd64-042) (gcc version
7.2.0 (Ubuntu 7.2.0-8ubuntu3.2)) #43-Ubuntu SMP Wed Mar 14 15:20:44
UTC 2018
exp at exp:~$
exp at exp:~$
exp at exp:~$
*On host Ubuntu 17.10 x86_64[contd..]*
Code:
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ ~/vbox-driver-compiler.sh
++ head -1
+++ uname -r
++ eclang /lib/modules/4.16.3/misc/vboxdrv.ko
+++ strings -a /lib/modules/4.16.3/misc/vboxdrv.ko
+++ grep 'clang version'
+++ head -1
clang version 5.0.0-3 (tags/RELEASE_500/final)
++ head -1
+++ uname -r
++ eclang /lib/modules/4.16.3/misc/vboxpci.ko
+++ strings -a /lib/modules/4.16.3/misc/vboxpci.ko
+++ grep 'clang version'
+++ head -1
clang version 5.0.0-3 (tags/RELEASE_500/final)
++ head -1
+++ uname -r
++ eclang /lib/modules/4.16.3/misc/vboxnetflt.ko
+++ strings -a /lib/modules/4.16.3/misc/vboxnetflt.ko
+++ grep 'clang version'
+++ head -1
clang version 5.0.0-3 (tags/RELEASE_500/final)
++ head -1
+++ uname -r
++ eclang /lib/modules/4.16.3/misc/vboxnetadp.ko
+++ strings -a /lib/modules/4.16.3/misc/vboxnetadp.ko
+++ grep 'clang version'
+++ head -1
clang version 5.0.0-3 (tags/RELEASE_500/final)
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ ~/vbox-driver-modules-version.sh
++ grep '^version='
+++ uname -r
++ strings -a /lib/modules/4.16.3/misc/vboxdrv.ko
version=5.2.8 r120774 (0x00290001)
++ grep '^version='
+++ uname -r
++ strings -a /lib/modules/4.16.3/misc/vboxpci.ko
version=5.2.8 r120774
++ grep '^version='
+++ uname -r
++ strings -a /lib/modules/4.16.3/misc/vboxnetadp.ko
version=5.2.8 r120774 ((0xA2CDe001U))
++ grep '^version='
+++ uname -r
++ strings -a /lib/modules/4.16.3/misc/vboxnetflt.ko
version=5.2.8 r120774 ((0xA2CDe001U))
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ uname -arv
Linux exp 4.16.3 #1 SMP Thu Apr 19 05:00:08 PDT 2018 x86_64 x86_64
x86_64 GNU/Linux
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ eclang /lib/modules/4.16.3/build/vmlinux
++ strings -a /lib/modules/4.16.3/build/vmlinux
++ grep 'clang version'
++ head -1
Linux version 4.16.3 (exp at exp) (clang version 5.0.0-3
(tags/RELEASE_500/final)) #1 SMP Thu Apr 19 05:00:08 PDT 2018
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ clang -v
clang version 5.0.0-3 (tags/RELEASE_500/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ clang++ -v
clang version 5.0.0-3 (tags/RELEASE_500/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ ls -lrt out/linux.amd64/release/bin/src/*.ko
-rw-r--r-- 1 g g 4094920 Apr 19 16:10 out/linux.amd64/release/bin/src/vboxdrv.ko
-rw-r--r-- 1 g g 644392 Apr 19 16:11
out/linux.amd64/release/bin/src/vboxnetflt.ko
-rw-r--r-- 1 g g 349216 Apr 19 16:11
out/linux.amd64/release/bin/src/vboxnetadp.ko
-rw-r--r-- 1 g g 567168 Apr 19 16:11 out/linux.amd64/release/bin/src/vboxpci.ko
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ eclang out/linux.amd64/release/bin/src/*.ko
++ strings -a out/linux.amd64/release/bin/src/vboxdrv.ko
out/linux.amd64/release/bin/src/vboxnetadp.ko
out/linux.amd64/release/bin/src/vboxnetflt.ko
out/linux.amd64/release/bin/src/vboxpci.ko
++ grep 'clang version'
++ head -1
clang version 5.0.0-3 (tags/RELEASE_500/final)
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ eclang
out/linux.amd64/release/bin/src/vboxpci.ko | head -1
++ strings -a out/linux.amd64/release/bin/src/vboxpci.ko
++ grep 'clang version'
++ head -1
clang version 5.0.0-3 (tags/RELEASE_500/final)
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ eclang
out/linux.amd64/release/bin/src/vboxnetadp.ko | head -1
++ strings -a out/linux.amd64/release/bin/src/vboxnetadp.ko
++ grep 'clang version'
++ head -1
clang version 5.0.0-3 (tags/RELEASE_500/final)
.../VirtualBox-5.2.8$ eclang
out/linux.amd64/release/bin/src/vboxnetflt.ko | head -1
++ strings -a out/linux.amd64/release/bin/src/vboxnetflt.ko
++ grep 'clang version'
++ head -1
clang version 5.0.0-3 (tags/RELEASE_500/final)
.../VirtualBox-5.2.8$ eclang
out/linux.amd64/release/bin/src/vboxdrv.ko | head -1
++ strings -a out/linux.amd64/release/bin/src/vboxdrv.ko
++ grep 'clang version'
++ head -1
clang version 5.0.0-3 (tags/RELEASE_500/final)
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ strings -a
out/linux.amd64/release/bin/src/vboxdrv.ko | grep "^version="
version=5.2.8 r120774 (0x00290001)
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ strings -a
out/linux.amd64/release/bin/src/vboxpci.ko | grep "^version="
version=5.2.8 r120774
.../VirtualBox-5.2.8$ strings -a
out/linux.amd64/release/bin/src/vboxnetadp.ko | grep "^version="
version=5.2.8 r120774 ((0xA2CDe001U))
.../VirtualBox-5.2.8$
.../VirtualBox-5.2.8$ strings -a
out/linux.amd64/release/bin/src/vboxnetflt.ko | grep "^version="
version=5.2.8 r120774 ((0xA2CDe001U))
.../VirtualBox-5.2.8$
------------------------------
*Qt5.10.1 built with clang/LLVM - success and issues*
1. Downloaded qt-everywhere-src-5.10.1.zip(
https://download.qt.io/archive/qt/5....src-5.10.1.zip
<https://download.qt.io/archive/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.zip>)
first, extracted, and tried to run "configure" - failed with (error -
/bin/sh^M: bad interpreter: No such file or directory). This was due to
CR-LF DOS line-ending format in the files instead of LF Unix line-ending
format. Doing "dos2unix" on the top-level "configure" script fixed the
issue at the top-level, but the subsequent scripts failed with the same
CR-LF DOS vs LF Unix line-ending issue as under. Ran dos2unix recursively
on the entire qt-everywhere-src-5.10.1/* and that fixed this issue
entirely. It's likely that this qt-everywhere-src-5.10.1.zip has been
created on a Windows system and hence the DOS-CR/LF line-ending instead of
Unix-LF line-ending - just my observation.
Code:
...qt-everywhere-src-5.10.1$
...qt-everywhere-src-5.10.1$ unzip ../qt-everywhere-src-5.10.1.zip
...qt-everywhere-src-5.10.1$ ./configure -platform linux-clang
bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory
.../qt-everywhere-src-5.10.1$
...qt-everywhere-src-5.10.1$
...qt-everywhere-src-5.10.1$ dos2unix configure
dos2unix: converting file configure to Unix format...
...qt-everywhere-src-5.10.1$
...qt-everywhere-src-5.10.1$ ./configure -platform linux-clang
+ cd qtbase
+ .../qt-everywhere-src-5.10.1/qtbase/configure -top-level
-platform linux-clang
./configure: .../qt-everywhere-src-5.10.1/qtbase/configure:
/bin/sh^M: bad interpreter: No such file or directory
./configure: line 49: .../qt-everywhere-src-5.10.1/qtbase/configure: Success
...qt-everywhere-src-5.10.1$
...qt-everywhere-src-5.10.1$
2. After solving the above issue, checked if
qt-everywhere-src-5.10.1.tar.xz(
https://download.qt.io/archive/qt/5....-5.10.1.tar.xz
<https://download.qt.io/archive/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.tar.xz>)
also had the same issue though I knew it might not have since usually on
tar.* archives are not popular among Windows systems but *zip archive
formats. Extracted it as usual and didn't see any CR-LF/LF line-ending
format issue for configure, etc.
3. Fixed a macro definiton, PACKAGE_STRING, by removing space and
placing a hyphen(could be anything but space) - space caused clang to
truncate the macro at space causing the latter part of the string to be
separate from the definition. Also, escaping the space didn't work.
Code:
File affected :
qtwebengine/src/3rdparty/chromium/third_party/libsrtp/BUILD.gn
Code:
Error :
++ /usr/bin/clang -fintegrated-as -integrated-as ...........
'-DPACKAGE_STRING="libsrtp2\' '2.1.0-pre"' ...................
clang: error: no such file or directory: '2.1.0-pre"'
[10/32] CC obj/third_party/libsrtp/libsrtp/crypto_kernel.o
FAILED: obj/third_party/libsrtp/libsrtp/crypto_kernel.o
4. Selectively enabled/disabled C++11 support for some C++ source code -
added -std=c++11 to clang++ command-line.
Code:
Error :
qt-everywhere-src-5.10.1/qtbase/include/QtCore/../../src/corelib/global/qcompilerdetection.h:567:6:
error: Qt requires a C++11 compiler and yours does not seem to be that.
# error Qt requires a C++11 compiler and yours does not seem to be that.
5. Finally, after a long period of time(spread over several days due to
the time-consuming fetching of *chromium* source code and also having
patience, time and motivation to fix narrow down above issues one by one),
I was able to successfully built Qt5.10.1 from its source using clang-LLVM
on Ubuntu 17.10 x86_64.
Code:
exp at exp:~$
exp at exp:~$ uname -arv
Linux exp 4.16.3 #1 SMP Thu Apr 19 05:00:08 PDT 2018 x86_64 x86_64
x86_64 GNU/Linux
exp at exp:~$
exp at exp:~$
exp at exp:~$ cat /proc/version
Linux version 4.16.3 (exp at exp) (clang version 5.0.0-3
(tags/RELEASE_500/final)) #1 SMP Thu Apr 19 05:00:08 PDT 2018
exp at exp:~$
exp at exp:~$
exp at exp:~$
exp at exp:~$ eclang /lib/modules/4.16.3/build/vmlinux
++ strings -a /lib/modules/4.16.3/build/vmlinux
++ grep 'clang version'
++ head -1
Linux version 4.16.3 (exp at exp) (clang version 5.0.0-3
(tags/RELEASE_500/final)) #1 SMP Thu Apr 19 05:00:08 PDT 2018
exp at exp:~$
exp at exp:~$
exp at exp:~$
exp at exp:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 17.10
Release: 17.10
Codename: artful
exp at exp:~$
exp at exp:~$
exp at exp:~$
exp at exp:~$ eclang ./qt-everywhere-src-5.10.1/qtbase/bin/qmake
++ strings -a ./qt-everywhere-src-5.10.1/qtbase/bin/qmake
++ grep 'clang version'
clang version 5.0.0-3 (tags/RELEASE_500/final)
clang version 5.0.0-3 (tags/RELEASE_500/final)
exp at exp:~$
exp at exp:~$ eclang ./qt-everywhere-src-5.10.1/qtbase/bin/moc
++ strings -a ./qt-everywhere-src-5.10.1/qtbase/bin/moc
++ grep 'clang version'
clang version 5.0.0-3 (tags/RELEASE_500/final)
exp at exp:~$
exp at exp:~$
exp at exp:~$
exp at exp:~$ ./qt-everywhere-src-5.10.1/qtbase/bin/moc -v
moc 5.10.1
exp at exp:~$
exp at exp:~$ ./qt-everywhere-src-5.10.1/qtbase/bin/qmake -v | head -1
QMake version 3.1
exp at exp:~$
exp at exp:~$
exp at exp:~$
exp at exp:~$ eclang ./qt-everywhere-src-5.10.1/qtbase/lib/libQt5Core.so.5.10.1
++ strings -a ./qt-everywhere-src-5.10.1/qtbase/lib/libQt5Core.so.5.10.1
++ grep 'clang version'
clang version 5.0.0-3 (tags/RELEASE_500/final)
exp at exp:~$
exp at exp:~$
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180612/695bfa5d/attachment-0001.html>
More information about the llvm-dev
mailing list