diff options
author | Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com> | 2015-10-02 13:54:33 +0200 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2015-10-09 15:15:17 +0000 |
commit | 9ff1310af51814e521572fa3de4e086907633a90 (patch) | |
tree | d3b1902b99174adee2f04e92bdc50613bba0c138 /mkspecs | |
parent | a3a7d485fa2d572225c7050badf28784316aec37 (diff) |
Distinguish between Objective-C and Objective-C++ sources
Instead of lumping both Objective-C (.m) and Objective-C++ (.mm) sources
into the same pile, passing them on to the same compiler as for C++ (CXX),
with the C++ flags (CXXFLAGS), we follow Apple's lead and treat them as
variants of the C and C++ languages separately, so that Objective-C
sources are built with CC and with CFLAGS, and Objective-C++ sources
with CXX, and CXXFLAGS.
This lets us remove a lot of duplicated flags and definitions from the
QMAKE_OBJECTIVE_CFLAGS variable, which in 99% of the cases just matched
the C++ equivalent. The remaining Objective-C/C++ flags are added to
CFLAGS/CXXFLAGS, as the compiler will just ignore them when running in
C/C++ mode. This matches Xcode, which also doesn't have a separate build
setting for Objective-C/C++ flags.
The Makefile qmake generator has been rewritten to support Objective-C/C++
fully, by not assuming that we're just iterating over the C and C++
extensions when dealing with compilation rules, precompiled headers, etc.
There's some duplicated logic in this code, as inherent by qmake's already
duplicated code paths, but this can be cleaned up when C++11 support is
mandatory and we can use lambda functions.
Task-number: QTBUG-36575
Change-Id: I4f06576d5f49e939333a2e03d965da54119e5e31
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@theqtcompany.com>
Diffstat (limited to 'mkspecs')
-rw-r--r-- | mkspecs/common/clang-mac.conf | 1 | ||||
-rw-r--r-- | mkspecs/common/gcc-base-mac.conf | 8 | ||||
-rw-r--r-- | mkspecs/common/ios/clang.conf | 2 | ||||
-rw-r--r-- | mkspecs/features/default_post.prf | 4 | ||||
-rw-r--r-- | mkspecs/features/gcov.prf | 1 | ||||
-rw-r--r-- | mkspecs/features/mac/objective_c.prf | 27 | ||||
-rw-r--r-- | mkspecs/features/mac/sdk.prf | 2 | ||||
-rw-r--r-- | mkspecs/features/spec_pre.prf | 2 | ||||
-rw-r--r-- | mkspecs/features/unix/hide_symbols.prf | 1 | ||||
-rw-r--r-- | mkspecs/features/warn_off.prf | 1 | ||||
-rw-r--r-- | mkspecs/features/warn_on.prf | 1 | ||||
-rw-r--r-- | mkspecs/macx-clang-32/qmake.conf | 1 | ||||
-rw-r--r-- | mkspecs/macx-g++-32/qmake.conf | 1 | ||||
-rw-r--r-- | mkspecs/macx-icc/qmake.conf | 8 | ||||
-rw-r--r-- | mkspecs/macx-ios-clang/features/default_post.prf | 1 |
15 files changed, 10 insertions, 51 deletions
diff --git a/mkspecs/common/clang-mac.conf b/mkspecs/common/clang-mac.conf index d95e982b14..c616e20b6e 100644 --- a/mkspecs/common/clang-mac.conf +++ b/mkspecs/common/clang-mac.conf @@ -7,5 +7,4 @@ QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE QMAKE_XCODE_GCC_VERSION = com.apple.compilers.llvm.clang.1_0 QMAKE_CXXFLAGS += -stdlib=libc++ -QMAKE_OBJECTIVE_CFLAGS += -stdlib=libc++ QMAKE_LFLAGS += -stdlib=libc++ diff --git a/mkspecs/common/gcc-base-mac.conf b/mkspecs/common/gcc-base-mac.conf index 747f09ae81..e9bf780ec1 100644 --- a/mkspecs/common/gcc-base-mac.conf +++ b/mkspecs/common/gcc-base-mac.conf @@ -12,14 +12,6 @@ include(gcc-base.conf) QMAKE_COMPILER_DEFINES += __APPLE__ __GNUC__=4 __APPLE_CC__ -QMAKE_OBJECTIVE_CFLAGS = $$QMAKE_CFLAGS -QMAKE_OBJECTIVE_CFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -QMAKE_OBJECTIVE_CFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF -QMAKE_OBJECTIVE_CFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG -QMAKE_OBJECTIVE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE -QMAKE_OBJECTIVE_CFLAGS_RELEASE_WITH_DEBUGINFO = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO -QMAKE_OBJECTIVE_CFLAGS_HIDESYMS = $$QMAKE_CXXFLAGS_HIDESYMS - QMAKE_LFLAGS += -headerpad_max_install_names QMAKE_LFLAGS_SHLIB += -single_module -dynamiclib diff --git a/mkspecs/common/ios/clang.conf b/mkspecs/common/ios/clang.conf index 36cb655229..f45b89665f 100644 --- a/mkspecs/common/ios/clang.conf +++ b/mkspecs/common/ios/clang.conf @@ -22,7 +22,7 @@ QMAKE_IOS_OBJ_CFLAGS += -Wno-deprecated-implementations -Wprotocol -Wno-select # Set build flags QMAKE_CFLAGS += $$QMAKE_IOS_CFLAGS QMAKE_CXXFLAGS += $$QMAKE_IOS_CFLAGS $$QMAKE_IOS_CXXFLAGS -QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_IOS_CFLAGS $$QMAKE_IOS_CXXFLAGS $$QMAKE_IOS_OBJ_CFLAGS +QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_IOS_OBJ_CFLAGS QMAKE_IOS_CFLAGS = QMAKE_IOS_CXXFLAGS = diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf index ebe83af25e..cd8d8859aa 100644 --- a/mkspecs/features/default_post.prf +++ b/mkspecs/features/default_post.prf @@ -35,7 +35,6 @@ force_debug_info|debug: \ force_debug_info { QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO - QMAKE_OBJECTIVE_CFLAGS_RELEASE = $$QMAKE_OBJECTIVE_CFLAGS_RELEASE_WITH_DEBUGINFO QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO } @@ -51,13 +50,11 @@ optimize_full { debug { QMAKE_CFLAGS += $$QMAKE_CFLAGS_DEBUG QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_DEBUG - QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS_DEBUG QMAKE_LFLAGS += $$QMAKE_LFLAGS_DEBUG QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_DEBUG } else { QMAKE_CFLAGS += $$QMAKE_CFLAGS_RELEASE QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_RELEASE - QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS_RELEASE QMAKE_LFLAGS += $$QMAKE_LFLAGS_RELEASE QMAKE_LIBFLAGS += $$QMAKE_LIBFLAGS_RELEASE } @@ -107,7 +104,6 @@ c++11|c++14|c++1z { !strict_c++:!isEmpty(QMAKE_CXXFLAGS_GNU$$cxxstd): cxxstd = GNU$$cxxstd QMAKE_CXXFLAGS += $$eval(QMAKE_CXXFLAGS_$$cxxstd) - QMAKE_OBJECTIVE_CFLAGS += $$eval(QMAKE_CXXFLAGS_$$cxxstd) QMAKE_LFLAGS += $$eval(QMAKE_LFLAGS_$$cxxstd) unset(cxxstd) diff --git a/mkspecs/features/gcov.prf b/mkspecs/features/gcov.prf index 330831fc0e..f45ba4c520 100644 --- a/mkspecs/features/gcov.prf +++ b/mkspecs/features/gcov.prf @@ -25,7 +25,6 @@ QMAKE_CFLAGS += -fprofile-arcs -ftest-coverage QMAKE_CXXFLAGS += -fprofile-arcs -ftest-coverage -QMAKE_OBJECTIVE_CFLAGS += -fprofile-arcs -ftest-coverage QMAKE_LFLAGS += -fprofile-arcs -ftest-coverage QMAKE_CLEAN += $(OBJECTS_DIR)*.gcno and $(OBJECTS_DIR)*.gcda diff --git a/mkspecs/features/mac/objective_c.prf b/mkspecs/features/mac/objective_c.prf index 0f25f41eec..b3b1d4be99 100644 --- a/mkspecs/features/mac/objective_c.prf +++ b/mkspecs/features/mac/objective_c.prf @@ -1,23 +1,10 @@ -for(source, SOURCES) { - contains(source,.*\\.mm?$) { - warning(Objective-C source \'$$source\' found in SOURCES but should be in OBJECTIVE_SOURCES) - SOURCES -= $$source - OBJECTIVE_SOURCES += $$source - } -} +# Objective-C/C++ sources go in SOURCES, like all other sources +SOURCES += $$OBJECTIVE_SOURCES -isEmpty(QMAKE_OBJECTIVE_CC):QMAKE_OBJECTIVE_CC = $$QMAKE_CC +# Strip C/C++ flags from QMAKE_OBJECTIVE_CFLAGS just in case +QMAKE_OBJECTIVE_CFLAGS -= $$QMAKE_CFLAGS $$QMAKE_CXXFLAGS -OBJECTIVE_C_OBJECTS_DIR = $$OBJECTS_DIR -isEmpty(OBJECTIVE_C_OBJECTS_DIR):OBJECTIVE_C_OBJECTS_DIR = . -isEmpty(QMAKE_EXT_OBJECTIVE_C):QMAKE_EXT_OBJECTIVE_C = .mm .m - -objective_c.dependency_type = TYPE_C -objective_c.variables = QMAKE_OBJECTIVE_CFLAGS -objective_c.commands = $$QMAKE_OBJECTIVE_CC -c $(QMAKE_COMP_QMAKE_OBJECTIVE_CFLAGS) $(DEFINES) $(INCPATH) ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT} -objective_c.output = $$OBJECTIVE_C_OBJECTS_DIR/${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)} -objective_c.input = OBJECTIVE_SOURCES -objective_c.name = Compile ${QMAKE_FILE_IN} -silent:objective_c.commands = @echo objective-c ${QMAKE_FILE_IN} && $$objective_c.commands -QMAKE_EXTRA_COMPILERS += objective_c +# Add Objective-C/C++ flags to C/C++ flags, the compiler can handle it +QMAKE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS +QMAKE_CXXFLAGS += $$QMAKE_OBJECTIVE_CFLAGS diff --git a/mkspecs/features/mac/sdk.prf b/mkspecs/features/mac/sdk.prf index a5643e311d..210843bd94 100644 --- a/mkspecs/features/mac/sdk.prf +++ b/mkspecs/features/mac/sdk.prf @@ -32,7 +32,6 @@ isEmpty(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.version) { !equals(MAKEFILE_GENERATOR, XCODE) { QMAKE_CFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH QMAKE_CXXFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH - QMAKE_OBJECTIVE_CFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH QMAKE_LFLAGS += -Wl,-syslibroot,$$QMAKE_MAC_SDK_PATH } @@ -80,6 +79,5 @@ isEmpty(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.platform_name) { version_min_flag = -m$${version_identifier}-version-min=$$deployment_target QMAKE_CFLAGS += $$version_min_flag QMAKE_CXXFLAGS += $$version_min_flag - QMAKE_OBJECTIVE_CFLAGS += $$version_min_flag QMAKE_LFLAGS += $$version_min_flag } diff --git a/mkspecs/features/spec_pre.prf b/mkspecs/features/spec_pre.prf index cdc1d7ee1e..ff310d9793 100644 --- a/mkspecs/features/spec_pre.prf +++ b/mkspecs/features/spec_pre.prf @@ -7,6 +7,8 @@ QMAKE_DIRLIST_SEP = $$DIRLIST_SEPARATOR QMAKE_EXT_C = .c QMAKE_EXT_CPP = .cpp .cc .cxx +QMAKE_EXT_OBJC = .m +QMAKE_EXT_OBJCXX = .mm QMAKE_EXT_CPP_MOC = .moc QMAKE_EXT_H = .h .hpp .hh .hxx QMAKE_EXT_H_MOC = .cpp diff --git a/mkspecs/features/unix/hide_symbols.prf b/mkspecs/features/unix/hide_symbols.prf index 4af99c2eac..f4d3921cb1 100644 --- a/mkspecs/features/unix/hide_symbols.prf +++ b/mkspecs/features/unix/hide_symbols.prf @@ -1,4 +1,3 @@ QMAKE_CFLAGS += $$QMAKE_CFLAGS_HIDESYMS QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_HIDESYMS -QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS_HIDESYMS QMAKE_LFLAGS += $$QMAKE_LFLAGS_HIDESYMS diff --git a/mkspecs/features/warn_off.prf b/mkspecs/features/warn_off.prf index e37979c035..072a7aca15 100644 --- a/mkspecs/features/warn_off.prf +++ b/mkspecs/features/warn_off.prf @@ -1,4 +1,3 @@ CONFIG -= warn_on QMAKE_CFLAGS += $$QMAKE_CFLAGS_WARN_OFF QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_WARN_OFF -QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS_WARN_OFF
\ No newline at end of file diff --git a/mkspecs/features/warn_on.prf b/mkspecs/features/warn_on.prf index 7e78a8e0d3..03a4a24a61 100644 --- a/mkspecs/features/warn_on.prf +++ b/mkspecs/features/warn_on.prf @@ -1,5 +1,4 @@ CONFIG -= warn_off QMAKE_CFLAGS += $$QMAKE_CFLAGS_WARN_ON QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS_WARN_ON -QMAKE_OBJECTIVE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS_WARN_ON diff --git a/mkspecs/macx-clang-32/qmake.conf b/mkspecs/macx-clang-32/qmake.conf index 87c601ee74..ec33c02e93 100644 --- a/mkspecs/macx-clang-32/qmake.conf +++ b/mkspecs/macx-clang-32/qmake.conf @@ -14,7 +14,6 @@ include(../common/clang-mac.conf) QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7 QMAKE_CFLAGS += -arch i386 -QMAKE_OBJECTIVE_CFLAGS += -arch i386 QMAKE_CXXFLAGS += -arch i386 QMAKE_LFLAGS += -arch i386 diff --git a/mkspecs/macx-g++-32/qmake.conf b/mkspecs/macx-g++-32/qmake.conf index 2a8197ebbd..af6fe5689e 100644 --- a/mkspecs/macx-g++-32/qmake.conf +++ b/mkspecs/macx-g++-32/qmake.conf @@ -17,7 +17,6 @@ include(../common/g++-macx.conf) QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7 QMAKE_CFLAGS += -arch i386 -QMAKE_OBJECTIVE_CFLAGS += -arch i386 QMAKE_CXXFLAGS += -arch i386 QMAKE_LFLAGS += -arch i386 diff --git a/mkspecs/macx-icc/qmake.conf b/mkspecs/macx-icc/qmake.conf index efce568ea9..70ea5ee80f 100644 --- a/mkspecs/macx-icc/qmake.conf +++ b/mkspecs/macx-icc/qmake.conf @@ -34,14 +34,6 @@ QMAKE_CFLAGS_SSE4_2 += -msse4.2 QMAKE_CFLAGS_AVX += -mavx QMAKE_CFLAGS_AVX2 += -march=core-avx2 -QMAKE_OBJECTIVE_CC = clang -QMAKE_OBJECTIVE_CFLAGS = -pipe -QMAKE_OBJECTIVE_CFLAGS_WARN_ON = -Wall -W -QMAKE_OBJECTIVE_CFLAGS_WARN_OFF = -w -QMAKE_OBJECTIVE_CFLAGS_RELEASE = -Os -QMAKE_OBJECTIVE_CFLAGS_DEBUG = -g -QMAKE_OBJECTIVE_CFLAGS_HIDESYMS = -fvisibility=hidden - QMAKE_CXX = icpc QMAKE_CXXFLAGS = $$QMAKE_CFLAGS QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS diff --git a/mkspecs/macx-ios-clang/features/default_post.prf b/mkspecs/macx-ios-clang/features/default_post.prf index 5266c88f16..40e7a893de 100644 --- a/mkspecs/macx-ios-clang/features/default_post.prf +++ b/mkspecs/macx-ios-clang/features/default_post.prf @@ -93,6 +93,5 @@ macx-xcode { QMAKE_CFLAGS += $$arch_flags QMAKE_CXXFLAGS += $$arch_flags - QMAKE_OBJECTIVE_CFLAGS += $$arch_flags QMAKE_LFLAGS += $$arch_flags } |