aports

Custom Alpine Linux aports

git clone git://git.lin.moe/aports.git

  1Source: https://github.com/intel/gmmlib/pull/133
  2
  3From b406bb2f34d7f59a2b406e9911cb353140363d0a Mon Sep 17 00:00:00 2001
  4From: Jianfeng Liu <liujianfeng1994@gmail.com>
  5Date: Thu, 5 Jun 2025 09:38:36 +0800
  6Subject: [PATCH 1/2] Split common flags of GMMLIB_COMPILER_FLAGS_COMMON for
  7 multi architectures
  8
  9---
 10 Source/GmmLib/Linux.cmake | 84 ++++++++++++---------------------------
 11 1 file changed, 26 insertions(+), 58 deletions(-)
 12
 13diff --git a/Source/GmmLib/Linux.cmake b/Source/GmmLib/Linux.cmake
 14index 87b74d89..f9398e65 100644
 15--- a/Source/GmmLib/Linux.cmake
 16+++ b/Source/GmmLib/Linux.cmake
 17@@ -19,46 +19,8 @@
 18 # OTHER DEALINGS IN THE SOFTWARE.
 19 
 20 #this file should contain only compiler and linker flags
 21-if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^aarch")
 22-    SET (GMMLIB_COMPILER_FLAGS_COMMON
 23-    #general warnings
 24-    #-Wall
 25-    -Winit-self
 26-    -Winvalid-pch
 27-    -Wpointer-arith
 28-    -Wno-unused
 29-    -Wno-unknown-pragmas
 30-    -Wno-comments
 31-    -Wno-narrowing
 32-    -Wno-overflow
 33-    -Wno-parentheses
 34-    -Wno-missing-braces
 35-    -Wno-sign-compare
 36-    -Werror=address
 37-    -Werror=format-security
 38-    -Werror=return-type
 39 
 40-    # General optimization options
 41-    -march=${GMMLIB_MARCH}
 42-    -finline-functions
 43-    -fno-short-enums
 44-    -Wa,--noexecstack
 45-    -fno-strict-aliasing
 46-    # Common defines
 47-    -DUSE_NEON
 48-    # Other common flags
 49-    -fstack-protector
 50-    -fdata-sections
 51-    -ffunction-sections
 52-    -fmessage-length=0
 53-    -fvisibility=hidden
 54-    -fPIC
 55-    -g
 56-    )
 57-else()
 58-    SET (GMMLIB_COMPILER_FLAGS_COMMON
 59-    #general warnings
 60-    -Wall
 61+SET (GMMLIB_COMPILER_FLAGS_COMMON
 62     -Winit-self
 63     -Winvalid-pch
 64     -Wpointer-arith
 65@@ -70,32 +32,16 @@ else()
 66     -Wno-parentheses
 67     -Wno-missing-braces
 68     -Wno-sign-compare
 69-    -Wno-enum-compare
 70     -Werror=address
 71     -Werror=format-security
 72     -Werror=return-type
 73 
 74     # General optimization options
 75     -march=${GMMLIB_MARCH}
 76-    -mpopcnt
 77-    -msse
 78-    -msse2
 79-    -msse3
 80-    -mssse3
 81-    -msse4
 82-    -msse4.1
 83-    -msse4.2
 84-    -mfpmath=sse
 85     -finline-functions
 86     -fno-short-enums
 87     -Wa,--noexecstack
 88     -fno-strict-aliasing
 89-    # Common defines
 90-    -DUSE_MMX
 91-    -DUSE_SSE
 92-    -DUSE_SSE2
 93-    -DUSE_SSE3
 94-    -DUSE_SSSE3
 95     # Other common flags
 96     -fstack-protector
 97     -fdata-sections
 98@@ -104,9 +50,31 @@ else()
 99     -fvisibility=hidden
100     -fPIC
101     -g
102-    # -m32 or -m64
103-    -m${GMMLIB_ARCH}
104-    )
105+)
106+
107+if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^aarch")
108+    list(APPEND GMMLIB_COMPILER_FLAGS_COMMON "-DUSE_NEON")
109+else()
110+    list (APPEND GMMLIB_COMPILER_FLAGS_COMMON
111+        -Wall
112+        -Wno-enum-compare
113+        -mpopcnt
114+        -msse
115+        -msse2
116+        -msse3
117+        -mssse3
118+        -msse4
119+        -msse4.1
120+        -msse4.2
121+        -mfpmath=sse
122+        -DUSE_MMX
123+        -DUSE_SSE
124+        -DUSE_SSE2
125+        -DUSE_SSE3
126+        -DUSE_SSSE3
127+        # -m32 or -m64
128+        -m${GMMLIB_ARCH}
129+        )
130 endif()
131 
132 if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
133
134From e8556a5be0bf054aa712d78eb1b34cd05adb4ca7 Mon Sep 17 00:00:00 2001
135From: Jianfeng Liu <liujianfeng1994@gmail.com>
136Date: Thu, 5 Jun 2025 09:48:24 +0800
137Subject: [PATCH 2/2] add loongarch64 build support
138
139---
140 Source/GmmLib/CMakeLists.txt                       | 14 ++++++++++++++
141 Source/GmmLib/Linux.cmake                          |  5 +++++
142 .../GmmLib/Utility/CpuSwizzleBlt/CpuSwizzleBlt.c   | 12 +++++++++++-
143 3 files changed, 30 insertions(+), 1 deletion(-)
144
145diff --git a/Source/GmmLib/CMakeLists.txt b/Source/GmmLib/CMakeLists.txt
146index 48d054ce..29a1e275 100644
147--- a/Source/GmmLib/CMakeLists.txt
148+++ b/Source/GmmLib/CMakeLists.txt
149@@ -167,6 +167,8 @@ endif()
150 
151 if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^aarch")
152     set(GMMLIB_MARCH "armv8-a+fp+simd")
153+elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^loongarch")
154+    set(GMMLIB_MARCH "la464")
155 elseif("${GMMLIB_MARCH}" STREQUAL "")
156     set(GMMLIB_MARCH "corei7")
157 endif()
158@@ -443,6 +445,18 @@ include_directories(BEFORE ${PROJECT_SOURCE_DIR})
159 
160 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^aarch")
161     include_directories(${GFX_DEVELOPMENT_DIR}/third_party/sse2neon)
162+elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "^loongarch")
163+    find_path(SIMDE_INCLUDE_DIR
164+        NAMES simde/simde-common.h  # A key SIMDE header
165+        PATHS /usr/include /usr/local/include  # Default paths
166+        DOC "Path to SIMDE headers"
167+    )
168+    if(SIMDE_INCLUDE_DIR)
169+        include_directories(${SIMDE_INCLUDE_DIR})
170+        message(STATUS "Found SIMDE: ${SIMDE_INCLUDE_DIR}")
171+    else()
172+        message(FATAL_ERROR "SIMDE not found. Install it or set SIMDE_INCLUDE_DIR manually.")
173+    endif()
174 endif()
175 
176 set(headers
177diff --git a/Source/GmmLib/Linux.cmake b/Source/GmmLib/Linux.cmake
178index f9398e65..62b29ba5 100644
179--- a/Source/GmmLib/Linux.cmake
180+++ b/Source/GmmLib/Linux.cmake
181@@ -54,6 +54,8 @@ SET (GMMLIB_COMPILER_FLAGS_COMMON
182 
183 if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^aarch")
184     list(APPEND GMMLIB_COMPILER_FLAGS_COMMON "-DUSE_NEON")
185+elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^loongarch")
186+    list(APPEND GMMLIB_COMPILER_FLAGS_COMMON "-Wno-attributes")
187 else()
188     list (APPEND GMMLIB_COMPILER_FLAGS_COMMON
189         -Wall
190@@ -145,6 +147,9 @@ endforeach()
191 if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^aarch")
192     SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
193     SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
194+elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^loongarch")
195+    SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
196+    SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
197 else()
198     SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m${GMMLIB_ARCH}")
199     SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m${GMMLIB_ARCH}")
200diff --git a/Source/GmmLib/Utility/CpuSwizzleBlt/CpuSwizzleBlt.c b/Source/GmmLib/Utility/CpuSwizzleBlt/CpuSwizzleBlt.c
201index e090fd61..36cc76af 100644
202--- a/Source/GmmLib/Utility/CpuSwizzleBlt/CpuSwizzleBlt.c
203+++ b/Source/GmmLib/Utility/CpuSwizzleBlt/CpuSwizzleBlt.c
204@@ -375,6 +375,9 @@ extern void CpuSwizzleBlt(CPU_SWIZZLE_BLT_SURFACE *pDest, CPU_SWIZZLE_BLT_SURFAC
205     #include <intrin.h>
206 #elif defined(__ARM_ARCH)
207     #include <sse2neon.h>
208+#elif defined(__loongarch64)
209+    #define SIMDE_X86_SSE2_ENABLE_NATIVE_ALIASES
210+    #include <simde/x86/sse2.h>
211 #elif((defined __clang__) ||(__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 5)))
212     #include <cpuid.h>
213     #include <x86intrin.h>
214@@ -749,6 +752,9 @@ void CpuSwizzleBlt( // #########################################################
215                 #elif(defined(__ARM_ARCH))
216                     #define MOVNTDQA_R(Reg, Src) ((Reg) = (Reg))
217                     StreamingLoadSupported = 0;
218+                #elif(defined(__loongarch64))
219+                    #define MOVNTDQA_R(Reg, Src) ((Reg) = (Reg))
220+                    StreamingLoadSupported = 0;
221                 #elif((defined __clang__) || (__GNUC__ > 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ >= 5))
222                     #define MOVNTDQA_R(Reg, Src) ((Reg) = _mm_stream_load_si128((__m128i *)(Src)))
223                     unsigned int eax, ebx, ecx, edx;
224@@ -1148,7 +1154,11 @@ void CpuSwizzleBlt( // #########################################################
225 
226             } // foreach(y)
227 
228-            _mm_sfence(); // Flush Non-Temporal Writes
229+            #if(defined(__loongarch64))
230+                __sync_synchronize();
231+            #else
232+                _mm_sfence(); // Flush Non-Temporal Writes
233+            #endif
234 
235             #if(_MSC_VER)
236                 #pragma warning(pop)