@@ -161,23 +161,32 @@ namespace ojph {
161161 }
162162 #elif defined(OJPH_ARCH_ARM)
163163
164- #ifndef OJPH_OS_LINUX // Windows/Apple/Android
164+ #if !defined( OJPH_OS_LINUX) && !defined(OJPH_OS_FREEBSD) && !defined(OJPH_OS_OPENBSD) // Windows/Apple/Android
165165
166166 bool init_cpu_ext_level (int & level) {
167167 level = ARM_CPU_EXT_LEVEL_ASIMD;
168168 return true ;
169169 }
170170
171- #else // Linux
171+ #else // Linux/FreeBSD/OpenBSD
172172
173173 #if defined(__aarch64__) || defined(_M_ARM64) // 64-bit ARM
174174
175175 #include < sys/auxv.h>
176- #include < asm/hwcap.h>
176+ #ifdef OJPH_OS_LINUX
177+ #include < asm/hwcap.h>
178+ #endif
177179
178180 bool init_cpu_ext_level (int & level) {
179- unsigned long hwcaps = getauxval (AT_HWCAP);
180- unsigned long hwcaps2 = getauxval (AT_HWCAP2);
181+ #ifdef OJPH_OS_LINUX
182+ unsigned long hwcaps = getauxval (AT_HWCAP);
183+ unsigned long hwcaps2 = getauxval (AT_HWCAP2);
184+ #else
185+ unsigned long hwcaps = 0 ;
186+ unsigned long hwcaps2 = 0 ;
187+ elf_aux_info (AT_HWCAP, &hwcaps, sizeof (hwcaps));
188+ elf_aux_info (AT_HWCAP2, &hwcaps2, sizeof (hwcaps2));
189+ #endif
181190
182191 level = ARM_CPU_EXT_LEVEL_GENERIC;
183192 if (hwcaps & HWCAP_ASIMD) {
@@ -194,10 +203,17 @@ namespace ojph {
194203 #else // 32-bit ARM
195204
196205 #include < sys/auxv.h>
197- #include < asm/hwcap.h>
206+ #ifdef OJPH_OS_LINUX
207+ #include < asm/hwcap.h>
208+ #endif
198209
199210 bool init_cpu_ext_level (int & level) {
200- unsigned long hwcaps = getauxval (AT_HWCAP);
211+ #ifdef OJPH_OS_LINUX
212+ unsigned long hwcaps = getauxval (AT_HWCAP);
213+ #else
214+ unsigned long hwcaps = 0 ;
215+ elf_aux_info (AT_HWCAP, &hwcaps, sizeof (hwcaps));
216+ #endif
201217 level = ARM_CPU_EXT_LEVEL_GENERIC;
202218 if (hwcaps & HWCAP_NEON)
203219 level = ARM_CPU_EXT_LEVEL_NEON;
0 commit comments