| # Copyright 2019 The libgav1 Authors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| if(LIBGAV1_CMAKE_LIBGAV1_BUILD_DEFINITIONS_CMAKE_) |
| return() |
| endif() # LIBGAV1_CMAKE_LIBGAV1_BUILD_DEFINITIONS_CMAKE_ |
| set(LIBGAV1_CMAKE_LIBGAV1_BUILD_DEFINITIONS_CMAKE_ 1) |
| |
| macro(libgav1_set_build_definitions) |
| string(TOLOWER "${CMAKE_BUILD_TYPE}" build_type_lowercase) |
| |
| libgav1_load_version_info() |
| set(LIBGAV1_SOVERSION 0) |
| |
| list(APPEND libgav1_include_paths "${libgav1_root}" "${libgav1_root}/src" |
| "${libgav1_build}" "${libgav1_root}/third_party/abseil-cpp") |
| list(APPEND libgav1_gtest_include_paths |
| "third_party/googletest/googlemock/include" |
| "third_party/googletest/googletest/include" |
| "third_party/googletest/googletest") |
| list(APPEND libgav1_test_include_paths ${libgav1_include_paths} |
| ${libgav1_gtest_include_paths}) |
| list(APPEND libgav1_defines "LIBGAV1_CMAKE=1" |
| "LIBGAV1_FLAGS_SRCDIR=\"${libgav1_root}\"" |
| "LIBGAV1_FLAGS_TMPDIR=\"/tmp\"") |
| |
| if(MSVC OR WIN32) |
| list(APPEND libgav1_defines "_CRT_SECURE_NO_DEPRECATE=1" "NOMINMAX=1") |
| endif() |
| |
| if(ANDROID) |
| if(CMAKE_ANDROID_ARCH_ABI STREQUAL "armeabi-v7a") |
| set(CMAKE_ANDROID_ARM_MODE ON) |
| endif() |
| |
| if(build_type_lowercase MATCHES "rel") |
| list(APPEND libgav1_base_cxx_flags "-fno-stack-protector") |
| endif() |
| endif() |
| |
| list(APPEND libgav1_base_cxx_flags "-Wall" "-Wextra" "-Wmissing-declarations" |
| "-Wno-sign-compare" "-fvisibility=hidden" |
| "-fvisibility-inlines-hidden") |
| |
| if(BUILD_SHARED_LIBS) |
| set(CMAKE_POSITION_INDEPENDENT_CODE ON) |
| set(libgav1_dependency libgav1_shared) |
| else() |
| set(libgav1_dependency libgav1_static) |
| endif() |
| |
| list(APPEND libgav1_clang_cxx_flags "-Wextra-semi" "-Wmissing-prototypes" |
| "-Wshorten-64-to-32") |
| |
| if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") |
| if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "6") |
| # Quiet warnings in copy-list-initialization where {} elision has always |
| # been allowed. |
| list(APPEND libgav1_clang_cxx_flags "-Wno-missing-braces") |
| endif() |
| if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8) |
| list(APPEND libgav1_clang_cxx_flags "-Wextra-semi-stmt") |
| endif() |
| endif() |
| |
| if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
| if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "7") |
| # Quiet warnings due to potential snprintf() truncation in threadpool.cc. |
| list(APPEND libgav1_base_cxx_flags "-Wno-format-truncation") |
| |
| if(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7") |
| # Quiet gcc 6 vs 7 abi warnings: |
| # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77728 |
| list(APPEND libgav1_base_cxx_flags "-Wno-psabi") |
| list(APPEND ABSL_GCC_FLAGS "-Wno-psabi") |
| endif() |
| endif() |
| endif() |
| |
| if(build_type_lowercase MATCHES "rel") |
| # TODO(tomfinegan): this value is only a concern for the core library and |
| # can be made smaller if the test targets are avoided. |
| list(APPEND libgav1_base_cxx_flags "-Wstack-usage=196608") |
| endif() |
| |
| list(APPEND libgav1_msvc_cxx_flags |
| # Warning level 3. |
| "/W3" |
| # Disable warning C4018: |
| # '<comparison operator>' signed/unsigned mismatch |
| "/wd4018" |
| # Disable warning C4244: |
| # 'argument': conversion from '<double/int>' to |
| # '<float/smaller int type>', possible loss of data |
| "/wd4244" |
| # Disable warning C4267: |
| # '=': conversion from '<double/int>' to |
| # '<float/smaller int type>', possible loss of data |
| "/wd4267" |
| # Disable warning C4309: |
| # 'argument': truncation of constant value |
| "/wd4309" |
| # Disable warning C4551: |
| # function call missing argument list |
| "/wd4551") |
| |
| if(BUILD_SHARED_LIBS) |
| list(APPEND libgav1_msvc_cxx_flags |
| # Disable warning C4251: |
| # 'libgav1::DecoderImpl class member' needs to have |
| # dll-interface to be used by clients of class |
| # 'libgav1::Decoder'. |
| "/wd4251") |
| endif() |
| |
| if(NOT LIBGAV1_MAX_BITDEPTH) |
| set(LIBGAV1_MAX_BITDEPTH 10) |
| elseif(NOT LIBGAV1_MAX_BITDEPTH EQUAL 8 AND NOT LIBGAV1_MAX_BITDEPTH EQUAL 10) |
| libgav1_die("LIBGAV1_MAX_BITDEPTH must be 8 or 10.") |
| endif() |
| |
| list(APPEND libgav1_defines "LIBGAV1_MAX_BITDEPTH=${LIBGAV1_MAX_BITDEPTH}") |
| |
| if(DEFINED LIBGAV1_THREADPOOL_USE_STD_MUTEX) |
| if(NOT LIBGAV1_THREADPOOL_USE_STD_MUTEX EQUAL 0 |
| AND NOT LIBGAV1_THREADPOOL_USE_STD_MUTEX EQUAL 1) |
| libgav1_die("LIBGAV1_THREADPOOL_USE_STD_MUTEX must be 0 or 1.") |
| endif() |
| |
| list(APPEND libgav1_defines |
| "LIBGAV1_THREADPOOL_USE_STD_MUTEX=${LIBGAV1_THREADPOOL_USE_STD_MUTEX}") |
| endif() |
| |
| # Source file names ending in these suffixes will have the appropriate |
| # compiler flags added to their compile commands to enable intrinsics. |
| set(libgav1_neon_source_file_suffix "neon.cc") |
| set(libgav1_sse4_source_file_suffix "sse4.cc") |
| endmacro() |