From edccc331601d0225b8ec91edcfb82f27a9279cb2 Mon Sep 17 00:00:00 2001 From: Marcus Asteborg Date: Wed, 24 Jun 2020 07:05:09 -0700 Subject: [PATCH 1/5] cmake - add warning flags for clang, gcc etc. --- cmake/OpusConfig.cmake | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cmake/OpusConfig.cmake b/cmake/OpusConfig.cmake index 63054617..ae5de034 100644 --- a/cmake/OpusConfig.cmake +++ b/cmake/OpusConfig.cmake @@ -78,3 +78,15 @@ else() check_flag(STACK_PROTECTOR -fstack-protector-strong) check_flag(HIDDEN_VISIBILITY -fvisibility=hidden) endif() + +if(NOT MSVC) + set(WARNING_LIST -Wall -W -Wstrict-prototypes -Wextra -Wcast-align -Wnested-externs -Wshadow) + include(CheckCCompilerFlag) + foreach(WARNING_FLAG ${WARNING_LIST}) + string(REPLACE - "" WARNING_VAR ${WARNING_FLAG}) + check_c_compiler_flag(${WARNING_FLAG} ${WARNING_VAR}_SUPPORTED) + if(${WARNING_VAR}_SUPPORTED) + add_compile_options(${WARNING_FLAG}) + endif() + endforeach() +endif() \ No newline at end of file -- GitLab From 5edb5aacba5c6941b66ef48002f47fbe1c3f39b7 Mon Sep 17 00:00:00 2001 From: Marcus Asteborg Date: Sun, 12 Jul 2020 21:03:34 -0700 Subject: [PATCH 2/5] cmake - Fix typo bug in enable_float_api option --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0dc4b176..960692fd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,7 +60,7 @@ add_feature_info(OPUS_FIXED_POINT OPUS_FIXED_POINT ${OPUS_FIXED_POINT_HELP_STR}) set(OPUS_ENABLE_FLOAT_API_HELP_STR "compile with the floating point API (for machines with float library).") option(OPUS_ENABLE_FLOAT_API ${OPUS_ENABLE_FLOAT_API_HELP_STR} ON) -add_feature_info(OPUS_FLOAT_API OPUS_ENABLE_FLOAT_API ${OPUS_ENABLE_FLOAT_API_HELP_STR}) +add_feature_info(OPUS_ENABLE_FLOAT_API OPUS_ENABLE_FLOAT_API ${OPUS_ENABLE_FLOAT_API_HELP_STR}) set(OPUS_FLOAT_APPROX_HELP_STR "enable floating point approximations (Ensure your platform supports IEEE 754 before enabling).") option(OPUS_FLOAT_APPROX ${OPUS_FLOAT_APPROX_HELP_STR} OFF) -- GitLab From 8ad827c3ff99f08b4087cf47637c722020d3c958 Mon Sep 17 00:00:00 2001 From: Marcus Asteborg Date: Wed, 24 Jun 2020 21:25:57 -0700 Subject: [PATCH 3/5] cmake - fix bugs around consuming Opus as a submodule in cmake and package version parsing --- CMakeLists.txt | 22 ++++------- Makefile.am | 1 + cmake/OpusConfig.cmake | 4 +- cmake/OpusFunctions.cmake | 51 ------------------------- cmake/OpusPackageVersion.cmake | 70 ++++++++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 68 deletions(-) create mode 100644 cmake/OpusPackageVersion.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 960692fd..6c45cda8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,23 +1,12 @@ cmake_minimum_required(VERSION 3.1) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") -include(OpusFunctions) - -get_library_version(OPUS_LIBRARY_VERSION OPUS_LIBRARY_VERSION_MAJOR) -message(STATUS "Opus library version: ${OPUS_LIBRARY_VERSION}") - -get_package_version(PACKAGE_VERSION) -message(STATUS "Opus package version: ${PACKAGE_VERSION}") - -string(REGEX - REPLACE "^([0-9]+.[0-9]+\\.?([0-9]+)?).*" - "\\1" - PROJECT_VERSION - ${PACKAGE_VERSION}) -message(STATUS "Opus project version: ${PROJECT_VERSION}") +include(OpusPackageVersion) +get_package_version(PACKAGE_VERSION PROJECT_VERSION) project(Opus LANGUAGES C VERSION ${PROJECT_VERSION}) +include(OpusFunctions) include(OpusBuildtype) include(OpusConfig) include(OpusSources) @@ -228,6 +217,9 @@ endif() add_library(opus ${opus_headers} ${opus_sources} ${opus_sources_float} ${Opus_PUBLIC_HEADER}) add_library(Opus::opus ALIAS opus) +get_library_version(OPUS_LIBRARY_VERSION OPUS_LIBRARY_VERSION_MAJOR) +message(STATUS "Opus library version: ${OPUS_LIBRARY_VERSION}") + set_target_properties(opus PROPERTIES SOVERSION ${OPUS_LIBRARY_VERSION_MAJOR} @@ -490,7 +482,7 @@ if(OPUS_INSTALL_CMAKE_CONFIG_MODULE) include(CMakePackageConfigHelpers) set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}) - configure_package_config_file(${CMAKE_SOURCE_DIR}/cmake/OpusConfig.cmake.in + configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/OpusConfig.cmake.in OpusConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_PACKAGEDIR} diff --git a/Makefile.am b/Makefile.am index e3847bf8..e5213739 100644 --- a/Makefile.am +++ b/Makefile.am @@ -220,6 +220,7 @@ EXTRA_DIST = opus.pc.in \ cmake/OpusConfig.cmake \ cmake/OpusConfig.cmake.in \ cmake/OpusFunctions.cmake \ + cmake/OpusPackageVersion.cmake \ cmake/OpusSources.cmake \ cmake/config.h.cmake.in \ cmake/vla.c \ diff --git a/cmake/OpusConfig.cmake b/cmake/OpusConfig.cmake index ae5de034..43a66b73 100644 --- a/cmake/OpusConfig.cmake +++ b/cmake/OpusConfig.cmake @@ -5,7 +5,7 @@ set(__opus_config INCLUDED) include(OpusFunctions) -configure_file(${CMAKE_SOURCE_DIR}/cmake/config.h.cmake.in config.h @ONLY) +configure_file(cmake/config.h.cmake.in config.h @ONLY) add_definitions(-DHAVE_CONFIG_H) set_property(GLOBAL PROPERTY USE_FOLDERS ON) @@ -89,4 +89,4 @@ if(NOT MSVC) add_compile_options(${WARNING_FLAG}) endif() endforeach() -endif() \ No newline at end of file +endif() diff --git a/cmake/OpusFunctions.cmake b/cmake/OpusFunctions.cmake index 2eb83f4e..fcf3351f 100644 --- a/cmake/OpusFunctions.cmake +++ b/cmake/OpusFunctions.cmake @@ -41,57 +41,6 @@ function(get_library_version OPUS_LIBRARY_VERSION OPUS_LIBRARY_VERSION_MAJOR) set(OPUS_LIBRARY_VERSION_MAJOR ${OPUS_LIBRARY_VERSION_MAJOR} PARENT_SCOPE) endfunction() -function(get_package_version PACKAGE_VERSION) - find_package(Git) - if(Git_FOUND AND EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git") - execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --match "v*" - OUTPUT_VARIABLE OPUS_PACKAGE_VERSION) - if(OPUS_PACKAGE_VERSION) - string(STRIP ${OPUS_PACKAGE_VERSION}, OPUS_PACKAGE_VERSION) - string(REPLACE \n - "" - OPUS_PACKAGE_VERSION - ${OPUS_PACKAGE_VERSION}) - string(REPLACE , - "" - OPUS_PACKAGE_VERSION - ${OPUS_PACKAGE_VERSION}) - - string(SUBSTRING ${OPUS_PACKAGE_VERSION} - 1 - -1 - OPUS_PACKAGE_VERSION) - set(PACKAGE_VERSION ${OPUS_PACKAGE_VERSION} PARENT_SCOPE) - return() - endif() - endif() - - if(EXISTS "${CMAKE_SOURCE_DIR}/package_version") - # Not a git repo, lets' try to parse it from package_version file if exists - file(STRINGS package_version opus_package_version_string - LIMIT_COUNT 1 - REGEX "PACKAGE_VERSION=") - string(REPLACE "PACKAGE_VERSION=" - "" - opus_package_version_string - ${opus_package_version_string}) - string(REPLACE "\"" - "" - opus_package_version_string - ${opus_package_version_string}) - # In case we have a unknown dist here we just replace it with 0 - string(REPLACE "unknown" - "0" - opus_package_version_string - ${opus_package_version_string}) - set(PACKAGE_VERSION ${opus_package_version_string} PARENT_SCOPE) - return() - endif() - - # if all else fails set to 0 - set(PACKAGE_VERSION 0 PARENT_SCOPE) -endfunction() - function(check_flag NAME FLAG) include(CheckCCompilerFlag) check_c_compiler_flag(${FLAG} ${NAME}_SUPPORTED) diff --git a/cmake/OpusPackageVersion.cmake b/cmake/OpusPackageVersion.cmake new file mode 100644 index 00000000..447ce3b1 --- /dev/null +++ b/cmake/OpusPackageVersion.cmake @@ -0,0 +1,70 @@ +if(__opus_version) + return() +endif() +set(__opus_version INCLUDED) + +function(get_package_version PACKAGE_VERSION PROJECT_VERSION) + + find_package(Git) + if(GIT_FOUND AND EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git") + execute_process(COMMAND ${GIT_EXECUTABLE} + --git-dir=${CMAKE_CURRENT_LIST_DIR}/.git describe + --tags --match "v*" OUTPUT_VARIABLE OPUS_PACKAGE_VERSION) + if(OPUS_PACKAGE_VERSION) + string(STRIP ${OPUS_PACKAGE_VERSION}, OPUS_PACKAGE_VERSION) + string(REPLACE \n + "" + OPUS_PACKAGE_VERSION + ${OPUS_PACKAGE_VERSION}) + string(REPLACE , + "" + OPUS_PACKAGE_VERSION + ${OPUS_PACKAGE_VERSION}) + + string(SUBSTRING ${OPUS_PACKAGE_VERSION} + 1 + -1 + OPUS_PACKAGE_VERSION) + message(STATUS "Opus package version from git repo: ${OPUS_PACKAGE_VERSION}") + endif() + + elseif(EXISTS "${CMAKE_CURRENT_LIST_DIR}/package_version" + AND NOT OPUS_PACKAGE_VERSION) + # Not a git repo, lets' try to parse it from package_version file if exists + file(STRINGS package_version OPUS_PACKAGE_VERSION + LIMIT_COUNT 1 + REGEX "PACKAGE_VERSION=") + string(REPLACE "PACKAGE_VERSION=" + "" + OPUS_PACKAGE_VERSION + ${OPUS_PACKAGE_VERSION}) + string(REPLACE "\"" + "" + OPUS_PACKAGE_VERSION + ${OPUS_PACKAGE_VERSION}) + # In case we have a unknown dist here we just replace it with 0 + string(REPLACE "unknown" + "0" + OPUS_PACKAGE_VERSION + ${OPUS_PACKAGE_VERSION}) + message(STATUS "Opus package version from package_version file: ${OPUS_PACKAGE_VERSION}") + endif() + + if(OPUS_PACKAGE_VERSION) + string(REGEX + REPLACE "^([0-9]+.[0-9]+\\.?([0-9]+)?).*" + "\\1" + OPUS_PROJECT_VERSION + ${OPUS_PACKAGE_VERSION}) + else() + # fail to parse version from git and package version + message(WARNING "Could not get package version.") + set(OPUS_PACKAGE_VERSION 0) + set(OPUS_PROJECT_VERSION 0) + endif() + + message(STATUS "Opus project version: ${OPUS_PROJECT_VERSION}") + + set(PACKAGE_VERSION ${OPUS_PACKAGE_VERSION} PARENT_SCOPE) + set(PROJECT_VERSION ${OPUS_PROJECT_VERSION} PARENT_SCOPE) +endfunction() -- GitLab From d4b8707b1460c90682ee91f1283d361b90feddd2 Mon Sep 17 00:00:00 2001 From: Zeno Endemann Date: Wed, 15 Jul 2020 21:45:42 +0200 Subject: [PATCH 4/5] CMake: Make _FORTIFY_SOURCE optional --- CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c45cda8..5cc31160 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -109,6 +109,12 @@ cmake_dependent_option(OPUS_STACK_PROTECTOR OFF) add_feature_info(OPUS_STACK_PROTECTOR OPUS_STACK_PROTECTOR ${OPUS_STACK_PROTECTOR_HELP_STR}) +if(NOT MSVC AND NOT MINGW) + set(OPUS_FORTIFY_SOURCE_HELP_STR "add protection against buffer overflows.") + option(OPUS_FORTIFY_SOURCE ${OPUS_FORTIFY_SOURCE_HELP_STR} ON) + add_feature_info(OPUS_FORTIFY_SOURCE OPUS_FORTIFY_SOURCE ${OPUS_FORTIFY_SOURCE_HELP_STR}) +endif() + if(OPUS_CPU_X86 OR OPUS_CPU_X64) set(OPUS_X86_MAY_HAVE_SSE_HELP_STR "does runtime check for SSE1 support.") cmake_dependent_option(OPUS_X86_MAY_HAVE_SSE @@ -241,7 +247,7 @@ target_include_directories( target_link_libraries(opus PRIVATE ${OPUS_REQUIRED_LIBRARIES}) target_compile_definitions(opus PRIVATE OPUS_BUILD ENABLE_HARDENING) -if(NOT MSVC) +if(OPUS_FORTIFY_SOURCE) target_compile_definitions(opus PRIVATE _FORTIFY_SOURCE=2) endif() -- GitLab From b83dd52868326a401c8578041e3dbea439d53f11 Mon Sep 17 00:00:00 2001 From: Marcus Asteborg Date: Thu, 16 Jul 2020 22:40:08 -0700 Subject: [PATCH 5/5] cmake - MINGW check for ssp lib and link if security features is enabled --- CMakeLists.txt | 22 ++++++++++++++++------ cmake/OpusConfig.cmake | 12 ++++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5cc31160..244ad139 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -109,10 +109,19 @@ cmake_dependent_option(OPUS_STACK_PROTECTOR OFF) add_feature_info(OPUS_STACK_PROTECTOR OPUS_STACK_PROTECTOR ${OPUS_STACK_PROTECTOR_HELP_STR}) -if(NOT MSVC AND NOT MINGW) - set(OPUS_FORTIFY_SOURCE_HELP_STR "add protection against buffer overflows.") - option(OPUS_FORTIFY_SOURCE ${OPUS_FORTIFY_SOURCE_HELP_STR} ON) - add_feature_info(OPUS_FORTIFY_SOURCE OPUS_FORTIFY_SOURCE ${OPUS_FORTIFY_SOURCE_HELP_STR}) +if(NOT MSVC) + set(OPUS_FORTIFY_SOURCE_HELP_STR "add protection against buffer overflows.") + cmake_dependent_option(OPUS_FORTIFY_SOURCE + ${OPUS_FORTIFY_SOURCE_HELP_STR} + ON + "FORTIFY_SOURCE_SUPPORTED" + OFF) + add_feature_info(OPUS_FORTIFY_SOURCE OPUS_FORTIFY_SOURCE ${OPUS_FORTIFY_SOURCE_HELP_STR}) +endif() + +if(MINGW AND (OPUS_FORTIFY_SOURCE OR OPUS_STACK_PROTECTOR)) + # ssp lib is needed for security features for MINGW + list(APPEND OPUS_REQUIRED_LIBRARIES ssp) endif() if(OPUS_CPU_X86 OR OPUS_CPU_X64) @@ -247,8 +256,9 @@ target_include_directories( target_link_libraries(opus PRIVATE ${OPUS_REQUIRED_LIBRARIES}) target_compile_definitions(opus PRIVATE OPUS_BUILD ENABLE_HARDENING) -if(OPUS_FORTIFY_SOURCE) - target_compile_definitions(opus PRIVATE _FORTIFY_SOURCE=2) +if(OPUS_FORTIFY_SOURCE AND NOT MSVC) + target_compile_definitions(opus PRIVATE + $<$>:_FORTIFY_SOURCE=2>) endif() if(OPUS_FLOAT_APPROX) diff --git a/cmake/OpusConfig.cmake b/cmake/OpusConfig.cmake index 43a66b73..8d19a535 100644 --- a/cmake/OpusConfig.cmake +++ b/cmake/OpusConfig.cmake @@ -77,6 +77,18 @@ else() check_flag(FAST_MATH -ffast-math) check_flag(STACK_PROTECTOR -fstack-protector-strong) check_flag(HIDDEN_VISIBILITY -fvisibility=hidden) + set(FORTIFY_SOURCE_SUPPORTED 1) +endif() + +if(MINGW) + # For MINGW we need to link ssp lib for security features such as + # stack protector and fortify_sources + check_library_exists(ssp __stack_chk_fail "" HAVE_LIBSSP) + if(NOT HAVE_LIBSSP) + message(WARNING "Could not find libssp in MinGW, disabling STACK_PROTECTOR and FORTIFY_SOURCE") + set(STACK_PROTECTOR_SUPPORTED 0) + set(FORTIFY_SOURCE_SUPPORTED 0) + endif() endif() if(NOT MSVC) -- GitLab