[vlc-devel] [PATCH 1/9] contrib: qt: pass compiler flags directly to the mkspec file

Pierre Lamot pierre at videolabs.io
Mon Aug 31 09:38:01 CEST 2020


On 2020-08-31 07:07, Steve Lhomme wrote:
> On 2020-08-28 16:25, Pierre Lamot wrote:
>>    the -I flags passed to Qt configure script is applied to both 
>> target and host
>>    compilation.
>>    This may cause issues to compile host tools as the headers of the 
>> target may
>>    be incompatible with the host (ie: pthread header)
>> ---
>>   ...user-defined-compilation-flags-to-qt.patch | 53 
>> +++++++++++++++++++
>>   contrib/src/qt/rules.mak                      |  6 ++-
>>   2 files changed, 58 insertions(+), 1 deletion(-)
>>   create mode 100644 
>> contrib/src/qt/0001-allow-to-pass-user-defined-compilation-flags-to-qt.patch
>> 
>> diff --git 
>> a/contrib/src/qt/0001-allow-to-pass-user-defined-compilation-flags-to-qt.patch 
>> b/contrib/src/qt/0001-allow-to-pass-user-defined-compilation-flags-to-qt.patch
>> new file mode 100644
>> index 0000000000..71e707daae
>> --- /dev/null
>> +++ 
>> b/contrib/src/qt/0001-allow-to-pass-user-defined-compilation-flags-to-qt.patch
>> @@ -0,0 +1,53 @@
>> +From 691cced4d252d3b76dce02963c18ca85d125bf09 Mon Sep 17 00:00:00 
>> 2001
>> +From: Pierre Lamot <pierre at videolabs.io>
>> +Date: Tue, 18 Aug 2020 16:06:06 +0200
>> +Subject: [PATCH] allow to pass user defined compilation flags to qt
>> +
>> +---
>> + mkspecs/darwin-g++/qmake.conf      | 4 ++++
>> + mkspecs/win32-clang-g++/qmake.conf | 4 ++++
>> + mkspecs/win32-g++/qmake.conf       | 4 ++++
>> + 3 files changed, 12 insertions(+)
>> +
>> +diff --git a/mkspecs/darwin-g++/qmake.conf 
>> b/mkspecs/darwin-g++/qmake.conf
>> +index 85955f7..8602b78 100644
>> +--- a/mkspecs/darwin-g++/qmake.conf
>> ++++ b/mkspecs/darwin-g++/qmake.conf
>> +@@ -86,4 +86,8 @@ QMAKE_PCH_OUTPUT_EXT    = .gch
>> + QMAKE_CXXFLAGS_PRECOMPILE += -x objective-c++-header -c 
>> ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
>> + QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
>> +
>> ++QMAKE_CFLAGS           += $${VLC_EXTRA_CFLAGS}
>> ++QMAKE_CXXFLAGS         += $${VLC_EXTRA_CXXFLAGS}
>> ++QMAKE_LDFLAGS          += $${VLC_EXTRA_LDFLAGS}
> 
> This is very VLC specific. A solution that could be upstreamed would be 
> better.
> Also I've had problems with pthread in 3.0 because it uses the old
> pthread-GC2. With the one from mingw there's no problem. Is there any
> problem with the includes ?

Yes, the issue arise when compiling host tools (see the commit 
description). this affects tools compiled outside of qtbase. ie:  
qmlcachegen in 5.12 and qmltyperegistrar (which is mandatory) in 5.15

> There should be a way to set flags for host flags. Qt should not use
> the env CFLAGS when cross compiling.

I reported the issue to Qt people. I've been told :

> Using global -I will affect both host and target tools/libraries. This 
> isn't something that we can easily fix anymore in Qt 5.

and

> The -I arguments are apparently used for both, the target and the host.
> Put the include paths in your mkspec and the problem should be gone.

the canonical solution would have been to provide a customised mkspec (I 
do this for some embed plateforms) but I assumed there was little 
interest to "copy verbatim their windows mkspec and add our includes" VS 
"directly patch the one they provide".

>> ++
>> + load(qt_config)
>> +diff --git a/mkspecs/win32-clang-g++/qmake.conf 
>> b/mkspecs/win32-clang-g++/qmake.conf
>> +index 4630ec4..149f779 100644
>> +--- a/mkspecs/win32-clang-g++/qmake.conf
>> ++++ b/mkspecs/win32-clang-g++/qmake.conf
>> +@@ -24,4 +24,8 @@ QMAKE_CXXFLAGS_WARN_ON  = $$QMAKE_CFLAGS_WARN_ON
>> + QMAKE_LINK              = $${CROSS_COMPILE}clang++
>> + QMAKE_LINK_C            = $${CROSS_COMPILE}clang
>> +
>> ++QMAKE_CFLAGS           += $${VLC_EXTRA_CFLAGS}
>> ++QMAKE_CXXFLAGS         += $${VLC_EXTRA_CXXFLAGS}
>> ++QMAKE_LDFLAGS          += $${VLC_EXTRA_LDFLAGS}
>> ++
>> + load(qt_config)
>> +diff --git a/mkspecs/win32-g++/qmake.conf 
>> b/mkspecs/win32-g++/qmake.conf
>> +index 5e99233..b22cbce 100644
>> +--- a/mkspecs/win32-g++/qmake.conf
>> ++++ b/mkspecs/win32-g++/qmake.conf
>> +@@ -26,4 +26,8 @@ QMAKE_CFLAGS_LTCG       = -flto
>> + QMAKE_CXXFLAGS_LTCG     = $$QMAKE_CFLAGS_LTCG
>> + QMAKE_LFLAGS_LTCG       = $$QMAKE_CFLAGS_LTCG
>> +
>> ++QMAKE_CFLAGS           += $${VLC_EXTRA_CFLAGS}
>> ++QMAKE_CXXFLAGS         += $${VLC_EXTRA_CXXFLAGS}
>> ++QMAKE_LDFLAGS          += $${VLC_EXTRA_LDFLAGS}
>> ++
>> + load(qt_config)
>> +--
>> +2.25.1
>> +
>> diff --git a/contrib/src/qt/rules.mak b/contrib/src/qt/rules.mak
>> index 1eb09d87ae..901f6f6ce6 100644
>> --- a/contrib/src/qt/rules.mak
>> +++ b/contrib/src/qt/rules.mak
>> @@ -28,6 +28,7 @@ 
>> $(TARBALLS)/qtbase-everywhere-src-$(QT_VERSION_FULL).tar.xz:
>>     qt: qtbase-everywhere-src-$(QT_VERSION_FULL).tar.xz .sum-qt
>>   	$(UNPACK)
>> +	$(APPLY) 
>> $(SRC)/qt/0001-allow-to-pass-user-defined-compilation-flags-to-qt.patch
>>   ifdef HAVE_WIN32
>>   	$(APPLY) 
>> $(SRC)/qt/0001-Windows-QPA-prefer-lower-value-when-rounding-fractio.patch
>>   	$(APPLY) 
>> $(SRC)/qt/0002-Windows-QPA-Disable-systray-notification-sounds.patch
>> @@ -81,6 +82,9 @@ endif
>>     endif
>>   +QT_PLATFORM += -device-option VLC_EXTRA_CFLAGS="-isystem 
>> $(PREFIX)/include" \
>> +	-device-option VLC_EXTRA_CXXFLAGS="-isystem $(PREFIX)/include"
>> +
>>   QT_CONFIG := -static -no-shared -opensource -confirm-license 
>> -no-pkg-config \
>>   	-no-sql-sqlite -no-gif -qt-libjpeg -no-openssl $(QT_OPENGL) 
>> -no-dbus \
>>   	-no-vulkan -no-sql-odbc -no-pch \
>> @@ -102,7 +106,7 @@ ENV_VARS := $(HOSTVARS) DXSDK_DIR=$(PREFIX)/bin
>>   .qt: qt
>>   	# Prevent all Qt contribs from generating and installing libtool 
>> .la files
>>   	cd $< && sed -i "/CONFIG/ s/ create_libtool/ -create_libtool/g" 
>> mkspecs/features/qt_module.prf
>> -	+cd $< && $(ENV_VARS) ./configure $(QT_PLATFORM) $(QT_CONFIG) 
>> -prefix $(PREFIX) -I $(PREFIX)/include
>> +	+cd $< && $(ENV_VARS) ./configure $(QT_PLATFORM) $(QT_CONFIG) 
>> -prefix $(PREFIX)
>>   	# Make && Install libraries
>>   	cd $< && $(ENV_VARS) $(MAKE)
>>   	cd $< && $(MAKE) -C src sub-corelib-install_subtargets 
>> sub-gui-install_subtargets sub-widgets-install_subtargets 
>> sub-platformsupport-install_subtargets sub-zlib-install_subtargets 
>> sub-bootstrap-install_subtargets sub-network-install_subtargets 
>> sub-testlib-install_subtargets
>> -- 2.25.1
>> 
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
>> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list