diff options
Diffstat (limited to 'mkspecs')
49 files changed, 930 insertions, 336 deletions
diff --git a/mkspecs/common/android-base-head.conf b/mkspecs/common/android-base-head.conf index 9be6111915..c7c27298b9 100644 --- a/mkspecs/common/android-base-head.conf +++ b/mkspecs/common/android-base-head.conf @@ -75,3 +75,10 @@ equals(ANDROID_TARGET_ARCH, x86_64)|equals(ANDROID_TARGET_ARCH, mips64): \ QMAKE_ANDROID_PLATFORM_LIBDIR = $${QMAKE_ANDROID_PLATFORM_LIBDIR}64 CROSS_COMPILE = $$NDK_TOOLCHAIN_PATH/bin/$$NDK_TOOLS_PREFIX- + +QMAKE_PCH_OUTPUT_EXT = .gch + +QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} +QMAKE_CFLAGS_USE_PRECOMPILE = -include ${QMAKE_PCH_OUTPUT_BASE} +QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} +QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE diff --git a/mkspecs/common/android-base-tail.conf b/mkspecs/common/android-base-tail.conf index 7c3ae9566a..e239fa01c5 100644 --- a/mkspecs/common/android-base-tail.conf +++ b/mkspecs/common/android-base-tail.conf @@ -30,6 +30,8 @@ QMAKE_CFLAGS_THREAD = -D_REENTRANT QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden QMAKE_CFLAGS_NEON = -mfpu=neon +QMAKE_CFLAGS_GNUC99 = -std=gnu99 +QMAKE_CFLAGS_GNUC11 = -std=gnu11 QMAKE_CXXFLAGS_CXX11 = -std=c++11 QMAKE_CXXFLAGS_CXX14 = -std=c++14 QMAKE_CXXFLAGS_CXX1Z = -std=c++1z diff --git a/mkspecs/common/clang.conf b/mkspecs/common/clang.conf index 0fb84bc1b3..5800aaa5b4 100644 --- a/mkspecs/common/clang.conf +++ b/mkspecs/common/clang.conf @@ -21,6 +21,8 @@ QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_ QMAKE_CFLAGS_USE_PRECOMPILE = -Xclang -include-pch -Xclang ${QMAKE_PCH_OUTPUT} QMAKE_CFLAGS_LTCG = -flto QMAKE_CFLAGS_DISABLE_LTCG = -fno-lto +QMAKE_CFLAGS_GNUC99 = -std=gnu99 +QMAKE_CFLAGS_GNUC11 = -std=gnu11 QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE diff --git a/mkspecs/common/g++-base.conf b/mkspecs/common/g++-base.conf index c42c46b0ec..fa0f0c391d 100644 --- a/mkspecs/common/g++-base.conf +++ b/mkspecs/common/g++-base.conf @@ -27,6 +27,8 @@ QMAKE_CFLAGS_USE_PRECOMPILE = -include ${QMAKE_PCH_OUTPUT_BASE} QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE +QMAKE_CFLAGS_GNUC99 = -std=gnu99 +QMAKE_CFLAGS_GNUC11 = -std=gnu11 QMAKE_CXXFLAGS_CXX11 = -std=c++11 QMAKE_CXXFLAGS_CXX14 = -std=c++1y QMAKE_CXXFLAGS_CXX1Z = -std=c++1z diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf index 234f71d495..c2669e4833 100644 --- a/mkspecs/common/gcc-base.conf +++ b/mkspecs/common/gcc-base.conf @@ -50,7 +50,7 @@ QMAKE_CFLAGS_ISYSTEM = -isystem QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden QMAKE_CFLAGS_EXCEPTIONS_OFF += -fno-exceptions -QMAKE_CFLAGS_SPLIT_SECTIONS += -ffunction-sections +QMAKE_CFLAGS_SPLIT_SECTIONS += -ffunction-sections -fdata-sections QMAKE_CFLAGS_LTCG = -flto -fno-fat-lto-objects QMAKE_CFLAGS_LTCG_FATOBJECTS = -ffat-lto-objects QMAKE_CFLAGS_DISABLE_LTCG = -fno-lto @@ -81,6 +81,9 @@ QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO += QMAKE_LFLAGS_EXCEPTIONS_OFF += QMAKE_LFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG -fuse-linker-plugin +QMAKE_CFLAGS_C99 = -std=c99 +QMAKE_CFLAGS_C11 = -std=c11 + QMAKE_CFLAGS_SSE2 += -msse2 QMAKE_CFLAGS_SSE3 += -msse3 QMAKE_CFLAGS_SSSE3 += -mssse3 @@ -105,6 +108,9 @@ QMAKE_CFLAGS_NEON += -mfpu=neon QMAKE_CFLAGS_MIPS_DSP += -mdsp QMAKE_CFLAGS_MIPS_DSPR2 += -mdspr2 +# -march=haswell is supported as of GCC 4.9 and Clang 3.6 +QMAKE_CFLAGS_ARCH_HASWELL = -march=core-avx2 + # Wrapper tools that understand .o/.a files with GIMPLE instead of machine code QMAKE_AR_LTCG = gcc-ar cqs QMAKE_NM_LTCG = gcc-nm -P diff --git a/mkspecs/common/icc-base-unix.conf b/mkspecs/common/icc-base-unix.conf new file mode 100644 index 0000000000..54eda984b7 --- /dev/null +++ b/mkspecs/common/icc-base-unix.conf @@ -0,0 +1,106 @@ +# +# Base qmake configuration for ICC on *nix-systems +# +# Before making changes to this file, please read the comment in +# icc-base.conf, to make sure the change goes in the right place. +# +# To verify that your change has the desired effect on the final configuration +# you can use the manual test in tests/manual/mkspecs. +# + +MAKEFILE_GENERATOR = UNIX +QMAKE_COMPILER_DEFINES += __GNUC__ + +QMAKE_COMPILER = gcc intel_icc # icc pretends to be gcc + +QMAKE_CFLAGS_OPTIMIZE = -O2 +QMAKE_CFLAGS_OPTIMIZE_SIZE = -Os + +QMAKE_CC = icc +QMAKE_LEX = flex +QMAKE_LEXFLAGS = +QMAKE_YACC = yacc +QMAKE_YACCFLAGS = -d +QMAKE_CFLAGS = +QMAKE_CFLAGS_APP = -fPIC +QMAKE_CFLAGS_DEPS = -M +QMAKE_CFLAGS_WARN_ON = -w1 -Wcheck -wd654,1572,411,873,1125,2259,2261,3280,3373 +QMAKE_CFLAGS_WARN_OFF = -w +QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE +QMAKE_CFLAGS_DEBUG = -O0 -g +QMAKE_CFLAGS_SHLIB = -fPIC +QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB +QMAKE_CFLAGS_SPLIT_SECTIONS = -ffunction-sections -fdata-sections +QMAKE_CFLAGS_LTCG = -ipo +QMAKE_CFLAGS_DISABLE_LTCG = -no-ipo + +QMAKE_CFLAGS_SSE2 += -msse2 +QMAKE_CFLAGS_SSE3 += -msse3 +QMAKE_CFLAGS_SSSE3 += -mssse3 +QMAKE_CFLAGS_SSE4_1 += -msse4.1 +QMAKE_CFLAGS_SSE4_2 += -msse4.2 +QMAKE_CFLAGS_AVX += -march=core-avx +QMAKE_CFLAGS_AVX2 += -march=core-avx2 +QMAKE_CFLAGS_AVX512F += -march=broadwell -xCOMMON-AVX512 +QMAKE_CFLAGS_AVX512CD += -march=broadwell -xCOMMON-AVX512 +QMAKE_CFLAGS_AVX512ER += -march=knl +QMAKE_CFLAGS_AVX512PF += -march=knl +QMAKE_CFLAGS_AVX512DQ += -march=skylake-avx512 +QMAKE_CFLAGS_AVX512BW += -march=skylake-avx512 +QMAKE_CFLAGS_AVX512VL += -march=skylake-avx512 +QMAKE_CFLAGS_AESNI += -maes +QMAKE_CFLAGS_F16C += $$QMAKE_CFLAGS_AVX2 +QMAKE_CFLAGS_RDRND += -mrdrnd +QMAKE_CFLAGS_SHANI += -msha + +QMAKE_CXX = icpc +QMAKE_CXXFLAGS = $$QMAKE_CFLAGS +QMAKE_CXXFLAGS_APP = $$QMAKE_CFLAGS_APP +QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS +QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON +QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF +QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE +QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG +QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB +QMAKE_CXXFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_STATIC_LIB +QMAKE_CXXFLAGS_SPLIT_SECTIONS = $$QMAKE_CFLAGS_SPLIT_SECTIONS +QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions +QMAKE_CXXFLAGS_CXX11 = -std=c++11 +QMAKE_CXXFLAGS_CXX14 = -std=c++1y +QMAKE_CXXFLAGS_CXX1Z = -std=c++1z +QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11 +QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y +QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z +QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG +QMAKE_CXXFLAGS_DISABLE_LTCG = $$QMAKE_CFLAGS_DISABLE_LTCG + +# pch support +CONFIG += icc_pch_style +QMAKE_PCH_OUTPUT_EXT = .pchi +QMAKE_CXXFLAGS_USE_PRECOMPILE = -pch-use ${QMAKE_PCH_OUTPUT} -include ${QMAKE_PCH_INPUT} +QMAKE_CXXFLAGS_PRECOMPILE = -c -pch-create ${QMAKE_PCH_OUTPUT} -include ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_TEMP_OBJECT} ${QMAKE_PCH_TEMP_SOURCE} + +# Symbol visibility control +QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden +QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden + +QMAKE_LINK = icpc +QMAKE_LINK_SHLIB = icpc +QMAKE_LFLAGS = +QMAKE_LFLAGS_RELEASE = +QMAKE_LFLAGS_DEBUG = +QMAKE_LFLAGS_THREAD = +QMAKE_LFLAGS_RPATH = -Wl,-rpath, +QMAKE_LFLAGS_CXX11 = +QMAKE_LFLAGS_CXX14 = +QMAKE_LFLAGS_CXX1Z = +QMAKE_LFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG + +QMAKE_INCDIR = +QMAKE_LIBDIR = +QMAKE_INCDIR_X11 = +QMAKE_LIBDIR_X11 = +QMAKE_INCDIR_OPENGL = +QMAKE_LIBDIR_OPENGL = + +QMAKE_CLEAN = -r $(OBJECTS_DIR)/ti_files diff --git a/mkspecs/common/macx.conf b/mkspecs/common/macx.conf index 8f9eda10d7..6e95112f9b 100644 --- a/mkspecs/common/macx.conf +++ b/mkspecs/common/macx.conf @@ -5,6 +5,8 @@ QMAKE_PLATFORM += macos osx macx QMAKE_MAC_SDK = macosx +QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.12 +QMAKE_APPLE_DEVICE_ARCHS = x86_64 QT_MAC_SDK_VERSION_TESTED_WITH = 10.13 device.sdk = macosx @@ -13,4 +15,6 @@ device.dir_affix = $${device.sdk} device.CONFIG = $${device.sdk} device.deployment_identifier = $${device.sdk} +QMAKE_LIBS_VULKAN = + include(mac.conf) diff --git a/mkspecs/common/msvc-desktop.conf b/mkspecs/common/msvc-desktop.conf index b7d2eecc82..a4fadeb029 100644 --- a/mkspecs/common/msvc-desktop.conf +++ b/mkspecs/common/msvc-desktop.conf @@ -16,7 +16,9 @@ MAKEFILE_GENERATOR = MSVC.NET QMAKE_PLATFORM = win32 QMAKE_COMPILER = msvc CONFIG += flat debug_and_release debug_and_release_target precompile_header autogen_precompile_source embed_manifest_dll embed_manifest_exe -DEFINES += UNICODE _UNICODE WIN32 +# MSVC 2017 15.8+ fixed std::aligned_storage but compilation fails without +# _ENABLE_EXTENDED_ALIGNED_STORAGE flag since the fix breaks binary compatibility. +DEFINES += UNICODE _UNICODE WIN32 _ENABLE_EXTENDED_ALIGNED_STORAGE QMAKE_COMPILER_DEFINES += _WIN32 contains(QMAKE_TARGET.arch, x86_64) { DEFINES += WIN64 diff --git a/mkspecs/common/msvc-version.conf b/mkspecs/common/msvc-version.conf index 5805383a04..3fb55c9d81 100644 --- a/mkspecs/common/msvc-version.conf +++ b/mkspecs/common/msvc-version.conf @@ -110,12 +110,6 @@ greaterThan(QMAKE_MSC_VER, 1909) { QMAKE_CXXFLAGS_CXX14 = -std:c++14 QMAKE_CXXFLAGS_CXX1Z = -std:c++17 } - - # MSVC 2017 15.8+ fixed std::aligned_storage but compilation fails without - # this flag since the fix breaks binary compatibility. - greaterThan(QMAKE_MSC_VER, 1914) { - DEFINES += _ENABLE_EXTENDED_ALIGNED_STORAGE - } } greaterThan(QMAKE_MSC_VER, 1910) { diff --git a/mkspecs/common/qcc-base-qnx.conf b/mkspecs/common/qcc-base-qnx.conf index 148645b4e9..21ce269006 100644 --- a/mkspecs/common/qcc-base-qnx.conf +++ b/mkspecs/common/qcc-base-qnx.conf @@ -42,9 +42,13 @@ QMAKE_INCDIR_POST = $${QNX_DIR}/usr/include $${QNX_DIR}/usr/include/freety QMAKE_LIBDIR_POST = $${QNX_DIR}/$${QNX_CPUDIR}/lib $${QNX_DIR}/$${QNX_CPUDIR}/usr/lib QMAKE_RPATHLINKDIR_POST += $${QNX_DIR}/$${QNX_CPUDIR}/lib $${QNX_DIR}/$${QNX_CPUDIR}/usr/lib -QMAKE_CXXFLAGS_CXX11 = -Wc,-std=gnu++11 -QMAKE_CXXFLAGS_CXX14 = -Wc,-std=gnu++1y -QMAKE_CXXFLAGS_CXX1Z = -Wc,-std=gnu++1z +QMAKE_CXXFLAGS_CXX11 = +QMAKE_CXXFLAGS_CXX14 = +QMAKE_CXXFLAGS_CXX1Z = + +QMAKE_CXXFLAGS_GNUCXX11 = -Wc,-std=gnu++11 +QMAKE_CXXFLAGS_GNUCXX14 = -Wc,-std=gnu++1y +QMAKE_CXXFLAGS_GNUCXX1Z = -Wc,-std=gnu++1z QMAKE_LINK_C = $$QMAKE_CC QMAKE_LINK_C_SHLIB = $$QMAKE_CC diff --git a/mkspecs/common/winrt_winphone/qmake.conf b/mkspecs/common/winrt_winphone/qmake.conf index 8c1a767dfa..375e084127 100644 --- a/mkspecs/common/winrt_winphone/qmake.conf +++ b/mkspecs/common/winrt_winphone/qmake.conf @@ -8,7 +8,9 @@ MAKEFILE_GENERATOR = MSBUILD QMAKE_COMPILER = msvc QMAKE_PLATFORM = winrt win32 CONFIG = package_manifest $$CONFIG incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target rtti -DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT Q_BYTE_ORDER=Q_LITTLE_ENDIAN +# MSVC 2017 15.8+ fixed std::aligned_storage but compilation fails without +# _ENABLE_EXTENDED_ALIGNED_STORAGE flag since the fix breaks binary compatibility. +DEFINES += UNICODE WIN32 QT_LARGEFILE_SUPPORT Q_BYTE_ORDER=Q_LITTLE_ENDIAN _ENABLE_EXTENDED_ALIGNED_STORAGE QMAKE_COMPILER_DEFINES += _WIN32 DEPLOYMENT_PLUGIN += qwinrt diff --git a/mkspecs/features/data/macros.cpp b/mkspecs/features/data/macros.cpp index 9dcb8f0914..7a06fad1a6 100644 --- a/mkspecs/features/data/macros.cpp +++ b/mkspecs/features/data/macros.cpp @@ -27,3 +27,6 @@ QMAKE_GCC_MAJOR_VERSION = __GNUC__ QMAKE_GCC_MINOR_VERSION = __GNUC_MINOR__ QMAKE_GCC_PATCH_VERSION = __GNUC_PATCHLEVEL__ #endif +#ifdef __ghs__ +QMAKE_GHS_VERSION = __GHS_VERSION_NUMBER +#endif diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf index 9eba5bcf00..ad4a5f6365 100644 --- a/mkspecs/features/default_post.prf +++ b/mkspecs/features/default_post.prf @@ -134,7 +134,7 @@ c++11|c++14|c++1z { isEmpty(QMAKE_CXXFLAGS_GNU$$cxxstd) { strict_c++: QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_STRICTCXX } else { - !strict_c++: cxxstd = GNU$$cxxstd + !strict_c++|isEmpty(QMAKE_CXXFLAGS_$$cxxstd): cxxstd = GNU$$cxxstd } QMAKE_CXXFLAGS += $$eval(QMAKE_CXXFLAGS_$$cxxstd) @@ -143,6 +143,19 @@ c++11|c++14|c++1z { unset(cxxstd) } +c99|c11 { + c11: cstd = C11 + else: cstd = C99 + + !isEmpty(QMAKE_CFLAGS_GNU$$cstd) { + !strict_c|isEmpty(QMAKE_CFLAGS_$$cstd): cstd = GNU$$cstd + } + + QMAKE_CFLAGS += $$eval(QMAKE_CFLAGS_$$cstd) + + unset(cstd) +} + utf8_source { QMAKE_CFLAGS += $$QMAKE_CFLAGS_UTF8_SOURCE QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_UTF8_SOURCE diff --git a/mkspecs/features/exclusive_builds.prf b/mkspecs/features/exclusive_builds.prf index 2d7f0e1ab6..1ff9a04d42 100644 --- a/mkspecs/features/exclusive_builds.prf +++ b/mkspecs/features/exclusive_builds.prf @@ -38,5 +38,5 @@ defineTest(addExclusiveBuilds) { } # Default directories to process -QMAKE_DIR_REPLACE = OBJECTS_DIR MOC_DIR RCC_DIR PRECOMPILED_DIR QGLTF_DIR DESTDIR TRACEGEN_DIR QMLCACHE_DIR -QMAKE_DIR_REPLACE_SANE += QGLTF_DIR TRACEGEN_DIR QMLCACHE_DIR +QMAKE_DIR_REPLACE = OBJECTS_DIR MOC_DIR RCC_DIR PRECOMPILED_DIR QGLTF_DIR DESTDIR TRACEGEN_DIR QMLCACHE_DIR LRELEASE_DIR +QMAKE_DIR_REPLACE_SANE += QGLTF_DIR TRACEGEN_DIR QMLCACHE_DIR LRELEASE_DIR diff --git a/mkspecs/features/gc_binaries.prf b/mkspecs/features/gc_binaries.prf new file mode 100644 index 0000000000..111d5d95ef --- /dev/null +++ b/mkspecs/features/gc_binaries.prf @@ -0,0 +1,3 @@ +QMAKE_CFLAGS += $$QMAKE_CFLAGS_SPLIT_SECTIONS +QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_SPLIT_SECTIONS +QMAKE_LFLAGS += $$QMAKE_LFLAGS_GCSECTIONS diff --git a/mkspecs/features/lrelease.prf b/mkspecs/features/lrelease.prf new file mode 100644 index 0000000000..1e828b64df --- /dev/null +++ b/mkspecs/features/lrelease.prf @@ -0,0 +1,41 @@ +# Automatically generate .qm files out of .ts files in TRANSLATIONS and +# EXTRA_TRANSLATIONS. +# +# If embed_translations is enabled, the generated .qm files are made available +# in the resource system under :/i18n/. +# +# Otherwise, the .qm files are available in the build directory in LRELEASE_DIR. +# They can also be automatically installed by setting QM_FILES_INSTALL_PATH. + +qtPrepareTool(QMAKE_LRELEASE, lrelease) + +isEmpty(LRELEASE_DIR): LRELEASE_DIR = .qm +isEmpty(QM_FILES_RESOURCE_PREFIX): QM_FILES_RESOURCE_PREFIX = i18n + +lrelease.name = lrelease +lrelease.input = TRANSLATIONS EXTRA_TRANSLATIONS +lrelease.output = $$LRELEASE_DIR/${QMAKE_FILE_IN_BASE}.qm +lrelease.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} $$QMAKE_LRELEASE_FLAGS -qm ${QMAKE_FILE_OUT} +silent: lrelease.commands = @echo lrelease ${QMAKE_FILE_IN} && $$lrelease.commands +lrelease.CONFIG = no_link +QMAKE_EXTRA_COMPILERS += lrelease + +all_translations = $$TRANSLATIONS $$EXTRA_TRANSLATIONS +for (translation, all_translations) { + # mirrors $$LRELEASE_DIR/${QMAKE_FILE_IN_BASE}.qm above + translation = $$basename(translation) + QM_FILES += $$OUT_PWD/$$LRELEASE_DIR/$$replace(translation, \\..*$, .qm) +} +embed_translations { + qmake_qm_files.files = $$QM_FILES + qmake_qm_files.base = $$OUT_PWD/$$LRELEASE_DIR + qmake_qm_files.prefix = $$QM_FILES_RESOURCE_PREFIX + RESOURCES += qmake_qm_files +} else { + !isEmpty(QM_FILES_INSTALL_PATH) { + qm_files.files = $$QM_FILES + qm_files.path = $$QM_FILES_INSTALL_PATH + INSTALLS += qm_files + } + lrelease.CONFIG += target_predeps no_clean +} diff --git a/mkspecs/features/qml_module.prf b/mkspecs/features/qml_module.prf index 4db0040dc5..65212b2abf 100644 --- a/mkspecs/features/qml_module.prf +++ b/mkspecs/features/qml_module.prf @@ -31,13 +31,17 @@ qml1_target { instbase = $$[QT_INSTALL_QML] } -!qml1_target:static: CONFIG += builtin_resources +!qml1_target:static: \ + CONFIG += builtin_resources +else: \ + CONFIG += install_qml_files builtin_resources { URITARGET = $$replace(URI, "\\.", "_") - # Ensure the QML files are included in the resources. In static builds, - # the QML engine reads also the qmldir file from the resources. - $${URITARGET}.files = $$qmldir_file $$fq_qml_files + # In static builds, the QML engine reads also the qmldir file from the resources. + static: $${URITARGET}.files = $$qmldir_file + # Ensure the QML files are included in the resources. + $${URITARGET}.files += $$fq_qml_files # qt-project.org/imports is the path used for locating imports inside the resources $${URITARGET}.prefix = /qt-project.org/imports/$$TARGETPATH RESOURCES += $${URITARGET} @@ -47,7 +51,7 @@ builtin_resources { qmldir.base = $$_PRO_FILE_PWD_ # Tools need qmldir and plugins.qmltypes always installed on the file system qmldir.files = $$qmldir_file $$fq_aux_qml_files -!builtin_resources: qmldir.files += $$fq_qml_files +install_qml_files: qmldir.files += $$fq_qml_files qmldir.path = $$instbase/$$TARGETPATH INSTALLS += qmldir diff --git a/mkspecs/features/qml_plugin.prf b/mkspecs/features/qml_plugin.prf index d49f4c49c1..0786dbfd84 100644 --- a/mkspecs/features/qml_plugin.prf +++ b/mkspecs/features/qml_plugin.prf @@ -111,7 +111,7 @@ load(qt_common) load(resolve_target) TARGETPATHBASE = $$replace(TARGETPATH, \\.\\d+\$, ) qmltypes.target = qmltypes - qmltypes.commands = $$QMLPLUGINDUMP -nonrelocatable $$replace(TARGETPATHBASE, /, .) $$IMPORT_VERSION > $$QMLTYPEFILE + qmltypes.commands = $$QMLPLUGINDUMP -nonrelocatable $$QMAKE_QMLPLUGINDUMP_FLAGS $$replace(TARGETPATHBASE, /, .) $$IMPORT_VERSION > $$QMLTYPEFILE qmltypes.depends = $$QMAKE_RESOLVED_TARGET } else { qmltypes.CONFIG += recursive diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf index b57afcf72d..90e318e2a4 100644 --- a/mkspecs/features/qt.prf +++ b/mkspecs/features/qt.prf @@ -230,7 +230,16 @@ for(ever) { QMAKE_FRAMEWORKPATH *= $$MODULE_FRAMEWORKS !isEmpty(MODULE_MODULE) { contains(MODULE_CONFIG, lib_bundle) { - LIBS$$var_sfx += -framework $$MODULE_MODULE + framework = $$MODULE_MODULE + qtConfig(debug_and_release):!macx-xcode { + platform_target_suffix = $$qtPlatformTargetSuffix() + !isEmpty(platform_target_suffix): \ + # The -framework linker argument supports a name[,suffix] version, + # where if the suffix is specified the framework is first searched + # for the library with the suffix and then without. + framework = $$framework,$$platform_target_suffix + } + LIBS$$var_sfx += -framework $$framework } else { !isEmpty(MODULE_LIBS_ADD): \ LIBS$$var_sfx += -L$$MODULE_LIBS_ADD diff --git a/mkspecs/features/qt_app.prf b/mkspecs/features/qt_app.prf index 883f8ca215..8354f30eea 100644 --- a/mkspecs/features/qt_app.prf +++ b/mkspecs/features/qt_app.prf @@ -20,9 +20,6 @@ isEmpty(QMAKE_TARGET_DESCRIPTION): \ isEmpty(QMAKE_INFO_PLIST): CONFIG -= app_bundle -# This decreases the binary size for tools if statically linked -QMAKE_LFLAGS += $$QMAKE_LFLAGS_GCSECTIONS - host_build: QT -= gui # no host tool will ever use gui host_build:force_bootstrap { !build_pass:qtConfig(release_tools): CONFIG += release diff --git a/mkspecs/features/qt_build_config.prf b/mkspecs/features/qt_build_config.prf index 021036e4f9..0c6c10dded 100644 --- a/mkspecs/features/qt_build_config.prf +++ b/mkspecs/features/qt_build_config.prf @@ -27,6 +27,7 @@ RCC_DIR = .rcc UI_DIR = .uic TRACEGEN_DIR = .tracegen QMLCACHE_DIR = .qmlcache +LRELEASE_DIR = .qm intel_icl { # ICL 14.0 has a bug that makes it not find #includes in dirs starting with . MOC_DIR = tmp/moc diff --git a/mkspecs/features/qt_build_paths.prf b/mkspecs/features/qt_build_paths.prf index 1848f00e90..3bb3823a8e 100644 --- a/mkspecs/features/qt_build_paths.prf +++ b/mkspecs/features/qt_build_paths.prf @@ -12,7 +12,8 @@ # Find the module's source root dir. isEmpty(_QMAKE_CONF_): error("Project has no top-level .qmake.conf file.") MODULE_BASE_INDIR = $$dirname(_QMAKE_CONF_) -MODULE_BASE_OUTDIR = $$shadowed($$MODULE_BASE_INDIR) +REAL_MODULE_BASE_OUTDIR = $$shadowed($$MODULE_BASE_INDIR) +MODULE_BASE_OUTDIR = $$REAL_MODULE_BASE_OUTDIR !isEmpty(MODULE_BASE_DIR): MODULE_SYNCQT_DIR = $$MODULE_BASE_DIR # compat for webkit isEmpty(MODULE_SYNCQT_DIR): MODULE_SYNCQT_DIR = $$MODULE_BASE_INDIR isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$MODULE_BASE_OUTDIR diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf index 415044bb64..4ad9946ae0 100644 --- a/mkspecs/features/qt_common.prf +++ b/mkspecs/features/qt_common.prf @@ -17,6 +17,8 @@ DEFINES *= QT_NO_NARROWING_CONVERSIONS_IN_CONNECT qtConfig(c++11): CONFIG += c++11 strict_c++ qtConfig(c++14): CONFIG += c++14 qtConfig(c++1z): CONFIG += c++1z +qtConfig(c99): CONFIG += c99 +qtConfig(c11): CONFIG += c11 qtConfig(stack-protector-strong): CONFIG += stack_protector_strong contains(TEMPLATE, .*lib) { # module and plugins @@ -56,19 +58,31 @@ host_build:cross_compile: return() # -Wvla: use of variable-length arrays (an extension to C++) clang { clang_ver = $${QT_CLANG_MAJOR_VERSION}.$${QT_CLANG_MINOR_VERSION} + apple_ver = $${QT_APPLE_CLANG_MAJOR_VERSION}.$${QT_APPLE_CLANG_MINOR_VERSION} versionAtLeast(clang_ver, 3.5): \ QMAKE_CXXFLAGS_WARN_ON += -Wdate-time - # Clang/LLVM 5.0 and Xcode 9.0 introduced unguarded availability warnings. - # The same construct has been a hard error in Swift from the very beginning. - apple_ver = $${QT_APPLE_CLANG_MAJOR_VERSION}.$${QT_APPLE_CLANG_MINOR_VERSION} - darwin:if(versionAtLeast(clang_ver, 5.0)|versionAtLeast(apple_ver, 9.0)): \ + versionAtLeast(clang_ver, 3.6)|versionAtLeast(apple_ver, 6.3): \ + QMAKE_CXXFLAGS_WARN_ON += -Winconsistent-missing-override + + darwin { QMAKE_CXXFLAGS_WARN_ON += \ - -Werror=unguarded-availability \ - -Werror=unguarded-availability-new \ - -Werror=unsupported-availability-guard + -Wobjc-interface-ivars \ + -Wobjc-method-access \ + -Wobjc-multiple-method-names + + # Clang/LLVM 5.0 and Xcode 9.0 introduced unguarded availability warnings. + # The same construct has been a hard error in Swift from the very beginning. + versionAtLeast(clang_ver, 5.0)|versionAtLeast(apple_ver, 9.0): \ + QMAKE_CXXFLAGS_WARN_ON += \ + -Werror=unguarded-availability \ + -Werror=unguarded-availability-new \ + -Werror=unsupported-availability-guard + } } else: gcc:!intel_icc { QMAKE_CXXFLAGS_WARN_ON += -Wvla + # GCC 5 fixed -Wmissing-field-initializers for when there are no initializers + lessThan(QT_GCC_MAJOR_VERSION, 5): QMAKE_CXXFLAGS_WARN_ON += -Wno-missing-field-initializers # GCC 5 introduced -Wdate-time greaterThan(QT_GCC_MAJOR_VERSION, 4): QMAKE_CXXFLAGS_WARN_ON += -Wdate-time # GCC 6 introduced these @@ -82,11 +96,11 @@ warnings_are_errors:warning_clean { # This setting is compiler-dependent anyway because it depends on the version of the # compiler. clang { - # Apple clang 4.0-4.2,5.0-5.1,6.0-6.4,7.0-7.3 + # Apple clang 4.0-4.2,5.0-5.1,6.0-6.4,7.0-7.3,8.0-8.3,9.0-9.2 # Regular clang 3.x-6.0 apple_ver = $${QT_APPLE_CLANG_MAJOR_VERSION}.$${QT_APPLE_CLANG_MINOR_VERSION} reg_ver = $${QT_CLANG_MAJOR_VERSION}.$${QT_CLANG_MINOR_VERSION} - contains(apple_ver, "4\\.[012]|5\\.[01]|6\\.[01234]|7\\.[0123]")|contains(reg_ver, "[345]\\.|6\\.0") { + contains(apple_ver, "4\\.[012]|5\\.[01]|6\\.[01234]|7\\.[0123]|8\\.[0123]|9\\.[012]")|contains(reg_ver, "[345]\\.|6\\.0") { QMAKE_CXXFLAGS_WARN_ON += -Werror -Wno-error=\\$${LITERAL_HASH}warnings -Wno-error=deprecated-declarations $$WERROR } } else:intel_icc:linux { diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf index 4039bba431..81b820978a 100644 --- a/mkspecs/features/qt_configure.prf +++ b/mkspecs/features/qt_configure.prf @@ -495,6 +495,15 @@ defineTest(qtConfLibrary_inline) { !defined($${1}.libs, var):isEmpty($${1}.builds._KEYS_): \ error("'inline' source in library '$$lib' specifies neither 'libs' nor 'builds'.") + # library lists are specified as strings in the json sources for + # readability, but it's a pain to work with that, so expand it now. + eval($${1}.libs = $$eval($${1}.libs)) + export($${1}.libs) + for (b, $${1}.builds._KEYS_) { + eval($${1}.builds.$${b} = $$eval($${1}.builds.$${b})) + export($${1}.builds.$${b}) + } + # if multiple libraries provide the same export, it makes sense # to make them recognize the same input variables. input = $$eval($${2}.alias) @@ -507,7 +516,7 @@ defineTest(qtConfLibrary_inline) { iv = $${input}.libs.$${b} vars += $$eval(config.commandline.rev_assignments.$${iv}) defined(config.input.$${iv}, var) { - $${1}.builds.$${b} = $$eval(config.input.$${iv}) + eval($${1}.builds.$${b} = $$eval(config.input.$${iv})) export($${1}.builds.$${b}) $${1}.builds._KEYS_ *= $${b} any = true @@ -528,28 +537,28 @@ defineTest(qtConfLibrary_inline) { # direct libs. overwrites inline libs. defined(config.input.$${input}.libs, var) { - $${1}.libs = $$eval(config.input.$${input}.libs) + eval($${1}.libs = $$eval(config.input.$${input}.libs)) export($${1}.libs) } # prefix. prepends to (possibly overwritten) inline libs. - prefix = $$val_escape(config.input.$${input}.prefix) + prefix = $$eval(config.input.$${input}.prefix) !isEmpty(prefix) { $${1}.includedir = $$prefix/include export($${1}.includedir) - $${1}.libs = "-L$$prefix/lib $$eval($${1}.libs)" + $${1}.libs = -L$$prefix/lib $$eval($${1}.libs) export($${1}.libs) } - incdir = $$val_escape(config.input.$${input}.incdir) + incdir = $$eval(config.input.$${input}.incdir) !isEmpty(incdir) { $${1}.includedir = $$incdir export($${1}.includedir) } - libdir = $$val_escape(config.input.$${input}.libdir) + libdir = $$eval(config.input.$${input}.libdir) !isEmpty(libdir) { - $${1}.libs = "-L$$libdir $$eval($${1}.libs)" + $${1}.libs = -L$$libdir $$eval($${1}.libs) export($${1}.libs) } @@ -563,13 +572,12 @@ defineTest(qtConfLibrary_makeSpec) { isEmpty(spec): \ error("makeSpec source in library '$$eval($${1}.library)' does not specify 'spec'.") - $${1}.includedir = "$$val_escape(QMAKE_INCDIR_$$spec)" + $${1}.includedir = $$eval(QMAKE_INCDIR_$$spec) export($${1}.includedir) - libs = + $${1}.libs = for (l, QMAKE_LIBDIR_$$spec): \ - libs += -L$$l - libs += $$eval(QMAKE_LIBS_$$spec) - $${1}.libs = "$$val_escape(libs)" + $${1}.libs += -L$$l + $${1}.libs += $$eval(QMAKE_LIBS_$$spec) export($${1}.libs) # the library definition is always in scope, so no point in exporting it. @@ -596,13 +604,39 @@ defineTest(qtConfLibrary_pkgConfig) { qtRunLoggedCommand("$$pkg_config --modversion $$args", version)|return(false) qtRunLoggedCommand("$$pkg_config --libs-only-L $$args", libpaths)|return(false) qtRunLoggedCommand("$$pkg_config --libs-only-l $$args", libs)|return(false) - qtRunLoggedCommand("$$pkg_config --cflags $$args", $${1}.cflags)|return(false) version ~= s/[^0-9.].*$// $${1}.version = $$first(version) export($${1}.version) - libpaths += $$libs - $${1}.libs = "$$libpaths" + eval($${1}.libs = $$libpaths $$libs) export($${1}.libs) + + qtRunLoggedCommand("$$pkg_config --cflags $$args", $${1}.cflags)|return(false) + # Split CFLAGS into stuff that goes into DEFINES, INCLUDEPATH, and other stuff. + # The compound variable is still set in case something wants to use it outside + # regular library exports. + defines = + includes = + ignored = + eval(cflags = $$eval($${1}.cflags)) + for (i, cflags) { + contains(i, "-I.*") { + i ~= s/^-I// + includes += $$i + } else: contains(i, "-D.*") { + i ~= s/^-D// + defines += $$i + } else { + # Sometimes, pkg-config files include other flags + # we really don't need and shouldn't add. + ignored += $$i + } + } + !isEmpty(ignored): \ + qtLog("Note: Dropped compiler flags '$$ignored'.") + $${1}.defines = $$defines + export($${1}.defines) + $${1}.includedir = $$includes + export($${1}.includedir) return(true) } @@ -624,21 +658,35 @@ defineTest(qtConfTest_getPkgConfigVariable) { } defineReplace(qtConfLibraryArgs) { - qmake_args = - libs = $$eval($${1}.libs) - !isEmpty(libs): \ - qmake_args += $$system_quote(LIBS += $$libs) + NAME = $$upper($$eval($${1}.library)) + qmake_args = "QMAKE_LIBS_$${NAME} = $$val_escape($${1}.libs)" for (b, $${1}.builds._KEYS_): \ - qmake_args += $$system_quote(LIBS_$$upper($$b) += $$eval($${1}.builds.$${b})) + qmake_args += "QMAKE_LIBS_$${NAME}_$$upper($$b) = $$val_escape($${1}.builds.$${b})" includedir = $$eval($${1}.includedir) !isEmpty(includedir): \ - qmake_args += $$system_quote(INCLUDEPATH *= $$includedir) - cflags = $$eval($${1}.cflags) - !isEmpty(cflags): \ - qmake_args += $$system_quote(QMAKE_CFLAGS += $$cflags) $$system_quote(QMAKE_CXXFLAGS += $$cflags) + qmake_args += "QMAKE_INCDIR_$${NAME} = $$val_escape(includedir)" + defines = $$eval($${1}.defines) + !isEmpty(defines): \ + qmake_args += "QMAKE_DEFINES_$${NAME} = $$val_escape(defines)" return($$qmake_args) } +defineReplace(qtConfAllLibraryArgs) { + isEmpty(1): return() + dep_uses = + dep_args = + for (use, 1) { + use_cfg = $$section(use, :, 0, 0) + use_lib = $$section(use, :, 1, 1) + dep_uses += $$use_lib + !isEmpty(use_cfg) { + lpfx = $${use_cfg}.libraries.$$use_lib + dep_args += $$qtConfLibraryArgs($${lpfx}.sources.$$eval($${lpfx}.source)) + } + } + return("QMAKE_USE += $$dep_uses" $$dep_args) +} + defineTest(qtConfExportLibrary) { lpfx = $${currentConfig}.libraries.$$1 alias = $$eval($${lpfx}.alias) @@ -650,38 +698,17 @@ defineTest(qtConfExportLibrary) { !$$qtConfEvaluate($$eval($${spfx}.export)): return() output = privatePro - - eval(libs = $$eval($${spfx}.libs)) - eval(cflags = $$eval($${spfx}.cflags)) - eval(includes = $$eval($${spfx}.includedir)) - - # Split $$cflags into stuff that goes into DEFINES, INCLUDEPATH, and other stuff. - defines = - ignored = - for (i, cflags) { - contains(i, "-I.*") { - i ~= s/^-I// - includes += $$i - } else: contains(i, "-D.*") { - i ~= s/^-D// - defines += $$i - } else { - # Sometimes, pkg-config files or *-config scripts include other flags - # we really don't need and shouldn't add (pg_config is really bad). - ignored += $$i - } - } - !isEmpty(ignored): \ - qtConfAddNote("Dropped compiler flags '$$ignored' when detecting library '$$name'.") - NAME = $$upper($$name) # LIBS is emitted even if empty, as this allows the library to be "seen". + libs = $$eval($${spfx}.libs) qtConfOutputVar(assign, $$output, QMAKE_LIBS_$$NAME, $$libs) for (b, $${spfx}.builds._KEYS_) { - eval(blibs = $$eval($${spfx}.builds.$${b})) + blibs = $$eval($${spfx}.builds.$${b}) qtConfOutputVar(assign, $$output, QMAKE_LIBS_$${NAME}_$$upper($$b), $$blibs) } + defines = $$eval($${spfx}.defines) !isEmpty(defines): qtConfOutputVar(assign, $$output, QMAKE_DEFINES_$$NAME, $$defines) + includes = $$eval($${spfx}.includedir) !isEmpty(includes): qtConfOutputVar(assign, $$output, QMAKE_INCDIR_$$NAME, $$includes) !isEmpty($${currentConfig}.module): \ qtConfExtendVar($$output, "QT.$${currentModule}_private.libraries", $$name) @@ -708,7 +735,7 @@ defineTest(qtConfHandleLibrary) { export($${lpfx}.result) return() } - use_args = $$eval($${lpfx}.literal_args) + resolved_uses = $$eval($${lpfx}.resolved_uses) qtConfLoadResult($${lpfx}, $$1, "library") { $$eval($${lpfx}.result): \ @@ -741,9 +768,12 @@ defineTest(qtConfHandleLibrary) { next() } + $${lpfx}.source = $$s + export($${lpfx}.source) + # if the library defines a test, use it to verify the source. !isEmpty($${lpfx}.test)|!isEmpty($${lpfx}.test._KEYS_) { - $${lpfx}.literal_args = $$qtConfLibraryArgs($$spfx) $$use_args + $${lpfx}.resolved_uses = $$currentConfig:$$1 $$resolved_uses $${lpfx}.host = $$eval($${spfx}.host) !qtConfTest_compile($$lpfx) { qtLog(" => source failed verification.") @@ -759,9 +789,6 @@ defineTest(qtConfHandleLibrary) { for (b, $${spfx}.builds._KEYS_): \ $${lpfx}.cache += sources.$${s}.builds.$${b} - $${lpfx}.source = $$s - export($${lpfx}.source) - # immediately output the library as well. qtConfExportLibrary($$1) @@ -855,21 +882,30 @@ defineTest(qtConfTestPrepare_compile) { !defined(QMAKE_LIBS_$$nu, var): \ error("Test $$1 tries to use undeclared library '$$u'") # using an external library by exported name. - $${1}.literal_args += $$system_quote(QMAKE_USE += $$u) + $${1}.resolved_uses += :$$u } else { lpfx = $${libConfig}.libraries.$${u} - isEmpty($${lpfx}.source): \ + !equals($${lpfx}.result, true): \ return(false) - $${1}.literal_args += $$qtConfLibraryArgs($${lpfx}.sources.$$eval($${lpfx}.source)) + $${1}.resolved_uses += $$libConfig:$$u } } - export($${1}.literal_args) + export($${1}.resolved_uses) return(true) } defineTest(qtConfPrepareCompileTestSource) { test_dir = $$2 + test_lang = $$eval($${1}.lang) + isEmpty(test_lang): test_lang = "c++" + + equals(test_lang, "c++"): suffix = "cpp" + else: equals(test_lang, "c"): suffix = "c" + else: equals(test_lang, "objc"): suffix = "m" + else: equals(test_lang, "objc++"): suffix = "mm" + else: error("Unknown language '$$test_lang' in compile test $$1") + # Create source code contents = "/* Generated by configure */" # Custom code before includes @@ -893,10 +929,10 @@ defineTest(qtConfPrepareCompileTestSource) { " /* END TEST */" \ " return 0;" \ "}" - write_file($$test_dir/main.cpp, contents)|error() + write_file($$test_dir/main.$$suffix, contents)|error() # Create stub .pro file - contents = "SOURCES = main.cpp" + contents = "SOURCES = main.$$suffix" # Custom project code for (ent, $$qtConfScalarOrList($${1}.qmake)): \ contents += $$ent @@ -983,8 +1019,12 @@ defineTest(qtConfTest_compile) { cont = "CONFIG += QTDIR_build" write_file($$test_base_out_dir/.qmake.cache, cont)|error() + $${1}.literal_args += $$qtConfAllLibraryArgs($$eval($${1}.resolved_uses)) + # add possible command line args - qmake_args += $$qtConfPrepareArgs($$eval($${1}.args)) $$eval($${1}.literal_args) + qmake_args += \ + $$qtConfPrepareArgs($$eval($${1}.args)) \ + $$qtSystemQuote($$eval($${1}.literal_args)) qtRunLoggedCommand("$$test_cmd_base $$qmake_args $$system_quote($$test_dir)") { qtRunLoggedCommand("$$test_cmd_base $$QMAKE_MAKE"): \ @@ -994,11 +1034,6 @@ defineTest(qtConfTest_compile) { return(false) } -defineTest(qtConfTest_verifySpec) { - qtConfTest_compile($$1): return(true) - qtConfFatalError("Cannot compile a minimal program. The toolchain or QMakeSpec is broken.", log) -} - defineTest(qtConfTest_files) { for(i, $${1}.files._KEYS_) { f = $$eval($${1}.files.$${i}) diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index 8c7adc45eb..51b5bde67a 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -29,8 +29,6 @@ host_build|staticlib: CONFIG += static host_build { QT -= gui # no host module will ever use gui - QMAKE_CFLAGS += $$QMAKE_CFLAGS_SPLIT_SECTIONS - QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_SPLIT_SECTIONS force_bootstrap { !build_pass:qtConfig(release_tools): CONFIG += release contains(QT, core(-private)?|xml) { @@ -266,15 +264,20 @@ load(qt_installs) load(qt_targets) # this builds on top of qt_common -!internal_module:!lib_bundle:if(unix|mingw) { +!internal_module:if(unix|mingw) { CONFIG += create_pc QMAKE_PKGCONFIG_DESTDIR = pkgconfig host_build: \ QMAKE_PKGCONFIG_LIBDIR = $$[QT_HOST_LIBS] else: \ QMAKE_PKGCONFIG_LIBDIR = $$[QT_INSTALL_LIBS/raw] - QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_HEADERS/raw] - QMAKE_PKGCONFIG_CFLAGS = -D$$MODULE_DEFINE -I${includedir}/$$MODULE_INCNAME + lib_bundle { + QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_LIBS/raw]/$${MODULE_INCNAME}.framework/Headers + QMAKE_PKGCONFIG_CFLAGS = -D$$MODULE_DEFINE + } else { + QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_HEADERS/raw] + QMAKE_PKGCONFIG_CFLAGS = -D$$MODULE_DEFINE -I${includedir}/$$MODULE_INCNAME + } QMAKE_PKGCONFIG_NAME = $$replace(TARGET, ^Qt, "Qt$$QT_MAJOR_VERSION ") QMAKE_PKGCONFIG_FILE = $$replace(TARGET, ^Qt, Qt$$QT_MAJOR_VERSION) for(i, MODULE_DEPENDS): \ diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf index bbded56b42..70d3520e5c 100644 --- a/mkspecs/features/qt_module_headers.prf +++ b/mkspecs/features/qt_module_headers.prf @@ -123,7 +123,7 @@ MODULE_INC_OUTDIR = $$MODULE_BASE_OUTDIR/include/$$MODULE_INCNAME isEmpty(MODULE_CFG_FILE): MODULE_CFG_FILE = qt$${MODULE}-config exists($$OUT_PWD/$${MODULE_CFG_FILE}.h) { - fwd_rel = $$relative_path($$OUT_PWD, $$MODULE_INC_OUTDIR) + fwd_rel = $$relative_path($$OUT_PWD, $$REAL_MODULE_BASE_OUTDIR) SYNCQT.INJECTIONS += \ $$fwd_rel/$${MODULE_CFG_FILE}.h:$${MODULE_CFG_FILE}.h \ $$fwd_rel/$${MODULE_CFG_FILE}_p.h:$$MODULE_VERSION/$$MODULE_INCNAME/private/$${MODULE_CFG_FILE}_p.h @@ -131,7 +131,7 @@ exists($$OUT_PWD/$${MODULE_CFG_FILE}.h) { for (injection, SYNCQT.INJECTIONS) { injects = $$split(injection, :) - dst_hdr = $$absolute_path($$member(injects, 0), $$MODULE_INC_OUTDIR) + dst_hdr = $$absolute_path($$member(injects, 0), $$REAL_MODULE_BASE_OUTDIR) ofwd_hdr = $$member(injects, 1) fwd_hdr = $$replace(ofwd_hdr, ^\\^, ) MAIN_FWD = $$MODULE_INC_OUTDIR/$$fwd_hdr diff --git a/mkspecs/features/qt_test_helper.prf b/mkspecs/features/qt_test_helper.prf new file mode 100644 index 0000000000..5daa14731d --- /dev/null +++ b/mkspecs/features/qt_test_helper.prf @@ -0,0 +1,35 @@ +# +# W A R N I N G +# ------------- +# +# This file is not part of the Qt API. It exists purely as an +# implementation detail. It may change from version to version +# without notice, or even be removed. +# +# We mean it. +# + +# If an auto test needs a helper application, this helper should +# be put into the same directory as the test itself. This common +# folder should be the test's "main directory" or a "debug" or "release" +# subfolder inside this main directory if debug_and_release is enabled. +# Additionally the helper's executable is suffixed with "_helper" to +# avoid name clashes with its folder. + +CONFIG -= app_bundle +CONFIG += console + +debug_and_release { + CONFIG(debug, debug|release) { + TARGET = ../../debug/$${TARGET}_helper + } else { + TARGET = ../../release/$${TARGET}_helper + } +} else { + TARGET = ../$${TARGET}_helper +} + +parentFolder = $$dirname(_PRO_FILE_PWD_) +testFolder = $$basename(parentFolder) +target.path = $$[QT_INSTALL_TESTS]/$$testFolder +INSTALLS += target diff --git a/mkspecs/features/resources.prf b/mkspecs/features/resources.prf index ff45446219..a25846bd77 100644 --- a/mkspecs/features/resources.prf +++ b/mkspecs/features/resources.prf @@ -72,10 +72,44 @@ for(resource, RESOURCES) { RESOURCES += $$resource_file } +!isEmpty(RESOURCES):contains(TEMPLATE, .*lib):plugin:static { + pluginName = $$lower($$replace(_PRO_FILE_, .*/([^/.]+)\\.[^/.]+, \\1)) + + resource_init_function = $${pluginName}_plugin_resource_init + DEFINES += "QT_PLUGIN_RESOURCE_INIT_FUNCTION=$$resource_init_function" + + RESOURCE_INIT_CPP = $$OUT_PWD/$${pluginName}_plugin_resources.cpp + + GENERATED_SOURCES += $$RESOURCE_INIT_CPP + QMAKE_DISTCLEAN += $$RESOURCE_INIT_CPP + + !build_pass { + RESOURCE_INIT_CONT = \ + "// This file is autogenerated by qmake. It contains a function that" \ + "// references all resources the plugin includes and the function is" \ + "// referenced by Qt_(MOC_)EXPORT_PLUGIN to ensure the inclusion in" \ + "// the statically linked plugin." \ + "$${LITERAL_HASH}include <QtCore/qglobal.h>" \ + "void $${resource_init_function}() " \ + "{" \ + + for (resource, RESOURCES) { + resource_name = $$section($$list($$basename(resource)), ., 0, 0) + resource_name = $$replace(resource_name, [^a-zA-Z0-9_], _) + RESOURCE_INIT_CONT += " Q_INIT_RESOURCE($$resource_name);" + } + + RESOURCE_INIT_CONT += \ + "}" + + write_file($$RESOURCE_INIT_CPP, RESOURCE_INIT_CONT)|error() + } +} + rcc.input = RESOURCES rcc.name = RCC ${QMAKE_FILE_IN} rcc.depend_command = $$QMAKE_RCC_DEP -list $$QMAKE_RESOURCE_FLAGS ${QMAKE_FILE_IN} -rcc.CONFIG += add_inputs_as_makefile_deps +rcc.CONFIG += add_inputs_as_makefile_deps dep_lines !resources_big|ltcg|macx-xcode|contains(TEMPLATE, "vc.*") { diff --git a/mkspecs/features/simd.prf b/mkspecs/features/simd.prf index e4bee7107c..a0b40fcf11 100644 --- a/mkspecs/features/simd.prf +++ b/mkspecs/features/simd.prf @@ -141,6 +141,28 @@ addSimdCompiler(neon) addSimdCompiler(mips_dsp) addSimdCompiler(mips_dspr2) +# Haswell sub-architecture +defineTest(addSimdArch) { + name = arch_$$1 + dependencies = $$2 + upname = $$upper($$name) + + cpu_features_missing = + for(part, dependencies) { + !contains(QT_CPU_FEATURES, $$part): cpu_features_missing = 1 + } + + CONFIG += $$name + isEmpty(cpu_features_missing): QT_CPU_FEATURES += $$name + + export(QT_CPU_FEATURES) + export(CONFIG) + addSimdCompiler($$name) +} + +isEmpty(QMAKE_CFLAGS_ARCH_HASWELL): QMAKE_CFLAGS_ARCH_HASWELL = $$QMAKE_CFLAGS_AVX2 +avx2: addSimdArch(haswell, avx2 bmi bmi2 f16c fma lzcnt popcnt) + # Follow the Intel compiler's lead and define profiles of AVX512 instructions defineTest(addAvx512Profile) { name = $$1 @@ -149,7 +171,7 @@ defineTest(addAvx512Profile) { varname = QMAKE_CFLAGS_$$upname cpu_features_missing = - cflags = $$QMAKE_CFLAGS_AVX512F + cflags = $$QMAKE_CFLAGS_ARCH_HASWELL $$QMAKE_CFLAGS_AVX512F for(part, dependencies) { !CONFIG($$part): return() # Profile isn't supported by the compiler @@ -168,7 +190,4 @@ defineTest(addAvx512Profile) { addSimdCompiler($$name) } addAvx512Profile(avx512common, avx512cd) -addAvx512Profile(avx512mic, avx512cd avx512er avx512pf) addAvx512Profile(avx512core, avx512cd avx512bw avx512dq avx512vl) -addAvx512Profile(avx512ifmavl, avx512ifma avx512vl) -addAvx512Profile(avx512vbmivl, avx512vbmi avx512vl) diff --git a/mkspecs/features/testcase.prf b/mkspecs/features/testcase.prf index 8d51c9d028..79883b7f09 100644 --- a/mkspecs/features/testcase.prf +++ b/mkspecs/features/testcase.prf @@ -9,6 +9,18 @@ testcase_exceptions: CONFIG += exceptions # Set in qt_build_config.prf testcase_no_bundle: CONFIG -= app_bundle +# Allow testcases to mark themselves as not supporting high-DPI +testcase_lowdpi { + macos { + !isEmpty(QMAKE_INFO_PLIST): \ + error("QMAKE_INFO_PLIST already set, can't apply testcase_lowdpi") + + QMAKE_INFO_PLIST = $$QMAKESPEC/Info.plist.disable_highdpi + } else { + # TODO: Add support for other platforms if possible + } +} + benchmark: type = benchmark else: type = check @@ -77,12 +89,11 @@ isEmpty(BUILDS)|build_pass { # Install tests unless no_testcase_installs is set, or there is already # a `target' in INSTALLS. # - # Tests are installed under a directory named after the target so that each - # test has its own directory for testdata etc. + # Tests are installed under a directory named after their source folder + # so that each test has its own directory for testdata etc. # - load(resolve_target) - TARGET_BASENAME = $$basename(QMAKE_RESOLVED_TARGET) - target.path = $$[QT_INSTALL_TESTS]/$$TARGET_BASENAME + TEST_FOLDER = $$basename(_PRO_FILE_PWD_) + target.path = $$[QT_INSTALL_TESTS]/$$TEST_FOLDER INSTALLS += target } @@ -183,20 +194,26 @@ isEmpty(BUILDS)|build_pass { } builtin_testdata { - ALL_TESTDATA = $$TESTDATA $$GENERATED_TESTDATA - - # BLACKLIST needs to be added to the testdata - BLACKLISTPATH = $$_PRO_FILE_PWD_/BLACKLIST - exists($$BLACKLISTPATH): ALL_TESTDATA *= $$BLACKLISTPATH - # RESOURCES does not support wildcards (for good reasons) - for(td, ALL_TESTDATA): \ + for (td, TESTDATA): \ testdata.files += $$files($$absolute_path($$td, $$_PRO_FILE_PWD_)) + # BLACKLIST needs to be added to the testdata + BLACKLISTPATH = $$_PRO_FILE_PWD_/BLACKLIST + exists($$BLACKLISTPATH): \ + testdata.files *= $$BLACKLISTPATH !isEmpty(testdata.files) { testdata.base = $$_PRO_FILE_PWD_ RESOURCES += testdata } + # Extra compilers don't create wildcards to start with. + for (td, GENERATED_TESTDATA): \ + gentestdata.files += $$absolute_path($$td, $$OUT_PWD) + !isEmpty(gentestdata.files) { + gentestdata.base = $$OUT_PWD + RESOURCES += gentestdata + } + !isEmpty(TEST_HELPER_INSTALLS): \ error("This platform does not support tests which require helpers.") } diff --git a/mkspecs/features/toolchain.prf b/mkspecs/features/toolchain.prf index fdf3d1cdd3..4ecfb8d889 100644 --- a/mkspecs/features/toolchain.prf +++ b/mkspecs/features/toolchain.prf @@ -34,7 +34,9 @@ isEmpty($${target_prefix}.INCDIRS) { # # Get default include and library paths from compiler # - gcc { + wasm { + # wasm compiler does not work here, just use defaults + } else: gcc { cmd_suffix = "<$$QMAKE_SYSTEM_NULL_DEVICE >$$QMAKE_SYSTEM_NULL_DEVICE" equals(QMAKE_HOST.os, Windows): \ cmd_prefix = "set LC_ALL=C&" @@ -142,6 +144,29 @@ isEmpty($${target_prefix}.INCDIRS) { !integrity: \ error("failed to parse default search paths from compiler output") QMAKE_DEFAULT_LIBDIRS = $$unique(QMAKE_DEFAULT_LIBDIRS) + } else: ghs { + cmd = $$QMAKE_CXX $$QMAKE_CXXFLAGS -$${LITERAL_HASH} -o /tmp/fake_output /tmp/fake_input.cpp + output = $$system("$$cmd", blob, ec) + !equals(ec, 0): qtCompilerErrror($$QMAKE_CXX, $$output) + output ~= s/\\\\\\n {8}//g + output = $$split(output, $$escape_expand(\\n)) + for (line, output) { + contains(line, "^[^ ]+/ecom[^ ]+ .* /tmp/fake_input\\.cpp") { + for (parameter, $$list($$line)) { + contains(parameter, "^(-I|--include_no_mmd=|--sys_include=).*") { + parameter ~= s/^(-I|--include_no_mmd=|--sys_include=)// + QMAKE_DEFAULT_INCDIRS += $$clean_path($$parameter) + } + } + } else: contains(line, "^[^ ]+/elxr .*") { + for (parameter, $$list($$line)) { + contains(parameter, "^-L.*") { + parameter ~= s/^-L// + QMAKE_DEFAULT_LIBDIRS += $$clean_path($$parameter) + } + } + } + } } else: msvc { # This doesn't differentiate between host and target, # but neither do the compilers. @@ -168,14 +193,14 @@ isEmpty($${target_prefix}.INCDIRS) { # defineReplace(qtVariablesFromMSVC) { - ret = $$system("$$1 -nologo -E $$2 $$system_quote($$PWD/data/macros.cpp) <NUL 2>NUL", lines, ec) + ret = $$system("$$1 -nologo -E $$2 $$system_quote($$PWD/data/macros.cpp) 2>NUL", lines, ec) !equals(ec, 0): qtCompilerErrror($$1, $$ret) return($$ret) } defineReplace(qtVariablesFromGCC) { ret = $$system("$$1 -E $$system_quote($$PWD/data/macros.cpp) \ - <$$QMAKE_SYSTEM_NULL_DEVICE 2>$$QMAKE_SYSTEM_NULL_DEVICE", lines, ec) + 2>$$QMAKE_SYSTEM_NULL_DEVICE", lines, ec) !equals(ec, 0): qtCompilerErrror($$1, $$ret) return($$ret) } @@ -199,11 +224,11 @@ isEmpty($${target_prefix}.COMPILER_MACROS) { } else { vars = $$qtVariablesFromMSVC($$QMAKE_CXX) } - } else: gcc { + } else: gcc|ghs { vars = $$qtVariablesFromGCC($$QMAKE_CXX) } for (v, vars) { - contains(v, $${LITERAL_HASH}.*)|contains(v, " *"): next() + !contains(v, "[A-Z_]+ = .*"): next() # Set both <varname> for the outer scope ... eval($$v) v ~= s/ .*// @@ -245,6 +270,8 @@ QMAKE_COMPILER_DEFINES += __cplusplus=$$QT_COMPILER_STDCXX __GNUC__=$$QMAKE_GCC_MAJOR_VERSION \ __GNUC_MINOR__=$$QMAKE_GCC_MINOR_VERSION \ __GNUC_PATCHLEVEL__=$$QMAKE_GCC_PATCH_VERSION +!isEmpty(QMAKE_GHS_VERSION): \ + QMAKE_COMPILER_DEFINES += __ghs__ __GHS_VERSION_NUMBER=$$QMAKE_GHS_VERSION QMAKE_CFLAGS += $$QMAKE_CFLAGS_MSVC_COMPAT QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_MSVC_COMPAT diff --git a/mkspecs/features/uic.prf b/mkspecs/features/uic.prf index 134d3b4acb..1cedce5ae7 100644 --- a/mkspecs/features/uic.prf +++ b/mkspecs/features/uic.prf @@ -3,15 +3,13 @@ qtPrepareTool(QMAKE_UIC, uic, _DEP) isEmpty(UI_DIR):UI_DIR = . isEmpty(QMAKE_MOD_UIC):QMAKE_MOD_UIC = ui_ -contains(TEMPLATE, .*lib):dll: QMAKE_UIC_FLAGS += -no-stringliteral - uic.depends += $$QMAKE_UIC_EXE uic.commands = $$QMAKE_UIC $$QMAKE_UIC_FLAGS ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT} uic.depend_command = $$QMAKE_UIC_DEP -d ${QMAKE_FILE_IN} uic.output = $$UI_DIR/$${QMAKE_MOD_UIC}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_H)} uic.input = FORMS uic.variable_out = GENERATED_FILES -uic.CONFIG += no_link target_predeps +uic.CONFIG += no_link target_predeps dep_lines uic.name = UIC ${QMAKE_FILE_IN} silent:uic.commands = @echo uic ${QMAKE_FILE_IN} && $$uic.commands QMAKE_EXTRA_COMPILERS += uic diff --git a/mkspecs/features/uikit/default_pre.prf b/mkspecs/features/uikit/default_pre.prf index 6a44a67bca..ea6882fbc8 100644 --- a/mkspecs/features/uikit/default_pre.prf +++ b/mkspecs/features/uikit/default_pre.prf @@ -24,5 +24,3 @@ load(default_pre) !versionAtLeast(QMAKE_XCODE_VERSION, 4.3): \ error("This mkspec requires Xcode 4.3 or later") -ios:shared:!versionAtLeast(QMAKE_IOS_DEPLOYMENT_TARGET, 8.0): \ - QMAKE_IOS_DEPLOYMENT_TARGET = 8.0 diff --git a/mkspecs/features/uikit/gc_binaries.prf b/mkspecs/features/uikit/gc_binaries.prf new file mode 100644 index 0000000000..c4f7445951 --- /dev/null +++ b/mkspecs/features/uikit/gc_binaries.prf @@ -0,0 +1,2 @@ +# bitcode (release mode) is incompatible with splitting sections. +!bitcode|!release: load(gc_binaries) diff --git a/mkspecs/features/unix/separate_debug_info.prf b/mkspecs/features/unix/separate_debug_info.prf index 0b34b17c27..9070cf33f0 100644 --- a/mkspecs/features/unix/separate_debug_info.prf +++ b/mkspecs/features/unix/separate_debug_info.prf @@ -72,10 +72,12 @@ have_target:!static:if(darwin|!isEmpty(QMAKE_OBJCOPY)) { debug_info_plist_target.path += $${target.path}/$${debug_info_target_rel}.$$debug_info_suffix/Contents INSTALLS += debug_info_plist_target - debug_script_target.CONFIG += no_check_exist - debug_script_target.files = $${debug_info_target}.$$debug_info_suffix/Contents/Resources/Python/$${TARGET}.py - debug_script_target.path += $${target.path}/$${debug_info_target_rel}.$$debug_info_suffix/Contents/Resources/Python - INSTALLS += debug_script_target + !isEmpty(debug_script.output) { + debug_script_target.CONFIG += no_check_exist + debug_script_target.files = $${debug_script.output} + debug_script_target.path += $${target.path}/$${debug_info_target_rel}.$$debug_info_suffix/Contents/Resources/Python + INSTALLS += debug_script_target + } } debug_info_target.CONFIG += no_check_exist diff --git a/mkspecs/features/wasm/qt.prf b/mkspecs/features/wasm/qt.prf new file mode 100644 index 0000000000..9b9b58d3de --- /dev/null +++ b/mkspecs/features/wasm/qt.prf @@ -0,0 +1,12 @@ + +qt_depends = $$resolve_depends(QT, "QT.") +equals(TEMPLATE, app):contains(qt_depends, gui(-private)?) { + LIBS *= -L$$[QT_INSTALL_PLUGINS/get]/platforms + + lib_name = wasm + lib_path_and_base = $$[QT_INSTALL_PLUGINS/get]/platforms/lib$${lib_name}$$qtPlatformTargetSuffix() + LIBS += -l$${lib_name}$$qtPlatformTargetSuffix() $$fromfile($${lib_path_and_base}.prl, QMAKE_PRL_LIBS) +} + +load(qt) + diff --git a/mkspecs/features/wasm/wasm.prf b/mkspecs/features/wasm/wasm.prf new file mode 100644 index 0000000000..278a6719c7 --- /dev/null +++ b/mkspecs/features/wasm/wasm.prf @@ -0,0 +1,81 @@ + +# DESTDIR will be empty if not set in the app .pro file; make sure it has a value +isEmpty(DESTDIR): DESTDIR = $$OUT_PWD + +# Create js and wasm files for applications +contains(TEMPLATE, .*app) { + TARGET_BASE = $${TARGET} + TARGET_HTML = $${TARGET}.html + TARGET_JS = $${TARGET}.js + + # Make the emscripten compiler generate a js file + TARGET = $$TARGET_JS + + QMAKE_INCDIR += $$(HOME)/.emscripten_ports/openssl/include + + CONFIG += static + js_file.files = $$TARGET_JS + js_file.path = $$target.path + isEmpty(js_file.path): \ + js_file.path += ./ + INSTALLS += js_file + + # Copy hosting html and javascript to the application build directory. + exists($$[QT_INSTALL_PLUGINS]/platforms/wasm_shell.html) { + # don't pass this until it's installed somewhere + # otherwise makespec test fails during qt configure + WASM_PLUGIN_PATH = $$[QT_INSTALL_PLUGINS]/platforms + } else { + ## internal build. not installed + WASM_PLUGIN_PATH = $$PWD/../../../src/plugins/platforms/wasm + } + + # Copy/Generate main .html file (e.g. myapp.html) from the webassembly_shell.html by + # replacing the app name placeholder with the actual app name. + apphtml.name = application main html file + apphtml.output = $$DESTDIR/$$TARGET_HTML + apphtml.commands = sed -e s/APPNAME/$$TARGET_BASE/g $$WASM_PLUGIN_PATH/wasm_shell.html > $$DESTDIR/$$TARGET_HTML + apphtml.input = $$WASM_PLUGIN_PATH/wasm_shell.html + apphtml.depends = $$apphtml.input + QMAKE_EXTRA_COMPILERS += apphtml + + appjs.name = application qtloader.js + appjs.output = $$DESTDIR/qtloader.js + appjs.commands = $$QMAKE_COPY $$WASM_PLUGIN_PATH/qtloader.js $$DESTDIR + appjs.input = $$WASM_PLUGIN_PATH/qtloader.js + appjs.depends = $$appjs.input + QMAKE_EXTRA_COMPILERS += appjs + + appsvg.name = application qtlogo.svg + appsvg.output = $$DESTDIR/qtlogo.svg + appsvg.commands = $$QMAKE_COPY $$WASM_PLUGIN_PATH/qtlogo.svg $$DESTDIR + appsvg.input = $$WASM_PLUGIN_PATH/qtlogo.svg + appsvg.depends = $$appsvg.input + QMAKE_EXTRA_COMPILERS += appsvg + + QMAKE_EXTRA_TARGETS += apphtml appjs appsvg + POST_TARGETDEPS += apphtml appjs appsvg + + # Add manual target to make "make -B shellfiles" work. + shellfiles.target = shellfiles + shellfiles.depends = apphtml appjs appsvg + QMAKE_EXTRA_TARGETS += shellfiles + + # emscripten ports are linked into the main module (this app), not the Qt + # libs which reference them + qt { + qt_depends = $$resolve_depends(QT, "QT.") + contains(qt_depends, core(-private)?): QMAKE_LFLAGS += \ + $$QMAKE_LIBS_THREAD $$QMAKE_LIBS_ZLIB + contains(qt_depends, gui(-private)?): QMAKE_LFLAGS += \ + $$QMAKE_LIBS_FREETYPE $$QMAKE_LIBS_LIBPNG + } +} + +# Creates the stand-alone version of the library from bitcode +!static:contains(TEMPLATE, .*lib): { + load(resolve_target) + QMAKE_POST_LINK += $$QMAKE_LINK_SHLIB $$QMAKE_RESOLVED_TARGET -o $${QMAKE_RESOLVED_TARGET}.js + + QMAKE_INCDIR += $$(HOME)/.emscripten_ports/openssl/include +} diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf index ec09afe381..75a601b1f1 100644 --- a/mkspecs/linux-icc/qmake.conf +++ b/mkspecs/linux-icc/qmake.conf @@ -1,104 +1,39 @@ # # qmake configuration for linux-icc # +# Written for Intel C++ Compiler for Linux version 17.0 or higher +# -MAKEFILE_GENERATOR = UNIX - -QMAKE_COMPILER = gcc intel_icc # icc pretends to be gcc +include(../common/icc-base-unix.conf) -QMAKE_CFLAGS_OPTIMIZE = -O2 -QMAKE_CFLAGS_OPTIMIZE_SIZE = -Os +# modifications to icc-base-unix.conf -QMAKE_CC = icc -QMAKE_LEX = flex -QMAKE_LEXFLAGS = -QMAKE_YACC = yacc -QMAKE_YACCFLAGS = -d -QMAKE_CFLAGS = -QMAKE_CFLAGS_APP = -fPIC -QMAKE_CFLAGS_DEPS = -M -QMAKE_CFLAGS_WARN_ON = -w1 -Wall -Wcheck -wd1572,873,2259,2261,3373 -QMAKE_CFLAGS_WARN_OFF = -w -QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -QMAKE_CFLAGS_DEBUG = -O0 -g -QMAKE_CFLAGS_SHLIB = -fPIC -QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB QMAKE_CFLAGS_YACC = QMAKE_CFLAGS_ISYSTEM = -isystem QMAKE_CFLAGS_THREAD = -D_REENTRANT -QMAKE_CFLAGS_SPLIT_SECTIONS = -ffunction-sections -QMAKE_CFLAGS_LTCG = -ipo -fno-fat-lto-objects -QMAKE_CFLAGS_LTCG_FATOBJECTS = -ffat-lto-objects -QMAKE_CFLAGS_DISABLE_LTCG = -no-ipo -QMAKE_CFLAGS_SSE2 += -xSSE2 -QMAKE_CFLAGS_SSE3 += -xSSE3 -QMAKE_CFLAGS_SSSE3 += -xSSSE3 -QMAKE_CFLAGS_SSE4_1 += -xSSE4.1 -QMAKE_CFLAGS_SSE4_2 += -xSSE4.2 -QMAKE_CFLAGS_AVX += -xAVX -QMAKE_CFLAGS_AVX2 += -xCORE-AVX2 -QMAKE_CFLAGS_AVX512F += -xCOMMON-AVX512 -QMAKE_CFLAGS_AVX512CD += -xCOMMON-AVX512 -QMAKE_CFLAGS_AVX512ER += -xMIC-AVX512 -QMAKE_CFLAGS_AVX512PF += -xMIC-AVX512 -QMAKE_CFLAGS_AVX512DQ += -xCORE-AVX512 -QMAKE_CFLAGS_AVX512BW += -xCORE-AVX512 -QMAKE_CFLAGS_AVX512VL += -xCORE-AVX512 -QMAKE_CFLAGS_AESNI += -maes -QMAKE_CFLAGS_F16C += $$QMAKE_CFLAGS_AVX2 -QMAKE_CFLAGS_RDRND += -mrdrnd -QMAKE_CFLAGS_SHANI += -msha - -QMAKE_CXX = icpc -QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -QMAKE_CXXFLAGS_APP = $$QMAKE_CFLAGS_APP -QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS -QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF -QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE -QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG -QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB -QMAKE_CXXFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_STATIC_LIB QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD -QMAKE_CXXFLAGS_SPLIT_SECTIONS = $$QMAKE_CFLAGS_SPLIT_SECTIONS -# Disabling exceptions disabled - workaround for QTBUG-36577 -#QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions -QMAKE_CXXFLAGS_CXX11 = -std=c++11 -QMAKE_CXXFLAGS_CXX14 = -std=c++1y -QMAKE_CXXFLAGS_CXX1Z = -std=c++1z -QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11 -QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y -QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z -QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG -QMAKE_CXXFLAGS_LTCG_FATOBJECTS = $$QMAKE_CFLAGS_LTCG_FATOBJECTS -QMAKE_CXXFLAGS_DISABLE_LTCG = $$QMAKE_CFLAGS_DISABLE_LTCG - -QMAKE_INCDIR = -QMAKE_LIBDIR = -QMAKE_INCDIR_X11 = -QMAKE_LIBDIR_X11 = -QMAKE_INCDIR_OPENGL = -QMAKE_LIBDIR_OPENGL = -QMAKE_LINK = icpc -QMAKE_LINK_SHLIB = icpc -QMAKE_LFLAGS = -QMAKE_LFLAGS_RELEASE = QMAKE_LFLAGS_APP = -pie -QMAKE_LFLAGS_DEBUG = QMAKE_LFLAGS_SHLIB = -shared -shared-intel QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB QMAKE_LFLAGS_SONAME = -Wl,-soname, -QMAKE_LFLAGS_THREAD = QMAKE_LFLAGS_NOUNDEF = -Wl,-z,defs -QMAKE_LFLAGS_RPATH = -Wl,-rpath, QMAKE_LFLAGS_RPATHLINK = -Wl,-rpath-link, -QMAKE_LFLAGS_CXX11 = -QMAKE_LFLAGS_CXX14 = -QMAKE_LFLAGS_CXX1Z = -QMAKE_LFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG + +# -Bsymbolic-functions (ld) support +QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions +QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list, +QMAKE_LFLAGS_VERSION_SCRIPT = -Wl,--version-script, + +# fat LTO support for Linux ICC; not available for macOS ICC, see +# https://software.intel.com/en-us/cpp-compiler-18.0-developer-guide-and-reference-ffat-lto-objects +QMAKE_CFLAGS_LTCG += -fno-fat-lto-objects +QMAKE_CXXFLAGS_LTCG += -fno-fat-lto-objects +QMAKE_LFLAGS_LTCG += -fno-fat-lto-objects +QMAKE_CFLAGS_LTCG_FATOBJECTS = -ffat-lto-objects +QMAKE_CXXFLAGS_LTCG_FATOBJECTS = $$QMAKE_CFLAGS_LTCG_FATOBJECTS QMAKE_LIBS = QMAKE_LIBS_DYNLOAD = -ldl @@ -111,22 +46,5 @@ QMAKE_OBJCOPY = objcopy QMAKE_NM = nm -P QMAKE_RANLIB = -QMAKE_CLEAN = -r $(OBJECTS_DIR)/ti_files - -# pch support -CONFIG += icc_pch_style -QMAKE_PCH_OUTPUT_EXT = .pchi -QMAKE_CXXFLAGS_USE_PRECOMPILE = -pch-use ${QMAKE_PCH_OUTPUT} -include ${QMAKE_PCH_INPUT} -QMAKE_CXXFLAGS_PRECOMPILE = -c -pch-create ${QMAKE_PCH_OUTPUT} -include ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_TEMP_OBJECT} ${QMAKE_PCH_TEMP_SOURCE} - -# -Bsymbolic-functions (ld) support -QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions -QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list, -QMAKE_LFLAGS_VERSION_SCRIPT = -Wl,--version-script, - -# Symbol visibility control -QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden -QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden - include(../common/linux.conf) load(qt_config) diff --git a/mkspecs/macx-clang/Info.plist.disable_highdpi b/mkspecs/macx-clang/Info.plist.disable_highdpi new file mode 100644 index 0000000000..a9b89888ad --- /dev/null +++ b/mkspecs/macx-clang/Info.plist.disable_highdpi @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>NSHighResolutionCapable</key> + <string>NO</string> +</dict> +</plist> diff --git a/mkspecs/macx-clang/qmake.conf b/mkspecs/macx-clang/qmake.conf index 14c885fd78..464f327ac4 100644 --- a/mkspecs/macx-clang/qmake.conf +++ b/mkspecs/macx-clang/qmake.conf @@ -2,10 +2,6 @@ # qmake configuration for Clang on OS X # -QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.11 - -QMAKE_APPLE_DEVICE_ARCHS = x86_64 - # Opt-in xcb QPA support with XQuartz: # # configure \ diff --git a/mkspecs/macx-g++/qmake.conf b/mkspecs/macx-g++/qmake.conf index 5686610b17..d0e0026f1e 100644 --- a/mkspecs/macx-g++/qmake.conf +++ b/mkspecs/macx-g++/qmake.conf @@ -10,10 +10,6 @@ MAKEFILE_GENERATOR = UNIX CONFIG += app_bundle incremental global_init_link_order lib_version_first QMAKE_INCREMENTAL_STYLE = sublib -QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.11 - -QMAKE_APPLE_DEVICE_ARCHS = x86_64 - include(../common/macx.conf) include(../common/gcc-base-mac.conf) include(../common/g++-macx.conf) diff --git a/mkspecs/macx-icc/qmake.conf b/mkspecs/macx-icc/qmake.conf index fa3944f843..4daad497af 100644 --- a/mkspecs/macx-icc/qmake.conf +++ b/mkspecs/macx-icc/qmake.conf @@ -1,107 +1,33 @@ # # qmake configuration for macx-icc # -# Written for Intel C++ Compiler version 14.0 for OS X +# Written for Intel C++ Compiler for macOS version 17.0 or higher # -MAKEFILE_GENERATOR = UNIX +include(../common/icc-base-unix.conf) + +# modifications to icc-base-unix.conf + CONFIG += app_bundle QMAKE_INCREMENTAL_STYLE = sublibs -QMAKE_COMPILER_DEFINES += __APPLE__ __GNUC__ - -QMAKE_COMPILER = gcc clang intel_icc # icc pretends to be gcc and clang +QMAKE_COMPILER_DEFINES += __APPLE__ -QMAKE_CFLAGS_OPTIMIZE = -O2 -QMAKE_CFLAGS_OPTIMIZE_SIZE = -Os +QMAKE_COMPILER += clang # icc pretends to be clang too -QMAKE_CC = icc -QMAKE_CFLAGS = -QMAKE_CFLAGS_DEPS = -M -QMAKE_CFLAGS_WARN_ON = -w1 -Wcheck -wd654,1572,411,873,1125,2259,2261,3280,3373 -QMAKE_CFLAGS_WARN_OFF = -w -QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_OPTIMIZE -QMAKE_CFLAGS_DEBUG = -g -O0 -QMAKE_CFLAGS_SHLIB = -fPIC -QMAKE_CFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_SHLIB QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses QMAKE_CFLAGS_THREAD = -QMAKE_CFLAGS_SPLIT_SECTIONS = -ffunction-sections -QMAKE_CFLAGS_LTCG = -ipo -QMAKE_CFLAGS_DISABLE_LTCG = -no-ipo -QMAKE_CFLAGS_SSE2 += -msse2 -QMAKE_CFLAGS_SSE3 += -msse3 -QMAKE_CFLAGS_SSSE3 += -mssse3 -QMAKE_CFLAGS_SSE4_1 += -msse4.1 -QMAKE_CFLAGS_SSE4_2 += -msse4.2 -QMAKE_CFLAGS_AVX += -mavx -QMAKE_CFLAGS_AVX2 += -march=core-avx2 -QMAKE_CFLAGS_AVX512F += -xCOMMON-AVX512 -QMAKE_CFLAGS_AVX512CD += -xCOMMON-AVX512 -QMAKE_CFLAGS_AVX512ER += -xMIC-AVX512 -QMAKE_CFLAGS_AVX512PF += -xMIC-AVX512 -QMAKE_CFLAGS_AVX512DQ += -xCORE-AVX512 -QMAKE_CFLAGS_AVX512BW += -xCORE-AVX512 -QMAKE_CFLAGS_AVX512VL += -xCORE-AVX512 -QMAKE_CFLAGS_AESNI += -maes -QMAKE_CFLAGS_F16C += $$QMAKE_CFLAGS_AVX2 -QMAKE_CFLAGS_RDRND += -mrdrnd -QMAKE_CFLAGS_SHANI += -msha - -QMAKE_CXX = icpc -QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS -QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF -QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE -QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG -QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB -QMAKE_CXXFLAGS_STATIC_LIB = $$QMAKE_CFLAGS_STATIC_LIB QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD -QMAKE_CXXFLAGS_CXX11 = -std=c++11 -QMAKE_CXXFLAGS_CXX14 = -std=c++1y -QMAKE_CXXFLAGS_CXX1Z = -std=c++1z -QMAKE_CXXFLAGS_GNUCXX11 = -std=gnu++11 -QMAKE_CXXFLAGS_GNUCXX14 = -std=gnu++1y -QMAKE_CXXFLAGS_GNUCXX1Z = -std=gnu++1z -QMAKE_CXXFLAGS_SPLIT_SECTIONS = $$QMAKE_CFLAGS_SPLIT_SECTIONS -QMAKE_CXXFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG -QMAKE_CXXFLAGS_DISABLE_LTCG = $$QMAKE_CFLAGS_DISABLE_LTCG -QMAKE_LINK = icpc -QMAKE_LINK_SHLIB = icpc -QMAKE_LFLAGS = -QMAKE_LFLAGS_RELEASE = -QMAKE_LFLAGS_DEBUG = QMAKE_LFLAGS_SHLIB = -single_module -dynamiclib QMAKE_LFLAGS_INCREMENTAL = -undefined suppress -flat_namespace QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB QMAKE_LFLAGS_SONAME = -install_name$${LITERAL_WHITESPACE} QMAKE_LFLAGS_HEADERPAD = -headerpad_max_install_names -QMAKE_LFLAGS_THREAD = -QMAKE_LFLAGS_RPATH = -Wl,-rpath, -QMAKE_LFLAGS_LTCG = $$QMAKE_CFLAGS_LTCG QMAKE_LFLAGS_VERSION = -current_version$${LITERAL_WHITESPACE} QMAKE_LFLAGS_COMPAT_VERSION = -compatibility_version$${LITERAL_WHITESPACE} -QMAKE_CLEAN = -r $(OBJECTS_DIR)/ti_files - -# pch support -CONFIG += icc_pch_style -QMAKE_PCH_OUTPUT_EXT = .pchi -QMAKE_CXXFLAGS_USE_PRECOMPILE = -pch-use ${QMAKE_PCH_OUTPUT} -include ${QMAKE_PCH_INPUT} -QMAKE_CXXFLAGS_PRECOMPILE = -c -pch-create ${QMAKE_PCH_OUTPUT} -include ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_TEMP_OBJECT} ${QMAKE_PCH_TEMP_SOURCE} - -# Symbol visibility control -QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden -QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden - -QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.11 - -QMAKE_APPLE_DEVICE_ARCHS = x86_64 - include(../common/macx.conf) - load(qt_config) diff --git a/mkspecs/macx-ios-clang/qmake.conf b/mkspecs/macx-ios-clang/qmake.conf index d58b9fcbe1..88e96ef32e 100644 --- a/mkspecs/macx-ios-clang/qmake.conf +++ b/mkspecs/macx-ios-clang/qmake.conf @@ -2,7 +2,7 @@ # qmake configuration for macx-ios-clang # -QMAKE_IOS_DEPLOYMENT_TARGET = 10.0 +QMAKE_IOS_DEPLOYMENT_TARGET = 11.0 # Universal target (iPhone and iPad) QMAKE_APPLE_TARGETED_DEVICE_FAMILY = 1,2 diff --git a/mkspecs/macx-tvos-clang/qmake.conf b/mkspecs/macx-tvos-clang/qmake.conf index ab1a95fe88..77f6a02f7b 100644 --- a/mkspecs/macx-tvos-clang/qmake.conf +++ b/mkspecs/macx-tvos-clang/qmake.conf @@ -2,7 +2,7 @@ # qmake configuration for macx-tvos-clang # -QMAKE_TVOS_DEPLOYMENT_TARGET = 10.0 +QMAKE_TVOS_DEPLOYMENT_TARGET = 11.0 QMAKE_APPLE_TARGETED_DEVICE_FAMILY = 3 diff --git a/mkspecs/macx-watchos-clang/qmake.conf b/mkspecs/macx-watchos-clang/qmake.conf index bd28722d44..8194261275 100644 --- a/mkspecs/macx-watchos-clang/qmake.conf +++ b/mkspecs/macx-watchos-clang/qmake.conf @@ -2,7 +2,7 @@ # qmake configuration for macx-watchos-clang # -QMAKE_WATCHOS_DEPLOYMENT_TARGET = 3.0 +QMAKE_WATCHOS_DEPLOYMENT_TARGET = 4.0 QMAKE_APPLE_TARGETED_DEVICE_FAMILY = 4 diff --git a/mkspecs/macx-xcode/default.xcscheme b/mkspecs/macx-xcode/default.xcscheme index bda2b8c1c0..bd2cb0e565 100644 --- a/mkspecs/macx-xcode/default.xcscheme +++ b/mkspecs/macx-xcode/default.xcscheme @@ -17,7 +17,7 @@ BlueprintIdentifier = "@TARGET_PBX_KEY@" BuildableName = "@QMAKE_ORIG_TARGET@" BlueprintName = "@QMAKE_ORIG_TARGET@" - ReferencedContainer = "container:@QMAKE_ORIG_TARGET@.xcodeproj"> + ReferencedContainer = "container:@QMAKE_RELATIVE_PBX_DIR@"> </BuildableReference> </BuildActionEntry> </BuildActionEntries> @@ -35,7 +35,7 @@ BlueprintIdentifier = "@TEST_BUNDLE_PBX_KEY@" BuildableName = "Qt Test" BlueprintName = "Qt Test" - ReferencedContainer = "container:@QMAKE_ORIG_TARGET@.xcodeproj"> + ReferencedContainer = "container:@QMAKE_RELATIVE_PBX_DIR@"> </BuildableReference> </TestableReference> </Testables> @@ -45,7 +45,7 @@ BlueprintIdentifier = "@TARGET_PBX_KEY@" BuildableName = "@QMAKE_ORIG_TARGET@" BlueprintName = "@QMAKE_ORIG_TARGET@" - ReferencedContainer = "container:@QMAKE_ORIG_TARGET@.xcodeproj"> + ReferencedContainer = "container:@QMAKE_RELATIVE_PBX_DIR@"> </BuildableReference> </MacroExpansion> <CommandLineArguments> @@ -71,7 +71,7 @@ BlueprintIdentifier = "@TARGET_PBX_KEY@" BuildableName = "@QMAKE_ORIG_TARGET@" BlueprintName = "@QMAKE_ORIG_TARGET@" - ReferencedContainer = "container:@QMAKE_ORIG_TARGET@.xcodeproj"> + ReferencedContainer = "container:@QMAKE_RELATIVE_PBX_DIR@"> </BuildableReference> </BuildableProductRunnable> <EnvironmentVariables> @@ -96,7 +96,7 @@ BlueprintIdentifier = "@TARGET_PBX_KEY@" BuildableName = "@QMAKE_ORIG_TARGET@" BlueprintName = "@QMAKE_ORIG_TARGET@" - ReferencedContainer = "container:@QMAKE_ORIG_TARGET@.xcodeproj"> + ReferencedContainer = "container:@QMAKE_RELATIVE_PBX_DIR@"> </BuildableReference> </BuildableProductRunnable> </ProfileAction> diff --git a/mkspecs/wasm-emscripten/qmake.conf b/mkspecs/wasm-emscripten/qmake.conf new file mode 100644 index 0000000000..c3b67310c8 --- /dev/null +++ b/mkspecs/wasm-emscripten/qmake.conf @@ -0,0 +1,90 @@ +# qmake configuration for building with emscripten +MAKEFILE_GENERATOR = UNIX +QMAKE_PLATFORM = wasm unix + +include(../common/gcc-base.conf) +include(../common/clang.conf) + +EMTERP_FLAGS = \ + -s EMTERPRETIFY=1 \ + -s EMTERPRETIFY_ASYNC=1 \ + -s \"EMTERPRETIFY_FILE=\'data.binary\'\" \ + -s ASSERTIONS=1 \ + --profiling-funcs + +EMCC_COMMON_CFLAGS = \ + -s USE_LIBPNG=1 \ + -s USE_FREETYPE=1 \ + -s USE_ZLIB=1 + +EMCC_COMMON_LFLAGS = \ + -s WASM=1 \ + -s FULL_ES2=1 \ + -s ALLOW_MEMORY_GROWTH=1 \ + -s USE_WEBGL2=1 \ + -s NO_EXIT_RUNTIME=0 \ + -s ERROR_ON_UNDEFINED_SYMBOLS=1 \ + --bind \ + -s \"BINARYEN_METHOD=\'native-wasm\'\" \ + -s \"BINARYEN_TRAP_MODE=\'clamp\'\" + +EMCC_COMMON_LFLAGS_DEBUG = \ + $$EMCC_COMMON_LFLAGS \ + -s ASSERTIONS=2 \ + -s DEMANGLE_SUPPORT=1 \ + # -s LIBRARY_DEBUG=1 \ #print out library calls, verbose + # -s SYSCALL_DEBUG=1 \ #print out sys calls, verbose + # -s FS_LOG=1 \ #print out filesystem ops, verbose + # -s SOCKET_DEBUG \ #print out socket,network data transfer + -s GL_DEBUG=1 + +# the -s arguments can also be used with release builds +# but here in debug for clarity + +QMAKE_COMPILER += emscripten + +QMAKE_CC = emcc +QMAKE_CXX = em++ + +QMAKE_CFLAGS += $$EMCC_COMMON_CFLAGS +QMAKE_CXXFLAGS += $$EMCC_COMMON_CFLAGS + +# Practical debugging setup: +# "-g4" preserves function names for stack traces +# "-Os" produces reasonably sized binaries +QMAKE_CFLAGS_DEBUG -= -g +QMAKE_CXXFLAGS_DEBUG -= -g +QMAKE_CFLAGS_DEBUG += -Os -g4 +QMAKE_CXXFLAGS_DEBUG += -Os -g4 +QMAKE_LFLAGS_DEBUG += -Os -g4 + +QMAKE_CXXFLAGS_RELEASE -= -O2 +QMAKE_CXXFLAGS_RELEASE += -O3 +QMAKE_CFLAGS_RELEASE -= -O2 +QMAKE_CFLAGS_RELEASE += -O3 +QMAKE_LFLAGS_RELEASE += -O3 +MAKE_CFLAGS_OPTIMIZE += -O3 +MAKE_CFLAGS_OPTIMIZE_FULL += -Oz + +QMAKE_LINK = $$QMAKE_CXX +QMAKE_LINK_SHLIB = $$QMAKE_CXX +QMAKE_LINK_C = $$QMAKE_CC +QMAKE_LINK_C_SHLIB = $$QMAKE_CC + +QMAKE_LIBS_THREAD = $$QMAKE_CFLAGS_THREAD + +QMAKE_LFLAGS += $$EMCC_COMMON_LFLAGS +QMAKE_LFLAGS_DEBUG += $$EMCC_COMMON_LFLAGS_DEBUG + +QMAKE_PREFIX_SHLIB = lib +QMAKE_EXTENSION_SHLIB = so # llvm bitcode, linked to js in post_link +QMAKE_PREFIX_STATICLIB = lib +QMAKE_EXTENSION_STATICLIB = a # llvm bitcode + +QMAKE_AR = emar cqs +QMAKE_DISTCLEAN += *.html *.js *.wasm + +QT_QPA_DEFAULT_PLATFORM = wasm + +QTPLUGIN.platforms = wasm +load(qt_config) diff --git a/mkspecs/wasm-emscripten/qplatformdefs.h b/mkspecs/wasm-emscripten/qplatformdefs.h new file mode 100644 index 0000000000..c1a0d7b1a8 --- /dev/null +++ b/mkspecs/wasm-emscripten/qplatformdefs.h @@ -0,0 +1,181 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the qmake spec of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMDEFS_H +#define QPLATFORMDEFS_H + +// Get Qt defines/settings + +#include "qglobal.h" + +// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs + +// 1) need to reset default environment if _BSD_SOURCE is defined +// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0 +// 3) it seems older glibc need this to include the X/Open stuff + +#include <unistd.h> + +// We are hot - unistd.h should have turned on the specific APIs we requested + +#include <features.h> +#include <pthread.h> +#include <dirent.h> +#include <fcntl.h> +#include <grp.h> +#include <pwd.h> +#include <signal.h> +#include <dlfcn.h> + +#include <sys/types.h> +#include <sys/ioctl.h> +#include <sys/ipc.h> +#include <sys/time.h> +#include <sys/socket.h> +#include <sys/stat.h> +#include <sys/wait.h> + +#ifndef QT_NO_IPV6IFNAME +#include <net/if.h> +#endif + +#ifndef _GNU_SOURCE +# define _GNU_SOURCE +#endif + +#ifdef QT_LARGEFILE_SUPPORT +#define QT_STATBUF struct stat64 +#define QT_STATBUF4TSTAT struct stat64 +#define QT_STAT ::stat64 +#define QT_FSTAT ::fstat64 +#define QT_LSTAT ::lstat64 +#define QT_OPEN ::open64 +#define QT_TRUNCATE ::truncate64 +#define QT_FTRUNCATE ::ftruncate64 +#define QT_LSEEK ::lseek64 +#else +#define QT_STATBUF struct stat +#define QT_STATBUF4TSTAT struct stat +#define QT_STAT ::stat +#define QT_FSTAT ::fstat +#define QT_LSTAT ::lstat +#define QT_OPEN ::open +#define QT_TRUNCATE ::truncate +#define QT_FTRUNCATE ::ftruncate +#define QT_LSEEK ::lseek +#endif + +#ifdef QT_LARGEFILE_SUPPORT +#define QT_FOPEN ::fopen64 +#define QT_FSEEK ::fseeko64 +#define QT_FTELL ::ftello64 +#define QT_FGETPOS ::fgetpos64 +#define QT_FSETPOS ::fsetpos64 +#define QT_MMAP ::mmap64 +#define QT_FPOS_T fpos64_t +#define QT_OFF_T off64_t +#else +#define QT_FOPEN ::fopen +#define QT_FSEEK ::fseek +#define QT_FTELL ::ftell +#define QT_FGETPOS ::fgetpos +#define QT_FSETPOS ::fsetpos +#define QT_MMAP ::mmap +#define QT_FPOS_T fpos_t +#define QT_OFF_T long +#endif + +#define QT_STAT_REG S_IFREG +#define QT_STAT_DIR S_IFDIR +#define QT_STAT_MASK S_IFMT +#define QT_STAT_LNK S_IFLNK +#define QT_SOCKET_CONNECT ::connect +#define QT_SOCKET_BIND ::bind +#define QT_FILENO fileno +#define QT_CLOSE ::close +#define QT_READ ::read +#define QT_WRITE ::write +#define QT_ACCESS ::access +#define QT_GETCWD ::getcwd +#define QT_CHDIR ::chdir +#define QT_MKDIR ::mkdir +#define QT_RMDIR ::rmdir +#define QT_OPEN_LARGEFILE O_LARGEFILE +#define QT_OPEN_RDONLY O_RDONLY +#define QT_OPEN_WRONLY O_WRONLY +#define QT_OPEN_RDWR O_RDWR +#define QT_OPEN_CREAT O_CREAT +#define QT_OPEN_TRUNC O_TRUNC +#define QT_OPEN_APPEND O_APPEND +#define QT_OPEN_EXCL O_EXCL + +// Directory iteration +#define QT_DIR DIR + +#define QT_OPENDIR ::opendir +#define QT_CLOSEDIR ::closedir + +#if defined(QT_LARGEFILE_SUPPORT) \ + && defined(QT_USE_XOPEN_LFS_EXTENSIONS) \ + && !defined(QT_NO_READDIR64) +#define QT_DIRENT struct dirent64 +#define QT_READDIR ::readdir64 +#define QT_READDIR_R ::readdir64_r +#else +#define QT_DIRENT struct dirent +#define QT_READDIR ::readdir +#define QT_READDIR_R ::readdir_r +#endif + +#define QT_SOCKET_CONNECT ::connect +#define QT_SOCKET_BIND ::bind + + +#define QT_SIGNAL_RETTYPE void +#define QT_SIGNAL_ARGS int +#define QT_SIGNAL_IGNORE SIG_IGN + +#define QT_SOCKLEN_T socklen_t + +#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) +#define QT_SNPRINTF ::snprintf +#define QT_VSNPRINTF ::vsnprintf +#endif + +#endif // QPLATFORMDEFS_H diff --git a/mkspecs/win32-icc/qmake.conf b/mkspecs/win32-icc/qmake.conf index 2447c712b1..3cb0d58824 100644 --- a/mkspecs/win32-icc/qmake.conf +++ b/mkspecs/win32-icc/qmake.conf @@ -12,7 +12,6 @@ include(../common/msvc-desktop.conf) # modifications to msvc-desktop.conf QMAKE_COMPILER += intel_icl -DEFINES += _ENABLE_EXTENDED_ALIGNED_STORAGE QMAKE_CFLAGS_OPTIMIZE_FULL = -O3 |