diff options
Diffstat (limited to 'third_party/aom/build')
-rw-r--r-- | third_party/aom/build/cmake/aom_config_defaults.cmake | 248 | ||||
-rw-r--r-- | third_party/aom/build/cmake/aom_configure.cmake | 55 | ||||
-rw-r--r-- | third_party/aom/build/cmake/aom_experiment_deps.cmake | 4 | ||||
-rw-r--r-- | third_party/aom/build/cmake/aom_optimization.cmake | 4 | ||||
-rw-r--r-- | third_party/aom/build/cmake/exports.cmake | 7 | ||||
-rw-r--r-- | third_party/aom/build/cmake/exports_sources.cmake | 16 | ||||
-rw-r--r-- | third_party/aom/build/cmake/generate_aom_config_templates.cmake | 19 | ||||
-rw-r--r-- | third_party/aom/build/cmake/generate_exports.cmake | 24 | ||||
-rw-r--r-- | third_party/aom/build/cmake/ios-Info.plist (renamed from third_party/aom/build/make/ios-Info.plist) | 0 | ||||
-rwxr-xr-x | third_party/aom/build/cmake/iosbuild.sh (renamed from third_party/aom/build/make/iosbuild.sh) | 0 | ||||
-rwxr-xr-x | third_party/aom/build/cmake/rtcd.pl (renamed from third_party/aom/build/make/rtcd.pl) | 6 | ||||
-rw-r--r-- | third_party/aom/build/cmake/util.cmake | 91 | ||||
-rwxr-xr-x | third_party/aom/build/cmake/version.pl | 10 | ||||
-rw-r--r-- | third_party/aom/build/make/thumb.pm | 64 |
14 files changed, 349 insertions, 199 deletions
diff --git a/third_party/aom/build/cmake/aom_config_defaults.cmake b/third_party/aom/build/cmake/aom_config_defaults.cmake index 19af5c43b..a07438cfe 100644 --- a/third_party/aom/build/cmake/aom_config_defaults.cmake +++ b/third_party/aom/build/cmake/aom_config_defaults.cmake @@ -7,90 +7,190 @@ # at www.aomedia.org/license/software. If the Alliance for Open Media Patent # License 1.0 was not distributed with this source code in the PATENTS file, you # can obtain it at www.aomedia.org/license/patent. + +include("${AOM_ROOT}/build/cmake/util.cmake") + +# This file sets default values for libaom configuration variables. All libaom +# config variables are added to the CMake variable cache via the macros provided +# in util.cmake. + # -# Defaults for every libaom configuration variable. Here we add all libaom -# config variables to the cmake variable cache, but omit the FORCE parameter to -# allow users to specify values when executing cmake to generate build files. -# Values here are used only if not set by the user. -set(INLINE "" CACHE STRING "Sets INLINE value for current target.") +# The variables in this section of the file are detected at configuration time, +# but can be overridden via the use of CONFIG_* and ENABLE_* values also defined +# in this file. +# + +set_aom_detect_var(INLINE "" STRING "Sets INLINE value for current target.") # CPUs. -set(ARCH_ARM 0 CACHE NUMBER "Enables ARM architecture.") -set(ARCH_MIPS 0 CACHE NUMBER "Enables MIPS architecture.") -set(ARCH_PPC 0 CACHE NUMBER "Enables PPC architecture.") -set(ARCH_X86 0 CACHE NUMBER "Enables X86 architecture.") -set(ARCH_X86_64 0 CACHE NUMBER "Enables X86_64 architecture.") - -# ARM optimization flags. -set(HAVE_NEON 0 CACHE NUMBER "Enables NEON intrinsics optimizations.") - -# MIPS optimization flags. -set(HAVE_DSPR2 0 CACHE NUMBER "Enables DSPR2 optimizations.") -set(HAVE_MIPS32 0 CACHE NUMBER "Enables MIPS32 optimizations.") -set(HAVE_MIPS64 0 CACHE NUMBER "Enables MIPS64 optimizations. ") -set(HAVE_MSA 0 CACHE NUMBER "Enables MSA optimizations.") - -# PPC optimization flags. -set(HAVE_VSX 0 CACHE NUMBER "Enables VSX optimizations.") - -# x86/x86_64 optimization flags. -set(HAVE_AVX 0 CACHE NUMBER "Enables AVX optimizations.") -set(HAVE_AVX2 0 CACHE NUMBER "Enables AVX2 optimizations.") -set(HAVE_MMX 0 CACHE NUMBER "Enables MMX optimizations. ") -set(HAVE_SSE 0 CACHE NUMBER "Enables SSE optimizations.") -set(HAVE_SSE2 0 CACHE NUMBER "Enables SSE2 optimizations.") -set(HAVE_SSE3 0 CACHE NUMBER "Enables SSE3 optimizations.") -set(HAVE_SSE4_1 0 CACHE NUMBER "Enables SSE 4.1 optimizations.") -set(HAVE_SSE4_2 0 CACHE NUMBER "Enables SSE 4.2 optimizations.") -set(HAVE_SSSE3 0 CACHE NUMBER "Enables SSSE3 optimizations.") +set_aom_detect_var(ARCH_ARM 0 NUMBER "Enables ARM architecture.") +set_aom_detect_var(ARCH_MIPS 0 NUMBER "Enables MIPS architecture.") +set_aom_detect_var(ARCH_PPC 0 NUMBER "Enables PPC architecture.") +set_aom_detect_var(ARCH_X86 0 NUMBER "Enables X86 architecture.") +set_aom_detect_var(ARCH_X86_64 0 NUMBER "Enables X86_64 architecture.") + +# ARM feature flags. +set_aom_detect_var(HAVE_NEON 0 NUMBER "Enables NEON intrinsics optimizations.") + +# MIPS feature flags. +set_aom_detect_var(HAVE_DSPR2 0 NUMBER "Enables DSPR2 optimizations.") +set_aom_detect_var(HAVE_MIPS32 0 NUMBER "Enables MIPS32 optimizations.") +set_aom_detect_var(HAVE_MIPS64 0 NUMBER "Enables MIPS64 optimizations. ") +set_aom_detect_var(HAVE_MSA 0 NUMBER "Enables MSA optimizations.") + +# PPC feature flags. +set_aom_detect_var(HAVE_VSX 0 NUMBER "Enables VSX optimizations.") + +# x86/x86_64 feature flags. +set_aom_detect_var(HAVE_AVX 0 NUMBER "Enables AVX optimizations.") +set_aom_detect_var(HAVE_AVX2 0 NUMBER "Enables AVX2 optimizations.") +set_aom_detect_var(HAVE_MMX 0 NUMBER "Enables MMX optimizations. ") +set_aom_detect_var(HAVE_SSE 0 NUMBER "Enables SSE optimizations.") +set_aom_detect_var(HAVE_SSE2 0 NUMBER "Enables SSE2 optimizations.") +set_aom_detect_var(HAVE_SSE3 0 NUMBER "Enables SSE3 optimizations.") +set_aom_detect_var(HAVE_SSE4_1 0 NUMBER "Enables SSE 4.1 optimizations.") +set_aom_detect_var(HAVE_SSE4_2 0 NUMBER "Enables SSE 4.2 optimizations.") +set_aom_detect_var(HAVE_SSSE3 0 NUMBER "Enables SSSE3 optimizations.") # Flags describing the build environment. -set(HAVE_FEXCEPT 0 CACHE NUMBER "Internal flag, GNU fenv.h present for target.") -set(HAVE_PTHREAD_H 0 CACHE NUMBER "Internal flag, target pthread support.") -set(HAVE_UNISTD_H 0 CACHE NUMBER "Internal flag, unistd.h present for target.") -set(HAVE_WXWIDGETS 0 CACHE NUMBER "WxWidgets present.") +set_aom_detect_var(HAVE_FEXCEPT 0 NUMBER + "Internal flag, GNU fenv.h present for target.") +set_aom_detect_var(HAVE_PTHREAD_H 0 NUMBER + "Internal flag, target pthread support.") +set_aom_detect_var(HAVE_UNISTD_H 0 NUMBER + "Internal flag, unistd.h present for target.") +set_aom_detect_var(HAVE_WXWIDGETS 0 NUMBER "WxWidgets present.") + +# +# Variables in this section can be set from the CMake command line or from +# within the CMake GUI. The variables control libaom features. +# # Build configuration flags. -set(CONFIG_AV1_DECODER 1 CACHE NUMBER "Enable AV1 decoder.") -set(CONFIG_AV1_ENCODER 1 CACHE NUMBER "Enable AV1 encoder.") -set(CONFIG_BIG_ENDIAN 0 CACHE NUMBER "Internal flag.") -set(CONFIG_GCC 0 CACHE NUMBER "Building with GCC (detected).") -set(CONFIG_GCOV 0 CACHE NUMBER "Enable gcov support.") -set(CONFIG_GPROF 0 CACHE NUMBER "Enable gprof support.") -set(CONFIG_LIBYUV 1 CACHE NUMBER "Enables libyuv scaling/conversion support.") -set(CONFIG_MSVS 0 CACHE NUMBER "Building with MS Visual Studio (detected).") -set(CONFIG_MULTITHREAD 1 CACHE NUMBER "Multithread support.") -set(CONFIG_OS_SUPPORT 0 CACHE NUMBER "Internal flag.") -set(CONFIG_PIC 0 CACHE NUMBER "Build with PIC enabled.") -set(CONFIG_RUNTIME_CPU_DETECT 1 CACHE NUMBER "Runtime CPU detection support.") -set(CONFIG_SHARED 0 CACHE NUMBER "Build shared libs.") -set(CONFIG_STATIC 1 CACHE NUMBER "Build static libs.") -set(CONFIG_WEBM_IO 1 CACHE NUMBER "Enables WebM support.") +set_aom_config_var(AOM_RTCD_FLAGS "" STRING + "Arguments to pass to rtcd.pl. Separate with ';'") +set_aom_config_var(CONFIG_AV1_DECODER 1 NUMBER "Enable AV1 decoder.") +set_aom_config_var(CONFIG_AV1_ENCODER 1 NUMBER "Enable AV1 encoder.") +set_aom_config_var(CONFIG_BIG_ENDIAN 0 NUMBER "Internal flag.") +set_aom_config_var(CONFIG_GCC 0 NUMBER "Building with GCC (detect).") +set_aom_config_var(CONFIG_GCOV 0 NUMBER "Enable gcov support.") +set_aom_config_var(CONFIG_GPROF 0 NUMBER "Enable gprof support.") +set_aom_config_var(CONFIG_LIBYUV 1 NUMBER + "Enables libyuv scaling/conversion support.") + +set_aom_config_var(CONFIG_MULTITHREAD 1 NUMBER "Multithread support.") +set_aom_config_var(CONFIG_OS_SUPPORT 0 NUMBER "Internal flag.") +set_aom_config_var(CONFIG_PIC 0 NUMBER "Build with PIC enabled.") +set_aom_config_var(CONFIG_RUNTIME_CPU_DETECT 1 NUMBER + "Runtime CPU detection support.") +set_aom_config_var(CONFIG_SHARED 0 NUMBER "Build shared libs.") +set_aom_config_var(CONFIG_STATIC 1 NUMBER "Build static libs.") +set_aom_config_var(CONFIG_WEBM_IO 1 NUMBER "Enables WebM support.") # Debugging flags. -set(CONFIG_BITSTREAM_DEBUG 0 CACHE NUMBER "Bitstream debugging flag.") -set(CONFIG_DEBUG 0 CACHE NUMBER "Debug build flag.") -set(CONFIG_MISMATCH_DEBUG 0 CACHE NUMBER "Mismatch debugging flag.") +set_aom_config_var(CONFIG_BITSTREAM_DEBUG 0 NUMBER "Bitstream debugging flag.") +set_aom_config_var(CONFIG_DEBUG 0 NUMBER "Debug build flag.") +set_aom_config_var(CONFIG_MISMATCH_DEBUG 0 NUMBER "Mismatch debugging flag.") # AV1 feature flags. -set(CONFIG_ACCOUNTING 0 CACHE NUMBER "Enables bit accounting.") -set(CONFIG_ANALYZER 0 CACHE NUMBER "Enables bit stream analyzer.") -set(CONFIG_COEFFICIENT_RANGE_CHECKING 0 CACHE NUMBER "Coefficient range check.") -set(CONFIG_DENOISE 0 CACHE NUMBER "Denoise/noise modeling support in encoder.") -set(CONFIG_FILEOPTIONS 1 CACHE NUMBER "Enables encoder config file support.") -set(CONFIG_INSPECTION 0 CACHE NUMBER "Enables bitstream inspection.") -set(CONFIG_INTERNAL_STATS 0 CACHE NUMBER "Enables internal encoder stats.") -set(CONFIG_LOWBITDEPTH 0 CACHE NUMBER "Enables 8-bit optimized pipeline.") -set(CONFIG_SIZE_LIMIT 0 CACHE NUMBER "Limit max decode width/height.") -set(CONFIG_SPATIAL_RESAMPLING 1 CACHE NUMBER "Spatial resampling.") -set(DECODE_HEIGHT_LIMIT 0 CACHE NUMBER "Set limit for decode height.") -set(DECODE_WIDTH_LIMIT 0 CACHE NUMBER "Set limit for decode width.") +set_aom_config_var(CONFIG_ACCOUNTING 0 NUMBER "Enables bit accounting.") +set_aom_config_var(CONFIG_ANALYZER 0 NUMBER "Enables bit stream analyzer.") +set_aom_config_var(CONFIG_COEFFICIENT_RANGE_CHECKING 0 NUMBER + "Coefficient range check.") +set_aom_config_var(CONFIG_DENOISE 1 NUMBER + "Denoise/noise modeling support in encoder.") +set_aom_config_var(CONFIG_FILEOPTIONS 1 NUMBER + "Enables encoder config file support.") +set_aom_config_var(CONFIG_FIX_GF_LENGTH 1 NUMBER + "Fix the GF length if possible") +set_aom_config_var(CONFIG_INSPECTION 0 NUMBER "Enables bitstream inspection.") +set_aom_config_var(CONFIG_INTERNAL_STATS 0 NUMBER + "Enables internal encoder stats.") +set_aom_config_var(CONFIG_LOWBITDEPTH 0 NUMBER + "Enables 8-bit optimized pipeline.") +set_aom_config_var(CONFIG_MAX_DECODE_PROFILE 2 NUMBER + "Max profile to support decoding.") +set_aom_config_var(CONFIG_NORMAL_TILE_MODE 0 NUMBER + "Only enables normal tile mode.") +set_aom_config_var( + CONFIG_REDUCED_ENCODER_BORDER 0 NUMBER + "Enable reduced border extention for encoder. \ + Disables superres and resize support." + ) +set_aom_config_var(CONFIG_SIZE_LIMIT 0 NUMBER "Limit max decode width/height.") +set_aom_config_var(CONFIG_SPATIAL_RESAMPLING 1 NUMBER "Spatial resampling.") +set_aom_config_var(DECODE_HEIGHT_LIMIT 0 NUMBER "Set limit for decode height.") +set_aom_config_var(DECODE_WIDTH_LIMIT 0 NUMBER "Set limit for decode width.") +set_aom_config_var(CONFIG_GLOBAL_MOTION_SEARCH 1 NUMBER + "Global motion search flag.") # AV1 experiment flags. -set(CONFIG_COLLECT_INTER_MODE_RD_STATS 1 CACHE NUMBER "AV1 experiment flag.") -set(CONFIG_COLLECT_RD_STATS 0 CACHE NUMBER "AV1 experiment flag.") -set(CONFIG_DIST_8X8 1 CACHE NUMBER "AV1 experiment flag.") -set(CONFIG_ENTROPY_STATS 0 CACHE NUMBER "AV1 experiment flag.") -set(CONFIG_FP_MB_STATS 0 CACHE NUMBER "AV1 experiment flag.") -set(CONFIG_INTER_STATS_ONLY 0 CACHE NUMBER "AV1 experiment flag.") -set(CONFIG_RD_DEBUG 0 CACHE NUMBER "AV1 experiment flag.") +set_aom_config_var(CONFIG_COLLECT_INTER_MODE_RD_STATS 1 NUMBER + "AV1 experiment flag.") +set_aom_config_var(CONFIG_COLLECT_RD_STATS 0 NUMBER "AV1 experiment flag.") +set_aom_config_var(CONFIG_DIST_8X8 0 NUMBER "AV1 experiment flag.") +set_aom_config_var(CONFIG_ENTROPY_STATS 0 NUMBER "AV1 experiment flag.") +set_aom_config_var(CONFIG_FP_MB_STATS 0 NUMBER "AV1 experiment flag.") +set_aom_config_var(CONFIG_INTER_STATS_ONLY 0 NUMBER "AV1 experiment flag.") +set_aom_config_var(CONFIG_RD_DEBUG 0 NUMBER "AV1 experiment flag.") +set_aom_config_var(CONFIG_2PASS_PARTITION_SEARCH_LVL 1 NUMBER + "AV1 experiment flag.") +set_aom_config_var(CONFIG_SHARP_SETTINGS 0 NUMBER + "Use sharper encoding settings") + +# +# Variables in this section control optional features of the build system. +# +set_aom_option_var(ENABLE_CCACHE "Enable ccache support." OFF) +set_aom_option_var(ENABLE_DECODE_PERF_TESTS "Enables decoder performance tests" + OFF) +set_aom_option_var(ENABLE_DISTCC "Enable distcc support." OFF) +set_aom_option_var(ENABLE_DOCS + "Enable documentation generation (doxygen required)." ON) +set_aom_option_var(ENABLE_ENCODE_PERF_TESTS "Enables encoder performance tests" + OFF) +set_aom_option_var(ENABLE_EXAMPLES "Enables build of example code." ON) +set_aom_option_var(ENABLE_GOMA "Enable goma support." OFF) +set_aom_option_var( + ENABLE_IDE_TEST_HOSTING + "Enables running tests within IDEs like Visual Studio and Xcode." OFF) +set_aom_option_var(ENABLE_NASM "Use nasm instead of yasm for x86 assembly." OFF) +set_aom_option_var(ENABLE_TESTDATA "Enables unit test data download targets." + ON) +set_aom_option_var(ENABLE_TESTS "Enables unit tests." ON) +set_aom_option_var(ENABLE_TOOLS "Enable applications in tools sub directory." + ON) +set_aom_option_var(ENABLE_WERROR "Converts warnings to errors at compile time." + OFF) + +# ARM assembly/intrinsics flags. +set_aom_option_var(ENABLE_NEON "Enables NEON optimizations on ARM targets." ON) + +# MIPS assembly/intrinsics flags. +set_aom_option_var(ENABLE_DSPR2 "Enables DSPR2 optimizations on MIPS targets." + OFF) +set_aom_option_var(ENABLE_MSA "Enables MSA optimizations on MIPS targets." OFF) + +# VSX intrinsics flags. +set_aom_option_var(ENABLE_VSX "Enables VSX optimizations on PowerPC targets." + ON) + +# x86/x86_64 assembly/intrinsics flags. +set_aom_option_var(ENABLE_MMX + "Enables MMX optimizations on x86/x86_64 targets." ON) +set_aom_option_var(ENABLE_SSE + "Enables SSE optimizations on x86/x86_64 targets." ON) +set_aom_option_var(ENABLE_SSE2 + "Enables SSE2 optimizations on x86/x86_64 targets." ON) +set_aom_option_var(ENABLE_SSE3 + "Enables SSE3 optimizations on x86/x86_64 targets." ON) +set_aom_option_var(ENABLE_SSSE3 + "Enables SSSE3 optimizations on x86/x86_64 targets." ON) +set_aom_option_var(ENABLE_SSE4_1 + "Enables SSE4_1 optimizations on x86/x86_64 targets." ON) +set_aom_option_var(ENABLE_SSE4_2 + "Enables SSE4_2 optimizations on x86/x86_64 targets." ON) +set_aom_option_var(ENABLE_AVX + "Enables AVX optimizations on x86/x86_64 targets." ON) +set_aom_option_var(ENABLE_AVX2 + "Enables AVX2 optimizations on x86/x86_64 targets." ON) diff --git a/third_party/aom/build/cmake/aom_configure.cmake b/third_party/aom/build/cmake/aom_configure.cmake index a12389778..c0c7381e8 100644 --- a/third_party/aom/build/cmake/aom_configure.cmake +++ b/third_party/aom/build/cmake/aom_configure.cmake @@ -20,19 +20,6 @@ include(FindThreads) set(AOM_SUPPORTED_CPU_TARGETS "arm64 armv7 armv7s generic mips32 mips64 ppc x86 x86_64") -# Generate the user config settings. This must occur before include of -# aom_config_defaults.cmake (because it turns every config variable into a cache -# variable with its own help string). -get_cmake_property(cmake_cache_vars CACHE_VARIABLES) -foreach(cache_var ${cmake_cache_vars}) - get_property(cache_var_helpstring CACHE ${cache_var} PROPERTY HELPSTRING) - set(cmdline_helpstring "No help, variable specified on the command line.") - if("${cache_var_helpstring}" STREQUAL "${cmdline_helpstring}") - set(AOM_CMAKE_CONFIG "${AOM_CMAKE_CONFIG} -D${cache_var}=${${cache_var}}") - endif() -endforeach() -string(STRIP "${AOM_CMAKE_CONFIG}" AOM_CMAKE_CONFIG) - include("${AOM_ROOT}/build/cmake/aom_config_defaults.cmake") include("${AOM_ROOT}/build/cmake/aom_experiment_deps.cmake") include("${AOM_ROOT}/build/cmake/aom_optimization.cmake") @@ -40,6 +27,16 @@ include("${AOM_ROOT}/build/cmake/compiler_flags.cmake") include("${AOM_ROOT}/build/cmake/compiler_tests.cmake") include("${AOM_ROOT}/build/cmake/util.cmake") +# Generate the user config settings. +list(APPEND aom_build_vars ${AOM_CONFIG_VARS} ${AOM_OPTION_VARS}) +foreach(cache_var ${aom_build_vars}) + get_property(cache_var_helpstring CACHE ${cache_var} PROPERTY HELPSTRING) + if("${cache_var_helpstring}" STREQUAL "${cmake_cmdline_helpstring}") + set(AOM_CMAKE_CONFIG "${AOM_CMAKE_CONFIG} -D${cache_var}=${${cache_var}}") + endif() +endforeach() +string(STRIP "${AOM_CMAKE_CONFIG}" AOM_CMAKE_CONFIG) + # Detect target CPU. if(NOT AOM_TARGET_CPU) if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64" OR @@ -73,7 +70,9 @@ if(NOT AOM_TARGET_CPU) endif() if(CMAKE_TOOLCHAIN_FILE) # Add toolchain file to config string. - set(toolchain_string "-DCMAKE_TOOLCHAIN_FILE=\\\"${CMAKE_TOOLCHAIN_FILE}\\\"") + file(RELATIVE_PATH toolchain_path "${AOM_CONFIG_DIR}" + "${CMAKE_TOOLCHAIN_FILE}") + set(toolchain_string "-DCMAKE_TOOLCHAIN_FILE=\\\"${toolchain_path}\\\"") set(AOM_CMAKE_CONFIG "${toolchain_string} ${AOM_CMAKE_CONFIG}") else() @@ -81,6 +80,8 @@ else() set(AOM_CMAKE_CONFIG "-DAOM_TARGET_CPU=${AOM_TARGET_CPU} ${AOM_CMAKE_CONFIG}") endif() set(AOM_CMAKE_CONFIG "-G \\\"${CMAKE_GENERATOR}\\\" ${AOM_CMAKE_CONFIG}") +file(RELATIVE_PATH source_path "${AOM_CONFIG_DIR}" "${AOM_ROOT}") +set(AOM_CMAKE_CONFIG "cmake ${source_path} ${AOM_CMAKE_CONFIG}") string(STRIP "${AOM_CMAKE_CONFIG}" AOM_CMAKE_CONFIG) message("--- aom_configure: Detected CPU: ${AOM_TARGET_CPU}") @@ -90,13 +91,13 @@ if("${CMAKE_BUILD_TYPE}" MATCHES "Deb") set(CONFIG_DEBUG 1) endif() -if(NOT MSVC) - if(BUILD_SHARED_LIBS) - set(CONFIG_PIC 1) - set(CONFIG_SHARED 1) - set(CONFIG_STATIC 0) - endif() +if(BUILD_SHARED_LIBS) + set(CONFIG_PIC 1) + set(CONFIG_SHARED 1) + set(CONFIG_STATIC 0) +endif() +if(NOT MSVC) if(CONFIG_PIC) # TODO(tomfinegan): clang needs -pie in CMAKE_EXE_LINKER_FLAGS for this to @@ -109,8 +110,6 @@ if(NOT MSVC) set(AOM_AS_FLAGS ${AOM_AS_FLAGS} -DPIC) endif() endif() -else() - set(CONFIG_MSVS 1) endif() if(NOT "${AOM_SUPPORTED_CPU_TARGETS}" MATCHES "${AOM_TARGET_CPU}") @@ -261,13 +260,15 @@ else() add_compiler_flag_if_supported("-Wlogical-op") add_compiler_flag_if_supported("-Wpointer-arith") add_compiler_flag_if_supported("-Wsign-compare") - add_compiler_flag_if_supported("-Wstack-usage=360000") add_compiler_flag_if_supported("-Wstring-conversion") add_compiler_flag_if_supported("-Wtype-limits") add_compiler_flag_if_supported("-Wuninitialized") add_compiler_flag_if_supported("-Wunused") add_compiler_flag_if_supported("-Wvla") + add_c_flag_if_supported("-Wstack-usage=100000") + add_cxx_flag_if_supported("-Wstack-usage=360000") + # TODO(jzern): this could be added as a cxx flags for test/*.cc only, avoiding # third_party. add_c_flag_if_supported("-Wshorten-64-to-32") @@ -278,6 +279,12 @@ else() # Add -Wundef only for C files to avoid massive gtest warning spam. add_c_flag_if_supported("-Wundef") + # Quiet gcc 6 vs 7 abi warnings: + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77728 + if("${AOM_TARGET_CPU}" MATCHES "arm") + add_cxx_flag_if_supported("-Wno-psabi") + endif() + if(ENABLE_WERROR) add_compiler_flag_if_supported("-Werror") endif() @@ -344,7 +351,7 @@ foreach(NUM RANGE ${AOM_RTCD_CUSTOM_COMMAND_COUNT}) list(GET AOM_RTCD_HEADER_FILE_LIST ${NUM} AOM_RTCD_HEADER_FILE) list(GET AOM_RTCD_SOURCE_FILE_LIST ${NUM} AOM_RTCD_SOURCE_FILE) list(GET AOM_RTCD_SYMBOL_LIST ${NUM} AOM_RTCD_SYMBOL) - execute_process(COMMAND ${PERL_EXECUTABLE} "${AOM_ROOT}/build/make/rtcd.pl" + execute_process(COMMAND ${PERL_EXECUTABLE} "${AOM_ROOT}/build/cmake/rtcd.pl" --arch=${AOM_TARGET_CPU} --sym=${AOM_RTCD_SYMBOL} ${AOM_RTCD_FLAGS} --config=${AOM_CONFIG_DIR}/config/aom_config.h diff --git a/third_party/aom/build/cmake/aom_experiment_deps.cmake b/third_party/aom/build/cmake/aom_experiment_deps.cmake index e2c8102aa..0688704e5 100644 --- a/third_party/aom/build/cmake/aom_experiment_deps.cmake +++ b/third_party/aom/build/cmake/aom_experiment_deps.cmake @@ -25,4 +25,8 @@ macro(fix_experiment_configs) change_config_and_warn(CONFIG_RD_DEBUG 0 CONFIG_JNT_COMP) endif() + if(CONFIG_DIST_8X8 AND CONFIG_MULTITHREAD) + change_config_and_warn(CONFIG_DIST_8X8 0 CONFIG_MULTITHREAD) + endif() + endmacro() diff --git a/third_party/aom/build/cmake/aom_optimization.cmake b/third_party/aom/build/cmake/aom_optimization.cmake index ce3dc0340..be32a3212 100644 --- a/third_party/aom/build/cmake/aom_optimization.cmake +++ b/third_party/aom/build/cmake/aom_optimization.cmake @@ -193,13 +193,13 @@ function(test_nasm) endfunction() # Adds build command for generation of rtcd C source files using -# build/make/rtcd.pl. $config is the input perl file, $output is the output C +# build/cmake/rtcd.pl. $config is the input perl file, $output is the output C # include file, $source is the C source file, and $symbol is used for the symbol # argument passed to rtcd.pl. function(add_rtcd_build_step config output source symbol) add_custom_command(OUTPUT ${output} COMMAND ${PERL_EXECUTABLE} ARGS - "${AOM_ROOT}/build/make/rtcd.pl" + "${AOM_ROOT}/build/cmake/rtcd.pl" --arch=${AOM_TARGET_CPU} --sym=${symbol} ${AOM_RTCD_FLAGS} --config=${AOM_CONFIG_DIR}/config/aom_config.h diff --git a/third_party/aom/build/cmake/exports.cmake b/third_party/aom/build/cmake/exports.cmake index 5abfc9a5f..e0813dc0f 100644 --- a/third_party/aom/build/cmake/exports.cmake +++ b/third_party/aom/build/cmake/exports.cmake @@ -34,7 +34,8 @@ function(setup_exports_target) -DAOM_SYM_FILE="${aom_sym_file}" -DAOM_MSVC=${MSVC} -DAOM_XCODE=${XCODE} -DCONFIG_NAME=$<CONFIG> -DCONFIG_AV1_DECODER=${CONFIG_AV1_DECODER} - -DCONFIG_AV1_ENCODER=${CONFIG_AV1_ENCODER} -P + -DCONFIG_AV1_ENCODER=${CONFIG_AV1_ENCODER} + -DENABLE_TESTS=${ENABLE_TESTS} -P "${AOM_ROOT}/build/cmake/generate_exports.cmake" SOURCES ${AOM_EXPORTS_SOURCES} DEPENDS ${AOM_EXPORTS_SOURCES}) @@ -47,10 +48,12 @@ function(setup_exports_target) set_property(TARGET aom APPEND_STRING PROPERTY LINK_FLAGS "-exported_symbols_list ${aom_sym_file}") elseif(WIN32) - message(FATAL_ERROR "Windows DLL builds not supported yet.") if(NOT MSVC) set_property(TARGET aom APPEND_STRING PROPERTY LINK_FLAGS "-Wl,--version-script ${aom_sym_file}") + else() + set_property(TARGET aom APPEND_STRING + PROPERTY LINK_FLAGS "/DEF:${aom_sym_file}") endif() # TODO(tomfinegan): Sort out the import lib situation and flags for MSVC. diff --git a/third_party/aom/build/cmake/exports_sources.cmake b/third_party/aom/build/cmake/exports_sources.cmake index 48790dbaa..576920e36 100644 --- a/third_party/aom/build/cmake/exports_sources.cmake +++ b/third_party/aom/build/cmake/exports_sources.cmake @@ -13,14 +13,20 @@ if(AOM_BUILD_CMAKE_EXPORTS_SOURCES_CMAKE_) endif() # AOM_BUILD_CMAKE_EXPORTS_SOURCES_CMAKE_ set(AOM_BUILD_CMAKE_EXPORTS_SOURCES_CMAKE_ 1) -set(AOM_EXPORTS_SOURCES "${AOM_ROOT}/aom/exports_com") +list(APPEND AOM_EXPORTS_SOURCES "${AOM_ROOT}/aom/exports_com" + "${AOM_ROOT}/av1/exports_com") if(CONFIG_AV1_DECODER) - set(AOM_EXPORTS_SOURCES ${AOM_EXPORTS_SOURCES} "${AOM_ROOT}/aom/exports_dec" - "${AOM_ROOT}/av1/exports_dec") + list(APPEND AOM_EXPORTS_SOURCES "${AOM_ROOT}/aom/exports_dec" + "${AOM_ROOT}/av1/exports_dec") endif() if(CONFIG_AV1_ENCODER) - set(AOM_EXPORTS_SOURCES ${AOM_EXPORTS_SOURCES} "${AOM_ROOT}/aom/exports_enc" - "${AOM_ROOT}/av1/exports_enc") + list(APPEND AOM_EXPORTS_SOURCES "${AOM_ROOT}/aom/exports_enc" + "${AOM_ROOT}/av1/exports_enc") +endif() + +if(ENABLE_TESTS) + list(APPEND AOM_EXPORTS_SOURCES "${AOM_ROOT}/aom/exports_test" + "${AOM_ROOT}/av1/exports_test") endif() diff --git a/third_party/aom/build/cmake/generate_aom_config_templates.cmake b/third_party/aom/build/cmake/generate_aom_config_templates.cmake index 8fbb4737b..b91c036de 100644 --- a/third_party/aom/build/cmake/generate_aom_config_templates.cmake +++ b/third_party/aom/build/cmake/generate_aom_config_templates.cmake @@ -78,23 +78,24 @@ if(NOT EXISTS "${AOM_DEFAULTS}") endif() include("${AOM_ROOT}/build/cmake/aom_config_defaults.cmake") -get_cmake_property(cmake_cache_vars CACHE_VARIABLES) +list(APPEND aom_build_vars ${AOM_DETECT_VARS} ${AOM_CONFIG_VARS}) +list(SORT aom_build_vars) set(aom_config_h_template "${AOM_CONFIG_DIR}/config/aom_config.h.cmake") file(WRITE "${aom_config_h_template}" ${h_file_header_block}) -foreach(cache_var ${cmake_cache_vars}) - if(NOT "${cache_var}" MATCHES "AOM_CONFIG_DIR\|AOM_ROOT\|^CMAKE_") +foreach(aom_var ${aom_build_vars}) + if(NOT "${aom_var}" STREQUAL "AOM_RTCD_FLAGS") file(APPEND "${aom_config_h_template}" - "\#define ${cache_var} \${${cache_var}}\n") + "\#define ${aom_var} \${${aom_var}}\n") endif() endforeach() -file(APPEND "${aom_config_h_template}" "\#endif /* AOM_CONFIG_H_ */") +file(APPEND "${aom_config_h_template}" "\#endif // AOM_CONFIG_H_") set(aom_asm_config_template "${AOM_CONFIG_DIR}/config/aom_config.asm.cmake") file(WRITE "${aom_asm_config_template}" ${asm_file_header_block}) -foreach(cache_var ${cmake_cache_vars}) - if(NOT "${cache_var}" MATCHES "AOM_CONFIG_DIR\|AOM_ROOT\|^CMAKE_\|INLINE") - file(APPEND "${aom_asm_config_template}" - "${cache_var} equ \${${cache_var}}\n") +foreach(aom_var ${aom_build_vars}) + if(NOT "${aom_var}" STREQUAL "INLINE" AND NOT "${aom_var}" STREQUAL + "AOM_RTCD_FLAGS") + file(APPEND "${aom_asm_config_template}" "${aom_var} equ \${${aom_var}}\n") endif() endforeach() diff --git a/third_party/aom/build/cmake/generate_exports.cmake b/third_party/aom/build/cmake/generate_exports.cmake index 4dce3a671..7ab5aaef8 100644 --- a/third_party/aom/build/cmake/generate_exports.cmake +++ b/third_party/aom/build/cmake/generate_exports.cmake @@ -24,9 +24,7 @@ include("${AOM_ROOT}/build/cmake/exports_sources.cmake") if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin") set(symbol_prefix "_") elseif("${AOM_TARGET_SYSTEM}" MATCHES "Windows\|MSYS" AND AOM_MSVC) - set(symbol_prefix "_") - file(WRITE "${AOM_SYM_FILE}" "LIBRARY libaom INITINSTANCE TERMINSTANCE\n" - "DATA MULTIPLE NONSHARED\n" "EXPORTS\n") + file(WRITE "${AOM_SYM_FILE}" "LIBRARY aom\n" "EXPORTS\n") else() set(symbol_suffix ";") endif() @@ -35,11 +33,10 @@ set(aom_sym_file "${AOM_SYM_FILE}") if("${AOM_TARGET_SYSTEM}" STREQUAL "Darwin") file(REMOVE "${aom_sym_file}") -elseif("${AOM_TARGET_SYSTEM}" MATCHES "Windows\|MSYS") - file(WRITE "${aom_sym_file}" "LIBRARY libaom INITINSTANCE TERMINSTANCE\n" - "DATA MULTIPLE NONSHARED\n" "EXPORTS\n") +elseif("${AOM_TARGET_SYSTEM}" MATCHES "Windows\|MSYS" AND AOM_MSVC) + file(WRITE "${aom_sym_file}" "LIBRARY aom\n" "EXPORTS\n") else() - file(WRITE "${aom_sym_file}" "{ global:\n") + file(WRITE "${aom_sym_file}" "{\nglobal:\n") endif() foreach(export_file ${AOM_EXPORTS_SOURCES}) @@ -50,11 +47,20 @@ endforeach() foreach(exported_symbol ${exported_symbols}) string(STRIP "${exported_symbol}" exported_symbol) + if("${AOM_TARGET_SYSTEM}" MATCHES "Windows\|MSYS" AND AOM_MSVC) + string(SUBSTRING ${exported_symbol} 0 4 export_type) + string(COMPARE EQUAL "${export_type}" "data" is_data) + if(is_data) + set(symbol_suffix " DATA") + else() + set(symbol_suffix "") + endif() + endif() string(REGEX REPLACE "text \|data " "" "exported_symbol" "${exported_symbol}") - set(exported_symbol "${symbol_prefix}${exported_symbol}${symbol_suffix}") + set(exported_symbol " ${symbol_prefix}${exported_symbol}${symbol_suffix}") file(APPEND "${aom_sym_file}" "${exported_symbol}\n") endforeach() if("${aom_sym_file}" MATCHES "ver$") - file(APPEND "${aom_sym_file}" " };") + file(APPEND "${aom_sym_file}" " \nlocal:\n *;\n};") endif() diff --git a/third_party/aom/build/make/ios-Info.plist b/third_party/aom/build/cmake/ios-Info.plist index 300e3e310..300e3e310 100644 --- a/third_party/aom/build/make/ios-Info.plist +++ b/third_party/aom/build/cmake/ios-Info.plist diff --git a/third_party/aom/build/make/iosbuild.sh b/third_party/aom/build/cmake/iosbuild.sh index 167ece200..167ece200 100755 --- a/third_party/aom/build/make/iosbuild.sh +++ b/third_party/aom/build/cmake/iosbuild.sh diff --git a/third_party/aom/build/make/rtcd.pl b/third_party/aom/build/cmake/rtcd.pl index b849a1eba..46e06907c 100755 --- a/third_party/aom/build/make/rtcd.pl +++ b/third_party/aom/build/cmake/rtcd.pl @@ -304,7 +304,7 @@ sub arm() { #include "aom_ports/arm.h" static void setup_rtcd_internal(void) { - int flags = arm_cpu_caps(); + int flags = aom_arm_cpu_caps(); (void)flags; @@ -409,12 +409,13 @@ EOF # &require("c"); +&require(keys %required); if ($opts{arch} eq 'x86') { @ALL_ARCHS = filter(qw/mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 avx avx2/); x86; } elsif ($opts{arch} eq 'x86_64') { @ALL_ARCHS = filter(qw/mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 avx avx2/); - @REQUIRES = filter(keys %required ? keys %required : qw/mmx sse sse2/); + @REQUIRES = filter(qw/mmx sse sse2/); &require(@REQUIRES); x86; } elsif ($opts{arch} eq 'mips32' || $opts{arch} eq 'mips64') { @@ -430,6 +431,7 @@ if ($opts{arch} eq 'x86') { arm; } elsif ($opts{arch} eq 'armv8' || $opts{arch} eq 'arm64' ) { @ALL_ARCHS = filter(qw/neon/); + &require("neon"); arm; } elsif ($opts{arch} eq 'ppc') { @ALL_ARCHS = filter(qw/vsx/); diff --git a/third_party/aom/build/cmake/util.cmake b/third_party/aom/build/cmake/util.cmake index a0c705691..b70ec4013 100644 --- a/third_party/aom/build/cmake/util.cmake +++ b/third_party/aom/build/cmake/util.cmake @@ -13,19 +13,21 @@ if(AOM_BUILD_CMAKE_UTIL_CMAKE_) endif() # AOM_BUILD_CMAKE_UTIL_CMAKE_ set(AOM_BUILD_CMAKE_UTIL_CMAKE_ 1) +# Directory where generated sources will be written. +set(AOM_GEN_SRC_DIR "${AOM_CONFIG_DIR}/gen_src") + # Creates dummy source file in $AOM_CONFIG_DIR named $basename.$extension and # returns the full path to the dummy source file via the $out_file_path # parameter. -function(create_dummy_source_file basename extension out_file_path) - set(dummy_source_file "${AOM_CONFIG_DIR}/${basename}_dummy.${extension}") +macro(create_dummy_source_file basename extension out_file_path) + set(dummy_source_file "${AOM_GEN_SRC_DIR}/${basename}_dummy.${extension}") file( WRITE "${dummy_source_file}" "// Generated file. DO NOT EDIT!\n" "// ${target_name} needs a ${extension} file to force link language, \n" "// or to silence a harmless CMake warning: Ignore me.\n" "void ${target_name}_dummy_function(void) {}\n") - set(${out_file_path} ${dummy_source_file} PARENT_SCOPE) -endfunction() +endmacro() # Convenience function for adding a dummy source file to $target_name using # $extension as the file extension. Wraps create_dummy_source_file(). @@ -86,3 +88,84 @@ function(set_compiler_launcher launcher_flag launcher_name) endif() endfunction() +# Sentinel value used to detect when a variable has been set via the -D argument +# passed to CMake on the command line. +set(cmake_cmdline_helpstring "No help, variable specified on the command line.") + +# Wrapper macro for set() that does some book keeping to help with storage of +# build configuration information. +# +# Sets the default value for variable $name when the value of $name has not +# already been set via the CMake command line. +# +# The names of variables defaulted through this macro are added to +# $AOM_CONFIG_VARS to facilitate build logging and diagnostics. +macro(set_aom_detect_var name value type helpstring) + unset(list_index) + list(FIND AOM_DETECT_VARS ${name} list_index) + if(${list_index} EQUAL -1) + list(APPEND AOM_DETECT_VARS ${name}) + endif() + + # Update the variable only when it does not carry the CMake assigned help + # string for variables specified via the command line. + unset(cache_helpstring) + get_property(cache_helpstring CACHE ${name} PROPERTY HELPSTRING) + if(NOT "${cache_helpstring}" STREQUAL "${cmake_cmdline_helpstring}") + set(${name} ${value} CACHE ${type} "${helpstring}") + mark_as_advanced(${name}) + else() + message( + WARNING + "${name} has been set by CMake, but it may be overridden by the build " + "system during environment detection") + endif() +endmacro() + +# Wrapper macro for set() that does some book keeping to help with storage of +# build configuration information. +# +# Sets the default value for variable $name when the value of $name has not +# already been set via the CMake command line. +# +# The names of variables defaulted through this macro are added to +# $AOM_CONFIG_VARS to facilitate build logging and diagnostics. +macro(set_aom_config_var name value type helpstring) + unset(list_index) + list(FIND AOM_CONFIG_VARS ${name} list_index) + if(${list_index} EQUAL -1) + list(APPEND AOM_CONFIG_VARS ${name}) + endif() + + # Update the variable only when it does not carry the CMake assigned help + # string for variables specified via the command line. + unset(cache_helpstring) + get_property(cache_helpstring CACHE ${name} PROPERTY HELPSTRING) + if(NOT "${cache_helpstring}" STREQUAL "${cmake_cmdline_helpstring}") + set(${name} ${value} CACHE ${type} "${helpstring}") + endif() +endmacro() + +# Wrapper macro for option() that does some book keeping to help with storage of +# build configuration information. +# +# Sets the default value for variable $name when the value of $name has not +# already been set via the CMake command line. +# +# The names of variables defaulted through this macro are added to +# $AOM_OPTION_VARS to facilitate build logging and diagnostics. +macro(set_aom_option_var name helpstring value) + unset(list_index) + list(FIND AOM_OPTION_VARS ${name} list_index) + if(${list_index} EQUAL -1) + list(APPEND AOM_OPTION_VARS ${name}) + endif() + + # Update the variable only when it does not carry the CMake assigned help + # string for variables specified via the command line. + unset(cache_helpstring) + get_property(cache_helpstring CACHE ${name} PROPERTY HELPSTRING) + if(NOT "${cache_helpstring}" STREQUAL "${cmake_cmdline_helpstring}") + option(${name} "${helpstring}" ${value}) + endif() +endmacro() diff --git a/third_party/aom/build/cmake/version.pl b/third_party/aom/build/cmake/version.pl index 7c0608aeb..7d23f2b27 100755 --- a/third_party/aom/build/cmake/version.pl +++ b/third_party/aom/build/cmake/version.pl @@ -14,7 +14,7 @@ use warnings; use 5.010; use Getopt::Long; -my $git_desc; +my $git_desc = ''; my $version_data; my $version_filename; GetOptions('version_data=s' => \$version_data, @@ -68,7 +68,7 @@ if (length($git_desc) > 0) { open(my $version_file, '>', $version_filename) or die("Cannot open $version_filename: $!"); -my $version_packed = "((VERSION_MAJOR<<16)|(VERSION_MINOR<<8)|(VERSION_PATCH))"; +my $version_packed = "((VERSION_MAJOR << 16) | (VERSION_MINOR << 8) | (VERSION_PATCH))"; my $year = (localtime)[5] + 1900; my $lic_block = << "EOF"; /* @@ -91,7 +91,8 @@ $lic_block #define VERSION_MINOR $version_minor #define VERSION_PATCH $version_patch #define VERSION_EXTRA \"$version_extra\" -#define VERSION_PACKED $version_packed +#define VERSION_PACKED \\ + $version_packed #define VERSION_STRING_NOSP \"$git_desc\" #define VERSION_STRING \" $git_desc\" EOF @@ -102,7 +103,8 @@ $lic_block #define VERSION_MINOR $version_minor #define VERSION_PATCH $version_patch #define VERSION_EXTRA \"$version_extra\" -#define VERSION_PACKED $version_packed +#define VERSION_PACKED \\ + $version_packed #define VERSION_STRING_NOSP \"v$version_string\" #define VERSION_STRING \" v$version_string\" EOF diff --git a/third_party/aom/build/make/thumb.pm b/third_party/aom/build/make/thumb.pm deleted file mode 100644 index 0a6629d78..000000000 --- a/third_party/aom/build/make/thumb.pm +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env perl -## -## Copyright (c) 2016, Alliance for Open Media. All rights reserved -## -## This source code is subject to the terms of the BSD 2 Clause License and -## the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License -## was not distributed with this source code in the LICENSE file, you can -## obtain it at www.aomedia.org/license/software. If the Alliance for Open -## Media Patent License 1.0 was not distributed with this source code in the -## PATENTS file, you can obtain it at www.aomedia.org/license/patent. -## - -package thumb; - -sub FixThumbInstructions($$) -{ - my $short_branches = $_[1]; - my $branch_shift_offset = $short_branches ? 1 : 0; - - # Write additions with shifts, such as "add r10, r11, lsl #8", - # in three operand form, "add r10, r10, r11, lsl #8". - s/(add\s+)(r\d+),\s*(r\d+),\s*(lsl #\d+)/$1$2, $2, $3, $4/g; - - # Convert additions with a non-constant shift into a sequence - # with left shift, addition and a right shift (to restore the - # register to the original value). Currently the right shift - # isn't necessary in the code base since the values in these - # registers aren't used, but doing the shift for consistency. - # This converts instructions such as "add r12, r12, r5, lsl r4" - # into the sequence "lsl r5, r4", "add r12, r12, r5", "lsr r5, r4". - s/^(\s*)(add)(\s+)(r\d+),\s*(r\d+),\s*(r\d+),\s*lsl (r\d+)/$1lsl$3$6, $7\n$1$2$3$4, $5, $6\n$1lsr$3$6, $7/g; - - # Convert loads with right shifts in the indexing into a - # sequence of an add, load and sub. This converts - # "ldrb r4, [r9, lr, asr #1]" into "add r9, r9, lr, asr #1", - # "ldrb r9, [r9]", "sub r9, r9, lr, asr #1". - s/^(\s*)(ldrb)(\s+)(r\d+),\s*\[(\w+),\s*(\w+),\s*(asr #\d+)\]/$1add $3$5, $5, $6, $7\n$1$2$3$4, [$5]\n$1sub $3$5, $5, $6, $7/g; - - # Convert register indexing with writeback into a separate add - # instruction. This converts "ldrb r12, [r1, r2]!" into - # "ldrb r12, [r1, r2]", "add r1, r1, r2". - s/^(\s*)(ldrb)(\s+)(r\d+),\s*\[(\w+),\s*(\w+)\]!/$1$2$3$4, [$5, $6]\n$1add $3$5, $6/g; - - # Convert negative register indexing into separate sub/add instructions. - # This converts "ldrne r4, [src, -pstep, lsl #1]" into - # "subne src, src, pstep, lsl #1", "ldrne r4, [src]", - # "addne src, src, pstep, lsl #1". In a couple of cases where - # this is used, it's used for two subsequent load instructions, - # where a hand-written version of it could merge two subsequent - # add and sub instructions. - s/^(\s*)((ldr|str|pld)(ne)?)(\s+)(r\d+,\s*)?\[(\w+), -([^\]]+)\]/$1sub$4$5$7, $7, $8\n$1$2$5$6\[$7\]\n$1add$4$5$7, $7, $8/g; - - # Convert register post indexing to a separate add instruction. - # This converts "ldrneb r9, [r0], r2" into "ldrneb r9, [r0]", - # "addne r0, r0, r2". - s/^(\s*)((ldr|str)(ne)?[bhd]?)(\s+)(\w+),(\s*\w+,)?\s*\[(\w+)\],\s*(\w+)/$1$2$5$6,$7 [$8]\n$1add$4$5$8, $8, $9/g; - - # Convert "mov pc, lr" into "bx lr", since the former only works - # for switching from arm to thumb (and only in armv7), but not - # from thumb to arm. - s/mov(\s*)pc\s*,\s*lr/bx$1lr/g; -} - -1; |