# 'std::shared_mutex' is only available from C++17 onwards: https://github.com/akumuli/Akumuli/issues/383
# PPC arch is not supported by the upstream, so it is experimental.

--- CMakeLists.txt.orig	2020-05-19 18:47:08.000000000 +0545
+++ CMakeLists.txt	2022-08-06 04:23:11.000000000 +0545
@@ -32,6 +32,12 @@
     if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
         set(APP_ARCH "arm64")
     endif()
+    if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc")
+        set(APP_ARCH "ppc")
+    endif()
+    if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64")
+        set(APP_ARCH "ppc64")
+    endif()
     if("${APP_ARCH}" STREQUAL "")
         message(FATAL_ERROR  "Architecture not supported")
     endif()
@@ -49,13 +55,13 @@
 
 # Debug flags
 set(CMAKE_CXX_FLAGS_DEBUG
- "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG -Wall -Werror -ggdb -fsanitize=address -std=c++11")
+ "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG -Wall -Werror -ggdb -fsanitize=address -std=c++17")
 set(CMAKE_C_FLAGS_DEBUG
  "${CMAKE_C_FLAGS_DEBUG} -DDEBUG -Wall -Werror -ggdb -fsanitize=address -std=c99")
 
 # Generic release flags
 set(CMAKE_CXX_FLAGS_RELEASEGEN
- "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -mtune=generic -O3 -std=c++11")
+ "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -mtune=generic -O3 -std=c++17")
 set(CMAKE_C_FLAGS_RELEASEGEN
  "${CMAKE_C_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -mtune=generic -O3 -std=c99")
 
@@ -63,24 +69,40 @@
 if("${APP_ARCH}" STREQUAL "amd64")
     # Use this flags only on amd64
     set(CMAKE_CXX_FLAGS_RELEASE 
-     "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -march=corei7-avx -O3 -std=c++11")
+     "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -march=corei7-avx -O3 -std=c++17")
     set(CMAKE_C_FLAGS_RELEASE
      "${CMAKE_C_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -march=corei7-avx -O3 -std=c99")
     message("amd64 CXXFLAGS ${CMAKE_CXX_FLAGS_RELEASE}")
 elseif("${APP_ARCH}" STREQUAL "i386")
     # Use this flags only on amd64
     set(CMAKE_CXX_FLAGS_RELEASE 
-     "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -march=corei7-avx -O3 -std=c++11")
+     "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -march=corei7-avx -O3 -std=c++17")
     set(CMAKE_C_FLAGS_RELEASE
      "${CMAKE_C_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -march=corei7-avx -O3 -std=c99")
     add_definitions(-DDISABLE_X64)
     add_definitions(-DDISABLEAVX)
     add_definitions(-DDISABLE_EMBEDDED_ASM)
     message("i386 CXXFLAGS ${CMAKE_CXX_FLAGS_RELEASE}")
+elseif("${APP_ARCH}" STREQUAL "ppc")
+    # This work on ppc
+    set(CMAKE_CXX_FLAGS_RELEASE
+     "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c++17")
+    set(CMAKE_C_FLAGS_RELEASE
+     "${CMAKE_C_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c99")
+    add_definitions(-DDISABLE_EMBEDDED_ASM)
+    message("ppc CXXFLAGS ${CMAKE_CXX_FLAGS_RELEASE}")
+elseif("${APP_ARCH}" STREQUAL "ppc64")
+    # This work on ppc64
+    set(CMAKE_CXX_FLAGS_RELEASE
+     "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c++17")
+    set(CMAKE_C_FLAGS_RELEASE
+     "${CMAKE_C_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c99")
+    add_definitions(-DDISABLE_EMBEDDED_ASM)
+    message("ppc64 CXXFLAGS ${CMAKE_CXX_FLAGS_RELEASE}")
 elseif("${APP_ARCH}" STREQUAL "arm64")
     # This work on arm
     set(CMAKE_CXX_FLAGS_RELEASE
-     "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c++11")
+     "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c++17")
     set(CMAKE_C_FLAGS_RELEASE
      "${CMAKE_C_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c99")
     add_definitions(-DDISABLE_EMBEDDED_ASM)
@@ -88,7 +110,7 @@
 elseif("${APP_ARCH}" STREQUAL "arm")
     # This work on arm
     set(CMAKE_CXX_FLAGS_RELEASE
-     "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c++11")
+     "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c++17")
     set(CMAKE_C_FLAGS_RELEASE
      "${CMAKE_C_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c99")
     add_definitions(-DDISABLE_EMBEDDED_ASM)
@@ -96,7 +118,7 @@
 else()
     # This work on arm64
     set(CMAKE_CXX_FLAGS_RELEASE
-     "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c++11")
+     "${CMAKE_CXX_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c++17")
     set(CMAKE_C_FLAGS_RELEASE
      "${CMAKE_C_FLAGS_RELEASE} -Wall -Werror -ffast-math -funroll-loops -O3 -std=c99")
     message("unknown CXXFLAGS ${CMAKE_CXX_FLAGS_RELEASE}")
