<pre style='margin:0'>
ra1nb0w (ra1nb0w) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/427cef04c73e26de03c96764e7737c19677589d8">https://github.com/macports/macports-ports/commit/427cef04c73e26de03c96764e7737c19677589d8</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 427cef04c73e26de03c96764e7737c19677589d8
</span>Author: barracuda156 <vital.had@gmail.com>
AuthorDate: Mon Jul 17 10:49:48 2023 +0800

<span style='display:block; white-space:pre;color:#404040;'>    lpcnetfreedv: unbreak build on PPC, support optimizations
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Fixes: https://trac.macports.org/ticket/67756
</span>---
 audio/lpcnetfreedv/Portfile                        |  12 ++
 ...k-build-when-DISABLE_CPU_OPTIMIZATION-ON-.patch |  28 +++
 .../0002-Add-optimization-opts-for-PowerPC.patch   | 230 +++++++++++++++++++++
 3 files changed, 270 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/audio/lpcnetfreedv/Portfile b/audio/lpcnetfreedv/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index a49605bc4d8..60c9b88f45c 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/audio/lpcnetfreedv/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/audio/lpcnetfreedv/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -22,20 +22,32 @@ checksums           rmd160  f7cba418c62f1542ec303c5af501efda46688b09 \
</span> revision            0
 epoch               2
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# lpcnet_freedv_internal.h:3: error: redefinition of typedef ‘LPCNetState’
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.blacklist-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    *gcc-4.*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # disable AVX and AVX2 for compatibility
 configure.args-append \
     -DDISABLE_CPU_OPTIMIZATION=ON
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/drowe67/LPCNet/pull/57
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append   0001-Do-not-break-build-when-DISABLE_CPU_OPTIMIZATION-ON-.patch \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    0002-Add-optimization-opts-for-PowerPC.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> # enable optimization on all supported hardwares
 if {${universal_possible} && [variant_isset universal]} {
     set merger_configure_args(x86_64) -DAVX=ON
     set merger_configure_cflags(i386) [list -DSSE=ON -mssse3 -msse4.1]
     set merger_configure_cflags(arm64) -DNEON=ON
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    set merger_configure_cflags(ppc) -DPPC_OPTS=ON
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    set merger_configure_cflags(ppc64) -DPPC_OPTS=ON
</span> } else {
     switch -- ${configure.build_arch} {
         x86_64 { configure.args-append -DAVX=ON }
         i386 { configure.cflags-append -DSSE=ON -mssse3 -msse4.1 }
         arm64 { configure.cflags-append -DNEON=ON }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        ppc { configure.cflags-append -DPPC_OPTS=ON }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ppc64 { configure.cflags-append -DPPC_OPTS=ON }
</span>     }
 }
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/audio/lpcnetfreedv/files/0001-Do-not-break-build-when-DISABLE_CPU_OPTIMIZATION-ON-.patch b/audio/lpcnetfreedv/files/0001-Do-not-break-build-when-DISABLE_CPU_OPTIMIZATION-ON-.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..a2431ae9a62
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/audio/lpcnetfreedv/files/0001-Do-not-break-build-when-DISABLE_CPU_OPTIMIZATION-ON-.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,28 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 317d69cbf1ce42709046f4c1097f49764a29998e Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: barracuda156 <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Mon, 17 Jul 2023 07:15:24 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 1/2] Do not break build when DISABLE_CPU_OPTIMIZATION=ON is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CMakeLists.txt | 7 -------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 file changed, 7 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git CMakeLists.txt CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 1600871..ecbd37e 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -136,13 +136,6 @@ if(NOT DISABLE_CPU_OPTIMIZATION)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         set(SSE_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         set(NEON_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    # Presume all optimizations are available as the user is likely setting them themselves
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    # (e.g. cross-compiling)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    set(AVX2_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    set(AVX_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    set(SSE_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    set(NEON_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set(LPCNET_C_PROC_FLAGS "")
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/audio/lpcnetfreedv/files/0002-Add-optimization-opts-for-PowerPC.patch b/audio/lpcnetfreedv/files/0002-Add-optimization-opts-for-PowerPC.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..7ce7fd578a1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/audio/lpcnetfreedv/files/0002-Add-optimization-opts-for-PowerPC.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,230 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From 133a5a5a8cb1b7a4958edd4a5bc8a6d7b6c6649b Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: barracuda156 <vital.had@gmail.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Mon, 17 Jul 2023 09:15:17 +0800
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH 2/2] Add optimization opts for PowerPC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ CMakeLists.txt     | 132 +++++++++++++++++++++++++++++----------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ src/CMakeLists.txt |  30 ++++++-----
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 files changed, 103 insertions(+), 59 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git CMakeLists.txt CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index ecbd37e..92f6e15 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -2,7 +2,12 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #          flags manually on cmd line
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #       2/ Should we standardise on just AVX?  As machine we run on
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #          may be different to machine we build on
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if(APPLE AND CMAKE_OSX_ARCHITECTURES MATCHES "ppc|ppc64")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    set(CMAKE_OSX_DEPLOYMENT_TARGET "10.5" CACHE STRING "Minimum OS X deployment version")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cmake_minimum_required(VERSION 3.0)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -14,10 +19,23 @@ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ project(LPCNet C)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ option(DISABLE_CPU_OPTIMIZATION "Disable CPU optimization discovery." OFF)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ option(AVX2 "Enable AVX2 CPU optimizations." OFF)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-option(AVX "Enable AVX CPU optimizations." ON)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-option(SSE "Enable SSE CPU optimizations." ON)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-option(NEON "Enable NEON CPU optimizations for RPi." ON)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if(DISABLE_CPU_OPTIMIZATION)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    option(AVX "Enable AVX CPU optimizations." OFF)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    option(SSE "Enable SSE CPU optimizations." OFF)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    option(NEON "Enable NEON CPU optimizations for RPi." OFF)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    option(PPC_OPTS "Enable PowerPC CPU optimizations." OFF)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if(CMAKE_SYSTEM_PROCESSOR MATCHES "powerpc")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        option(PPC_OPTS "Enable PowerPC CPU optimizations." ON)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        option(AVX "Enable AVX CPU optimizations." ON)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        option(SSE "Enable SSE CPU optimizations." ON)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        option(NEON "Enable NEON CPU optimizations for RPi." ON)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ include(GNUInstallDirs)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mark_as_advanced(CLEAR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -26,9 +44,13 @@ mark_as_advanced(CLEAR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     CMAKE_INSTALL_LIBDIR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# Build universal ARM64 and x86_64 binaries on Mac.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++# Build universal ARM64 and x86_64 binaries on Mac, unless on PowerPC.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(BUILD_OSX_UNIVERSAL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if(CMAKE_SYSTEM_PROCESSOR MATCHES "powerpc")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    set(CMAKE_OSX_ARCHITECTURES "ppc;ppc64")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ endif(BUILD_OSX_UNIVERSAL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -93,36 +115,46 @@ message(STATUS "Host system arch is: ${CMAKE_SYSTEM_PROCESSOR}")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Detection of available CPU optimizations
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(NOT DISABLE_CPU_OPTIMIZATION)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     if(UNIX AND NOT APPLE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        message(STATUS "Looking for available CPU optimizations on Linux/BSD system...")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        execute_process(COMMAND grep -c "avx2" /proc/cpuinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            OUTPUT_VARIABLE AVX2_PRESENT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        execute_process(COMMAND grep -c "avx " /proc/cpuinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            OUTPUT_VARIABLE AVX_PRESENT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        execute_process(COMMAND grep -c "sse4_1 " /proc/cpuinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            OUTPUT_VARIABLE SSE_PRESENT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        execute_process(COMMAND grep -c "neon" /proc/cpuinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            OUTPUT_VARIABLE NEON_PRESENT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    elseif(APPLE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if(BUILD_OSX_UNIVERSAL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            # Presume AVX and SSE are enabled on the x86 side. (AVX2 is not guaranteed depending
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            # on model.) The ARM side will auto-enable NEON optimizations by virtue of being aarch64.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            set(AVX_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            set(SSE_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            set(NEON_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if(CMAKE_SYSTEM_PROCESSOR MATCHES "powerpc")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            message(STATUS "PowerPC processor detected.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            set(PPC_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            # Under OSX we need to look through a few sysctl entries to determine what our CPU supports.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            message(STATUS "Looking for available CPU optimizations on an OSX system...")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            execute_process(COMMAND sysctl -a COMMAND grep machdep.cpu.leaf7_features COMMAND grep -c AVX2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            message(STATUS "Looking for available CPU optimizations on Linux/BSD system...")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            execute_process(COMMAND grep -c "avx2" /proc/cpuinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 OUTPUT_VARIABLE AVX2_PRESENT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            execute_process(COMMAND sysctl -a COMMAND grep machdep.cpu.features COMMAND grep -c AVX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            execute_process(COMMAND grep -c "avx " /proc/cpuinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 OUTPUT_VARIABLE AVX_PRESENT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            execute_process(COMMAND sysctl -a COMMAND grep machdep.cpu.features COMMAND grep -c SSE4.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            execute_process(COMMAND grep -c "sse4_1 " /proc/cpuinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 OUTPUT_VARIABLE SSE_PRESENT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            execute_process(COMMAND grep -c "neon" /proc/cpuinfo
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                OUTPUT_VARIABLE NEON_PRESENT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    elseif(APPLE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if(CMAKE_SYSTEM_PROCESSOR MATCHES "powerpc")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            message(STATUS "PowerPC processor detected.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            set(PPC_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            if(BUILD_OSX_UNIVERSAL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                # Presume AVX and SSE are enabled on the x86 side. (AVX2 is not guaranteed depending
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                # on model.) The ARM side will auto-enable NEON optimizations by virtue of being aarch64.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                set(AVX_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                set(SSE_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                set(NEON_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                # Under OSX we need to look through a few sysctl entries to determine what our CPU supports.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                message(STATUS "Looking for available CPU optimizations on an OSX system...")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                execute_process(COMMAND sysctl -a COMMAND grep machdep.cpu.leaf7_features COMMAND grep -c AVX2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    OUTPUT_VARIABLE AVX2_PRESENT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                execute_process(COMMAND sysctl -a COMMAND grep machdep.cpu.features COMMAND grep -c AVX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    OUTPUT_VARIABLE AVX_PRESENT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                execute_process(COMMAND sysctl -a COMMAND grep machdep.cpu.features COMMAND grep -c SSE4.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    OUTPUT_VARIABLE SSE_PRESENT)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            # Unlike with the above, NEON *is* guaranteed if on ARM as there were never any ARM32 Macs 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            # available. We don't need any specific compiler flags for this, though.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            set(NEON_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        endif(BUILD_OSX_UNIVERSAL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                # Unlike with the above, NEON *is* guaranteed if on ARM as there were never any ARM32 Macs 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                # available. We don't need any specific compiler flags for this, though.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                set(NEON_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            endif(BUILD_OSX_UNIVERSAL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     elseif(WIN32)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         message(STATUS "No detection capability on Windows, assuming AVX is available.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         set(AVX_PRESENT TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -140,21 +172,29 @@ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set(LPCNET_C_PROC_FLAGS "")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-if(${AVX2} AND (${AVX2_PRESENT} OR ${AVX2_PRESENT} GREATER 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    message(STATUS "avx2 processor flags found or enabled.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    set(LPCNET_C_PROC_FLAGS -mavx2 -mfma)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-elseif(${AVX} AND (${AVX_PRESENT} OR ${AVX_PRESENT} GREATER 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# AVX2 machines will also match on AVX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    message(STATUS "avx processor flags found or enabled.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    set(LPCNET_C_PROC_FLAGS -mavx)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-elseif(${SSE} AND (${SSE_PRESENT} OR ${SSE_PRESENT} GREATER 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-# AVX and AVX2 machines will also match on SSE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    message(STATUS "sse processor flags found or enabled.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    set(LPCNET_C_PROC_FLAGS -msse4.1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-elseif(${NEON} AND (${NEON_PRESENT} OR ${NEON_PRESENT} GREATER 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    # RPi / ARM 32bit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    message(STATUS "neon processor flags found or enabled.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    set(LPCNET_C_PROC_FLAGS -mfpu=neon -march=armv8-a -mtune=cortex-a53)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if(CMAKE_SYSTEM_PROCESSOR MATCHES "powerpc")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if(${PPC_OPTS} AND (${PPC_PRESENT} OR ${PPC_PRESENT} GREATER 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        # PowerPC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        message(STATUS "PowerPC processor flags found or enabled.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        set(LPCNET_C_PROC_FLAGS "-mcpu=native -mtune=native")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if(${AVX2} AND (${AVX2_PRESENT} OR ${AVX2_PRESENT} GREATER 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        message(STATUS "avx2 processor flags found or enabled.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        set(LPCNET_C_PROC_FLAGS -mavx2 -mfma)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    elseif(${AVX} AND (${AVX_PRESENT} OR ${AVX_PRESENT} GREATER 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        # AVX2 machines will also match on AVX
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        message(STATUS "avx processor flags found or enabled.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        set(LPCNET_C_PROC_FLAGS -mavx)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    elseif(${SSE} AND (${SSE_PRESENT} OR ${SSE_PRESENT} GREATER 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        # AVX and AVX2 machines will also match on SSE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        message(STATUS "sse processor flags found or enabled.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        set(LPCNET_C_PROC_FLAGS -msse4.1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    elseif(${NEON} AND (${NEON_PRESENT} OR ${NEON_PRESENT} GREATER 0))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        # RPi / ARM 32bit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        message(STATUS "neon processor flags found or enabled.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        set(LPCNET_C_PROC_FLAGS -mfpu=neon -march=armv8-a -mtune=cortex-a53)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # grab latest NN model (or substitute your own)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git src/CMakeLists.txt src/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 7dcb181..72f3765 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -72,20 +72,24 @@ target_link_libraries(dump_data lpcnetfreedv m)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_executable(test_lpcnet test_lpcnet.c nnet_rw.c)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ target_link_libraries(test_lpcnet lpcnetfreedv m)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-if(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    (${SSE} AND (${SSE_PRESENT} OR ${SSE_PRESENT} GREATER 0)) OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    (${AVX} AND (${AVX_PRESENT} OR ${AVX_PRESENT} GREATER 0)) OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    (${AVX2} AND (${AVX2_PRESENT} OR ${AVX2_PRESENT} GREATER 0)) OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    (${NEON} AND (${NEON_PRESENT} OR ${NEON_PRESENT} GREATER 0)) OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    add_executable(test_vec test_vec.c)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    target_link_libraries(test_vec m)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    if(LPCNET_C_PROC_FLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        set_source_files_properties(test_vec.c PROPERTIES COMPILE_FLAGS ${LPCNET_C_PROC_FLAGS})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    endif(LPCNET_C_PROC_FLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if(CMAKE_SYSTEM_PROCESSOR MATCHES "powerpc")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    message(WARNING "Tests not implemented for PowerPC, not building test_vec.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    message(WARNING "No SSE/AVX/AVX2 CPU flags identified, not building test_vec.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        (${SSE} AND (${SSE_PRESENT} OR ${SSE_PRESENT} GREATER 0)) OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        (${AVX} AND (${AVX_PRESENT} OR ${AVX_PRESENT} GREATER 0)) OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        (${AVX2} AND (${AVX2_PRESENT} OR ${AVX2_PRESENT} GREATER 0)) OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        (${NEON} AND (${NEON_PRESENT} OR ${NEON_PRESENT} GREATER 0)) OR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        add_executable(test_vec test_vec.c)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        target_link_libraries(test_vec m)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        if(LPCNET_C_PROC_FLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            set_source_files_properties(test_vec.c PROPERTIES COMPILE_FLAGS ${LPCNET_C_PROC_FLAGS})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        endif(LPCNET_C_PROC_FLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        message(WARNING "No SSE/AVX/AVX2 CPU flags identified, not building test_vec.")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_executable(quant_feat quant_feat.c)
</span></pre><pre style='margin:0'>

</pre>