diff options
Diffstat (limited to 'cmake/libgav1_build_definitions.cmake')
-rw-r--r-- | cmake/libgav1_build_definitions.cmake | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/cmake/libgav1_build_definitions.cmake b/cmake/libgav1_build_definitions.cmake new file mode 100644 index 0000000..b170e7e --- /dev/null +++ b/cmake/libgav1_build_definitions.cmake @@ -0,0 +1,150 @@ +# 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_avx2_source_file_suffix "avx2.cc") + set(libgav1_neon_source_file_suffix "neon.cc") + set(libgav1_sse4_source_file_suffix "sse4.cc") +endmacro() |