1*103e46e4SHarish Mahendrakar# Copyright (c) 2016 The WebM project authors. All Rights Reserved. 2*103e46e4SHarish Mahendrakar# 3*103e46e4SHarish Mahendrakar# Use of this source code is governed by a BSD-style license 4*103e46e4SHarish Mahendrakar# that can be found in the LICENSE file in the root of the source 5*103e46e4SHarish Mahendrakar# tree. An additional intellectual property rights grant can be found 6*103e46e4SHarish Mahendrakar# in the file PATENTS. All contributing project authors may 7*103e46e4SHarish Mahendrakar# be found in the AUTHORS file in the root of the source tree. 8*103e46e4SHarish Mahendrakar 9*103e46e4SHarish Mahendrakarinclude(CheckCXXCompilerFlag) 10*103e46e4SHarish Mahendrakar 11*103e46e4SHarish Mahendrakar# String used to cache failed CXX flags. 12*103e46e4SHarish Mahendrakarset(LIBWEBM_FAILED_CXX_FLAGS) 13*103e46e4SHarish Mahendrakar 14*103e46e4SHarish Mahendrakar# Checks C++ compiler for support of $cxx_flag. Adds $cxx_flag to 15*103e46e4SHarish Mahendrakar# $CMAKE_CXX_FLAGS when the compile test passes. Caches $c_flag in 16*103e46e4SHarish Mahendrakar# $LIBWEBM_FAILED_CXX_FLAGS when the test fails. 17*103e46e4SHarish Mahendrakarfunction(add_cxx_flag_if_supported cxx_flag) 18*103e46e4SHarish Mahendrakar unset(CXX_FLAG_FOUND CACHE) 19*103e46e4SHarish Mahendrakar string(FIND "${CMAKE_CXX_FLAGS}" "${cxx_flag}" CXX_FLAG_FOUND) 20*103e46e4SHarish Mahendrakar unset(CXX_FLAG_FAILED CACHE) 21*103e46e4SHarish Mahendrakar string(FIND "${LIBWEBM_FAILED_CXX_FLAGS}" "${cxx_flag}" CXX_FLAG_FAILED) 22*103e46e4SHarish Mahendrakar 23*103e46e4SHarish Mahendrakar if(${CXX_FLAG_FOUND} EQUAL -1 AND ${CXX_FLAG_FAILED} EQUAL -1) 24*103e46e4SHarish Mahendrakar unset(CXX_FLAG_SUPPORTED CACHE) 25*103e46e4SHarish Mahendrakar message("Checking CXX compiler flag support for: " ${cxx_flag}) 26*103e46e4SHarish Mahendrakar check_cxx_compiler_flag("${cxx_flag}" CXX_FLAG_SUPPORTED) 27*103e46e4SHarish Mahendrakar if(CXX_FLAG_SUPPORTED) 28*103e46e4SHarish Mahendrakar set(CMAKE_CXX_FLAGS 29*103e46e4SHarish Mahendrakar "${CMAKE_CXX_FLAGS} ${cxx_flag}" 30*103e46e4SHarish Mahendrakar CACHE STRING "" FORCE) 31*103e46e4SHarish Mahendrakar else() 32*103e46e4SHarish Mahendrakar set(LIBWEBM_FAILED_CXX_FLAGS 33*103e46e4SHarish Mahendrakar "${LIBWEBM_FAILED_CXX_FLAGS} ${cxx_flag}" 34*103e46e4SHarish Mahendrakar CACHE STRING "" FORCE) 35*103e46e4SHarish Mahendrakar endif() 36*103e46e4SHarish Mahendrakar endif() 37*103e46e4SHarish Mahendrakarendfunction() 38*103e46e4SHarish Mahendrakar 39*103e46e4SHarish Mahendrakar# Checks CXX compiler for support of $cxx_flag and terminates generation when 40*103e46e4SHarish Mahendrakar# support is not present. 41*103e46e4SHarish Mahendrakarfunction(require_cxx_flag cxx_flag) 42*103e46e4SHarish Mahendrakar unset(CXX_FLAG_FOUND CACHE) 43*103e46e4SHarish Mahendrakar string(FIND "${CMAKE_CXX_FLAGS}" "${cxx_flag}" CXX_FLAG_FOUND) 44*103e46e4SHarish Mahendrakar 45*103e46e4SHarish Mahendrakar if(${CXX_FLAG_FOUND} EQUAL -1) 46*103e46e4SHarish Mahendrakar unset(LIBWEBM_HAVE_CXX_FLAG CACHE) 47*103e46e4SHarish Mahendrakar message("Checking CXX compiler flag support for: " ${cxx_flag}) 48*103e46e4SHarish Mahendrakar check_cxx_compiler_flag("${cxx_flag}" LIBWEBM_HAVE_CXX_FLAG) 49*103e46e4SHarish Mahendrakar if(NOT LIBWEBM_HAVE_CXX_FLAG) 50*103e46e4SHarish Mahendrakar message( 51*103e46e4SHarish Mahendrakar FATAL_ERROR 52*103e46e4SHarish Mahendrakar "${PROJECT_NAME} requires support for CXX flag: ${cxx_flag}.") 53*103e46e4SHarish Mahendrakar endif() 54*103e46e4SHarish Mahendrakar set(CMAKE_CXX_FLAGS 55*103e46e4SHarish Mahendrakar "${cxx_flag} ${CMAKE_CXX_FLAGS}" 56*103e46e4SHarish Mahendrakar CACHE STRING "" FORCE) 57*103e46e4SHarish Mahendrakar endif() 58*103e46e4SHarish Mahendrakarendfunction() 59*103e46e4SHarish Mahendrakar 60*103e46e4SHarish Mahendrakar# Checks only non-MSVC targets for support of $cxx_flag. 61*103e46e4SHarish Mahendrakarfunction(require_cxx_flag_nomsvc cxx_flag) 62*103e46e4SHarish Mahendrakar if(NOT MSVC) 63*103e46e4SHarish Mahendrakar require_cxx_flag(${cxx_flag}) 64*103e46e4SHarish Mahendrakar endif() 65*103e46e4SHarish Mahendrakarendfunction() 66*103e46e4SHarish Mahendrakar 67*103e46e4SHarish Mahendrakar# Adds $preproc_def to CXX compiler command line (as -D$preproc_def) if not 68*103e46e4SHarish Mahendrakar# already present. 69*103e46e4SHarish Mahendrakarfunction(add_cxx_preproc_definition preproc_def) 70*103e46e4SHarish Mahendrakar unset(PREPROC_DEF_FOUND CACHE) 71*103e46e4SHarish Mahendrakar string(FIND "${CMAKE_CXX_FLAGS}" "${preproc_def}" PREPROC_DEF_FOUND) 72*103e46e4SHarish Mahendrakar 73*103e46e4SHarish Mahendrakar if(${PREPROC_DEF_FOUND} EQUAL -1) 74*103e46e4SHarish Mahendrakar set(CMAKE_CXX_FLAGS 75*103e46e4SHarish Mahendrakar "${CMAKE_CXX_FLAGS} -D${preproc_def}" 76*103e46e4SHarish Mahendrakar CACHE STRING "" FORCE) 77*103e46e4SHarish Mahendrakar endif() 78*103e46e4SHarish Mahendrakarendfunction() 79