From 89f2a731cf85ff06c5295148b523ec83194068f7 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 9 Aug 2018 16:05:51 +0200 Subject: qmake: add default path and version detection for ghs toolchain Change-Id: Ic35f3e25078909e212864218835663989f647aae Reviewed-by: Joerg Bornemann Reviewed-by: Nikola Velinov Reviewed-by: Oswald Buddenhagen --- configure.pri | 6 ++++++ mkspecs/features/data/macros.cpp | 3 +++ mkspecs/features/toolchain.prf | 29 +++++++++++++++++++++++++++-- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/configure.pri b/configure.pri index 41c3f13ea1..03eacd3c07 100644 --- a/configure.pri +++ b/configure.pri @@ -1144,6 +1144,12 @@ defineReplace(qtConfOutputPostProcess_publicPro) { "QT_ICC_MINOR_VERSION = $$format_number($$replace(QMAKE_ICC_VER, "(..)(..)", "\\2"))" \ "QT_ICC_PATCH_VERSION = $$QMAKE_ICC_UPDATE_VER" } + !isEmpty(QMAKE_GHS_VERSION) { + output += \ + "QT_GHS_MAJOR_VERSION = $$replace(QMAKE_GHS_VERSION, "(.*)(.)(.)", "\\1")" \ + "QT_GHS_MINOR_VERSION = $$replace(QMAKE_GHS_VERSION, "(.*)(.)(.)", "\\2")" \ + "QT_GHS_PATCH_VERSION = $$replace(QMAKE_GHS_VERSION, "(.*)(.)(.)", "\\3")" + } output += "QT_EDITION = $$config.input.qt_edition" !contains(config.input.qt_edition, "(OpenSource|Preview)") { 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/toolchain.prf b/mkspecs/features/toolchain.prf index cdeb86daa3..bce3ef3954 100644 --- a/mkspecs/features/toolchain.prf +++ b/mkspecs/features/toolchain.prf @@ -142,6 +142,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. @@ -199,11 +222,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 for the outer scope ... eval($$v) v ~= s/ .*// @@ -245,6 +268,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 -- cgit v1.2.3