From cebe492bd691879970c4a75da2c64d7ec4bdee91 Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Sun, 12 Mar 2023 22:52:54 -0400
Subject: [PATCH] Fix up linux build flags

---
 indra/cmake/00-Common.cmake | 35 +++++++++++++++++++----------------
 1 file changed, 19 insertions(+), 16 deletions(-)

diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index ac9e5ce7fad..2980c88f14f 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -49,11 +49,10 @@ set(CMAKE_CONFIGURATION_TYPES "RelWithDebInfo;Release;Debug" CACHE STRING
     "Supported build types." FORCE)
 
 # SIMD config
-option(USE_SSE41 "Enable usage of the SSE4.1 instruction set" OFF)
 option(USE_SSE42 "Enable usage of the SSE4.2 instruction set" ON)
 option(USE_AVX "Enable usage of the AVX instruction set" OFF)
 option(USE_AVX2 "Enable usage of the AVX2 instruction set" OFF)
-if((USE_SSE41 AND USE_AVX) OR (USE_SSE41 AND USE_AVX AND USE_AVX2) OR (USE_AVX AND USE_AVX2))
+if((USE_SSE42 AND USE_AVX) OR (USE_SSE42 AND USE_AVX AND USE_AVX2) OR (USE_AVX AND USE_AVX2))
   message(FATAL_ERROR "Usage of multiple SIMD flags is unsupported")
 endif()
 
@@ -149,7 +148,9 @@ if (WINDOWS)
       "/GS /W3 /c /Zc:__cplusplus /Zc:forScope /Zc:rvalueCast /Zc:strictStrings /Zc:ternary /nologo"
       )
 
-  if (USE_AVX2)
+  if (ADDRESS_SIZE EQUAL 32)
+    set(GLOBAL_CXX_FLAGS "${GLOBAL_CXX_FLAGS} /arch:SSE2")
+  elseif (USE_AVX2)
     set(GLOBAL_CXX_FLAGS "${GLOBAL_CXX_FLAGS} /arch:AVX2")
     add_definitions(/DAL_AVX2=1 /DAL_AVX=1)
   elseif (USE_AVX)
@@ -157,10 +158,8 @@ if (WINDOWS)
     add_definitions(/DAL_AVX=1)
   elseif (USE_SSE42)
     add_definitions(/D__SSE3__=1 /D__SSSE3__=1 /D__SSE4__=1 /D__SSE4_1__=1 /D__SSE4_2__=1)
-  elseif (USE_SSE41)
+  else()
     add_definitions(/D__SSE3__=1 /D__SSSE3__=1 /D__SSE4__=1 /D__SSE4_1__=1)
-  elseif (ADDRESS_SIZE EQUAL 32)
-    set(GLOBAL_CXX_FLAGS "${GLOBAL_CXX_FLAGS} /arch:SSE2")
   endif ()
 
   if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
@@ -216,13 +215,21 @@ if (WINDOWS)
   add_definitions("/DWINVER=${WINVER}" "/D_WIN32_WINNT=${WINVER}")
 endif (WINDOWS)
 
-
 if (LINUX)
   set(CMAKE_SKIP_BUILD_RPATH TRUE)
 
   set(ALCHEMY_GLOBAL_DEFS "-DLL_LINUX=1 -DAPPID=secondlife -DLL_IGNORE_SIGCHLD -D_REENTRANT -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGSEAL_ENABLE -DGTK_DISABLE_SINGLE_INCLUDES")
   set(ALCHEMY_GLOBAL_CFLAGS "-fvisibility=hidden -fexceptions -fno-math-errno -fno-strict-aliasing -fsigned-char -g -gz -pthread")
-  set(ALCHEMY_GLOBAL_CFLAGS "${ALCHEMY_GLOBAL_CFLAGS} -mfpmath=sse -msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2 -mcx16 -mpopcnt -mpclmul -maes -mxsave -mxsaveopt")
+
+  if (USE_AVX2)
+    set(ALCHEMY_GLOBAL_CFLAGS "${ALCHEMY_GLOBAL_CFLAGS} -mavx2")
+  elseif (USE_AVX)
+    set(ALCHEMY_GLOBAL_CFLAGS "${ALCHEMY_GLOBAL_CFLAGS} -mavx")
+  elseif (USE_SSE42)
+    set(ALCHEMY_GLOBAL_CFLAGS "${ALCHEMY_GLOBAL_CFLAGS} -mfpmath=sse -msse -msse2 -msse3 -mssse3 -msse4 -msse4.1 -msse4.2")
+  else()
+    set(ALCHEMY_GLOBAL_CFLAGS "${ALCHEMY_GLOBAL_CFLAGS} -mfpmath=sse -msse -msse2 -msse3 -mssse3 -msse4 -msse4.1")
+  endif ()
 
   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${ALCHEMY_GLOBAL_DEFS} ${ALCHEMY_GLOBAL_CFLAGS}")
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ALCHEMY_GLOBAL_DEFS} ${ALCHEMY_GLOBAL_CFLAGS}")
@@ -263,16 +270,12 @@ if (LINUX)
   endif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
 
   CHECK_CXX_COMPILER_FLAG(-Og HAS_DEBUG_OPTIMIZATION)
-  CHECK_CXX_COMPILER_FLAG(-fstack-protector-strong HAS_STRONG_STACK_PROTECTOR)
   CHECK_CXX_COMPILER_FLAG(-fstack-protector HAS_STACK_PROTECTOR)
   if (${CMAKE_BUILD_TYPE} STREQUAL "Release")
-    if (HAS_STRONG_STACK_PROTECTOR)
-      set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong")
-      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong")
-    elseif (HAS_STACK_PROTECTOR)
+    if (HAS_STACK_PROTECTOR)
       set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector")
       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector")
-    endif (HAS_STRONG_STACK_PROTECTOR)
+    endif ()
     set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2")
   endif (${CMAKE_BUILD_TYPE} STREQUAL "Release")
 
@@ -292,7 +295,7 @@ if (LINUX)
     set(CMAKE_CXX_FLAGS_RELEASE "-O3 -ffast-math ${CMAKE_CXX_FLAGS_RELEASE}")
   endif ()
 
-  if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
+  if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND USE_LTO)
     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fuse-ld=lld")
     set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=lld")
   endif()
@@ -322,7 +325,7 @@ endif (DARWIN)
 
 if (LINUX OR DARWIN)
   if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-    set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-ignored-qualifiers -Wno-unused-function -Wnon-virtual-dtor")
+    set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-ignored-qualifiers -Wno-unused-function")
   elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
     set(GCC_WARNINGS "-Wall -Wno-sign-compare -Wno-trigraphs -Wno-unused-local-typedef -Wno-unknown-warning-option")
   endif()
-- 
GitLab