xref: /aosp_15_r20/external/libwebm/build/cxx_flags.cmake (revision 103e46e4cd4b6efcf6001f23fa8665fb110abf8d)
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