Index: src/core/others/ojph_arch.cpp
--- src/core/others/ojph_arch.cpp.orig
+++ src/core/others/ojph_arch.cpp
@@ -161,23 +161,32 @@ namespace ojph {
   }
   #elif defined(OJPH_ARCH_ARM)
 
-    #ifndef OJPH_OS_LINUX  //Windows/Apple/Android
+    #if !defined(OJPH_OS_LINUX) && !defined(OJPH_OS_OPENBSD)  //Windows/Apple/Android
 
     bool init_cpu_ext_level(int& level) {
       level = ARM_CPU_EXT_LEVEL_ASIMD;
       return true;
     }
 
-    #else  // Linux
+    #else  // Linux & OpenBSD
 
       #if defined(__aarch64__) || defined(_M_ARM64) // 64-bit ARM
 
         #include <sys/auxv.h>
-        #include <asm/hwcap.h>
+          #if defined (OJPH_OS_LINUX)
+            #include <asm/hwcap.h>
+          #endif
 
         bool init_cpu_ext_level(int& level) {
-          unsigned long hwcaps = getauxval(AT_HWCAP);
-          unsigned long hwcaps2 = getauxval(AT_HWCAP2);
+          #if defined (OJPH_OS_LINUX)
+            unsigned long hwcaps = getauxval(AT_HWCAP);
+            unsigned long hwcaps2 = getauxval(AT_HWCAP2);
+          #else // OpenBSD
+            unsigned long hwcaps = 0;
+            unsigned long hwcaps2 = 0;
+            elf_aux_info(AT_HWCAP, &hwcaps, sizeof(hwcaps));
+            elf_aux_info(AT_HWCAP2, &hwcaps2, sizeof(hwcaps2));
+          #endif
 
           level = ARM_CPU_EXT_LEVEL_GENERIC;
           if (hwcaps & HWCAP_ASIMD) {
