#
# Qmake configuration for Clang on Linux, OS X and iOS
#

QMAKE_COMPILER          = gcc clang llvm   # clang pretends to be gcc

QMAKE_CC                = $${CROSS_COMPILE}clang
QMAKE_CXX               = $${CROSS_COMPILE}clang++

QMAKE_LINK_C            = $$QMAKE_CC
QMAKE_LINK_C_SHLIB      = $$QMAKE_CC

QMAKE_LINK              = $$QMAKE_CXX
QMAKE_LINK_SHLIB        = $$QMAKE_CXX

CONFIG                 += clang_pch_style
QMAKE_PCH_OUTPUT_EXT    = .pch

QMAKE_CFLAGS_OPTIMIZE_SIZE = -Oz

QMAKE_CFLAGS_PRECOMPILE          = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
QMAKE_CFLAGS_USE_PRECOMPILE      = -Xclang -include-pch -Xclang ${QMAKE_PCH_OUTPUT}
QMAKE_CFLAGS_LTCG                = -flto=thin
QMAKE_CFLAGS_LTCG_FATOBJECTS     = -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
QMAKE_CXXFLAGS_LTCG              = $$QMAKE_CFLAGS_LTCG
QMAKE_CXXFLAGS_LTCG_FATOBJECTS   = $$QMAKE_CFLAGS_LTCG_FATOBJECTS
QMAKE_CXXFLAGS_DISABLE_LTCG      = $$QMAKE_CFLAGS_DISABLE_LTCG
QMAKE_CXXFLAGS_CXX11             = -std=c++11
QMAKE_CXXFLAGS_CXX14             = -std=c++1y
QMAKE_CXXFLAGS_CXX1Z             = -std=c++1z
QMAKE_CXXFLAGS_CXX2A             = -std=c++2a
QMAKE_CXXFLAGS_GNUCXX11          = -std=gnu++11
QMAKE_CXXFLAGS_GNUCXX14          = -std=gnu++1y
QMAKE_CXXFLAGS_GNUCXX1Z          = -std=gnu++1z
QMAKE_CXXFLAGS_GNUCXX2A          = -std=gnu++2a

QMAKE_LFLAGS_CXX11      =
QMAKE_LFLAGS_CXX14      =
QMAKE_LFLAGS_CXX1Z      =
QMAKE_LFLAGS_LTCG       = $$QMAKE_CFLAGS_LTCG

# Wrapper tools that understand .o/.a files with LLVM bytecode instead of machine code
QMAKE_AR_LTCG           = llvm-ar cqs
QMAKE_NM_LTCG           = llvm-nm -P
QMAKE_RANLIB_LTCG       = true      # No need to run, since llvm-ar has "s"

QMAKE_CFLAGS_COVERAGE_TRACE_PC_GUARD   = -fsanitize-coverage=trace-pc-guard
QMAKE_CXXFLAGS_COVERAGE_TRACE_PC_GUARD = -fsanitize-coverage=trace-pc-guard
QMAKE_LFLAGS_COVERAGE_TRACE_PC_GUARD   = -fsanitize-coverage=trace-pc-guard

QMAKE_CFLAGS_COVERAGE_SOURCE_BASED   = -fprofile-instr-generate -fcoverage-mapping
QMAKE_CXXFLAGS_COVERAGE_SOURCE_BASED = -fprofile-instr-generate -fcoverage-mapping
QMAKE_LFLAGS_COVERAGE_SOURCE_BASED   = -fprofile-instr-generate -fcoverage-mapping
