diff --git a/README.md b/README.md index bb78ee9f5c..ffaa4b01c5 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,7 @@ Pre-build binaries are generated with the following security / good coding pract - macOS® - Tizen™ - QNX® (Experimental) +- FreeBSD® (Experimental)
@@ -160,3 +161,5 @@ Tizen is a registered trademark of The Linux Foundation. Windows® is a trademark of the Microsoft group of companies. QNX® is a trademark of QNX, a division of BlackBerry. + +FreeBSD® is a registered trademark of The FreeBSD Foundation. diff --git a/SConscript b/SConscript index 1283b20d59..5383940625 100644 --- a/SConscript +++ b/SConscript @@ -399,7 +399,7 @@ arm_compute_env = env.Clone() version_file = arm_compute_env.Command("src/core/arm_compute_version.embed", "", action=create_version_file) arm_compute_env.AlwaysBuild(version_file) -default_cpp_compiler = 'g++' if env['os'] not in ['android', 'macos', 'openbsd'] else 'clang++' +default_cpp_compiler = 'g++' if env['os'] not in ['android', 'macos', 'openbsd', 'freebsd'] else 'clang++' cpp_compiler = os.environ.get('CXX', default_cpp_compiler) # Generate embed files diff --git a/SConstruct b/SConstruct index 5c490a38de..6a9b866bda 100644 --- a/SConstruct +++ b/SConstruct @@ -103,7 +103,7 @@ vars.AddVariables( allowed_values=("armv7a", "armv7a-hf", "arm64-v8a", "arm64-v8.2-a", "arm64-v8.2-a-sve", "arm64-v8.2-a-sve2", "x86_32", "x86_64", "armv8a", "armv8.2-a", "armv8.2-a-sve", "armv8.6-a", "armv8.6-a-sve", "armv8.6-a-sve2", "armv8.6-a-sve2-sme2", "armv8r64", "x86")), EnumVariable("estate", "Execution State", "auto", allowed_values=("auto", "32", "64")), - EnumVariable("os", "Target OS. With bare metal selected, only Arm® Neon™ (not OpenCL) can be used, static libraries get built and Neon™'s multi-threading support is disabled.", "linux", allowed_values=("linux", "android", "tizen", "macos", "bare_metal", "openbsd","windows", "qnx")), + EnumVariable("os", "Target OS. With bare metal selected, only Arm® Neon™ (not OpenCL) can be used, static libraries get built and Neon™'s multi-threading support is disabled.", "linux", allowed_values=("linux", "android", "tizen", "macos", "bare_metal", "openbsd", "freebsd","windows", "qnx")), EnumVariable("build", "Either build directly on your device (native) or cross compile from your desktop machine (cross-compile). In both cases make sure the compiler is available in your path.", "cross_compile", allowed_values=("native", "cross_compile", "embed_only")), BoolVariable("examples", "Build example programs", True), BoolVariable("gemm_tuner", "Build gemm_tuner programs", True), @@ -282,11 +282,11 @@ if env['profile']: cpp_tool = {'linux': 'g++', 'android' : 'clang++', 'tizen': 'g++', 'macos':'clang++', - 'bare_metal':'g++', 'openbsd':'g++','windows':'clang-cl', 'qnx':'qcc -Vgcc_ntoaarch64le'} + 'bare_metal':'g++', 'openbsd':'g++', 'freebsd':'clang++', 'windows':'clang-cl', 'qnx':'qcc -Vgcc_ntoaarch64le'} c_tool = {'linux':'gcc', 'android': 'clang', 'tizen':'gcc', 'macos':'clang','bare_metal':'gcc', - 'openbsd':'gcc','windows':'clang-cl', 'qnx':'qcc -Vgcc_ntoaarch64le'} + 'openbsd':'gcc', 'freebsd':'clang++', 'windows':'clang-cl', 'qnx':'qcc -Vgcc_ntoaarch64le'} default_cpp_compiler = cpp_tool[env['os']] default_c_compiler = c_tool[env['os']] @@ -569,7 +569,7 @@ if env['opencl']: if env["os"] not in ["windows","android", "bare_metal", "qnx"] and (env['opencl'] or env['cppthreads']): env.Append(LIBS = ['pthread']) -if env['os'] == 'openbsd': +if env['os'] == 'openbsd' or 'freebsd': env.Append(LIBS = ['c']) env.Append(CCFLAGS = ['-fPIC']) diff --git a/src/common/cpuinfo/CpuInfo.cpp b/src/common/cpuinfo/CpuInfo.cpp index b5875d70ec..0df15c113b 100644 --- a/src/common/cpuinfo/CpuInfo.cpp +++ b/src/common/cpuinfo/CpuInfo.cpp @@ -32,6 +32,8 @@ #include #include +#include +#include #if !defined(BARE_METAL) #include @@ -53,15 +55,15 @@ #endif /* !defined(BARE_METAL) */ #if !defined(_WIN64) -#if !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__QNX__) && \ - (defined(__arm__) || defined(__aarch64__)) +#if !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && \ + !defined(__QNX__) && (defined(__arm__) || defined(__aarch64__)) #include /* Get HWCAP bits from asm/hwcap.h */ #include -#elif (defined(__OpenBSD__) || defined(__APPLE__)) && defined(__aarch64__) +#elif (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__APPLE__)) && defined(__aarch64__) #include #include #endif /* defined(__APPLE__) && defined(__aarch64__)) */ -#endif /* !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__QNX__) && (defined(__arm__) || defined(__aarch64__)) */ +#endif /* !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) !defined(__FreeBSD__) && !defined(__QNX__) && (defined(__arm__) || defined(__aarch64__)) */ #define ARM_COMPUTE_CPU_FEATURE_HWCAP_CPUID (1 << 11) #define ARM_COMPUTE_GET_FEATURE_REG(var, freg) __asm __volatile("MRS %0, " #freg : "=r"(var)) @@ -71,8 +73,8 @@ namespace cpuinfo { namespace { -#if !defined(_WIN64) && !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__QNX__) && \ - (defined(__arm__) || defined(__aarch64__)) +#if !defined(_WIN64) && !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && \ + !defined(__FreeBSD__) && !defined(__QNX__) && (defined(__arm__) || defined(__aarch64__)) /** Extract MIDR using CPUID information that are exposed to user-space * * @param[in] max_num_cpus Maximum number of possible CPUs @@ -364,8 +366,8 @@ CpuInfo::CpuInfo(CpuIsaInfo isa, std::vector cpus) : _isa(std::move(is CpuInfo CpuInfo::build() { -#if !defined(_WIN64) && !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__QNX__) && \ - (defined(__arm__) || defined(__aarch64__)) +#if !defined(_WIN64) && !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && \ + !defined(__FreeBSD__) && !defined(__QNX__) && (defined(__arm__) || defined(__aarch64__)) const uint64_t hwcaps = getauxval(AT_HWCAP); const uint64_t hwcaps2 = getauxval(AT_HWCAP2); const uint32_t max_cpus = get_max_cpus(); @@ -395,7 +397,7 @@ CpuInfo CpuInfo::build() CpuInfo info(isa, cpus_model); return info; -#elif defined(__OpenBSD__) +#elif defined(__OpenBSD__) || defined(__FreeBSD__) int mib[2] = {0, 0}; int ncpu = {1}; size_t len = sizeof(ncpu); @@ -435,8 +437,8 @@ CpuInfo CpuInfo::build() std::vector cpus_model(1, midr_to_model(midr)); CpuInfo info(isa, cpus_model); return info; -#elif defined(__aarch64__) && \ - (defined(__OpenBSD__) || defined(__APPLE__)) /* #elif(BARE_METAL) && defined(__aarch64__) */ +#elif defined(__aarch64__) && (defined(__OpenBSD__) || defined(__FreeBSD__) || \ + defined(__APPLE__)) /* #elif(BARE_METAL) && defined(__aarch64__) */ int ncpus = get_hw_capability("hw.perflevel0.logicalcpu"); CpuIsaInfo isainfo; std::vector cpus_model(ncpus); @@ -453,7 +455,7 @@ CpuInfo CpuInfo::build() isainfo.sme2 = get_hw_capability("hw.optional.arm.FEAT_SME2"); CpuInfo info(isainfo, cpus_model); return info; -#elif defined(__aarch64__) && defined(_WIN64) /* #elif defined(__aarch64__) && defined(__APPLE__) */ +#elif defined(__aarch64__) && defined(_WIN64) /* #elif defined(__aarch64__) && defined(__APPLE__) */ CpuIsaInfo isainfo; isainfo.neon = IsProcessorFeaturePresent(PF_ARM_NEON_INSTRUCTIONS_AVAILABLE); @@ -485,7 +487,7 @@ CpuInfo CpuInfo::build() std::vector cpus_model(ncpus); CpuInfo info(isainfo, cpus_model); return info; -#else /* #elif defined(__aarch64__) && defined(_WIN64) */ +#else /* #elif defined(__aarch64__) && defined(_WIN64) */ CpuInfo info(CpuIsaInfo(), {CpuModel::GENERIC}); return info; #endif /* !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && (defined(__arm__) || defined(__aarch64__)) */ @@ -502,8 +504,8 @@ CpuModel CpuInfo::cpu_model(uint32_t cpuid) const CpuModel CpuInfo::cpu_model() const { -#if defined(_WIN64) || defined(BARE_METAL) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__QNX__) || \ - (!defined(__arm__) && !defined(__aarch64__)) +#if defined(_WIN64) || defined(BARE_METAL) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__FreeBSD__) || \ + defined(__QNX__) || (!defined(__arm__) && !defined(__aarch64__)) return cpu_model(0); #else /* defined(BARE_METAL) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__QNX__) || (!defined(__arm__) && !defined(__aarch64__)) */ return cpu_model(sched_getcpu()); diff --git a/src/core/NEON/kernels/arm_conv/pooling/pooling_depthfirst.hpp b/src/core/NEON/kernels/arm_conv/pooling/pooling_depthfirst.hpp index dbd1f9516d..a7f75956c1 100644 --- a/src/core/NEON/kernels/arm_conv/pooling/pooling_depthfirst.hpp +++ b/src/core/NEON/kernels/arm_conv/pooling/pooling_depthfirst.hpp @@ -27,9 +27,9 @@ #include "depthfirst_driver.hpp" #include "src/core/NEON/kernels/arm_conv/addressing.hpp" #include "utils.hpp" -#if !defined(_WIN64) && !defined(__OpenBSD__) +#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) #include -#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */ +#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) */ #include namespace arm_conv { diff --git a/src/core/NEON/kernels/arm_conv/pooling/pooling_depthfirst_generic.hpp b/src/core/NEON/kernels/arm_conv/pooling/pooling_depthfirst_generic.hpp index cb241cf76f..c5836c9495 100644 --- a/src/core/NEON/kernels/arm_conv/pooling/pooling_depthfirst_generic.hpp +++ b/src/core/NEON/kernels/arm_conv/pooling/pooling_depthfirst_generic.hpp @@ -26,9 +26,9 @@ #include "depthfirst_driver.hpp" #include "utils.hpp" -#if !defined(_WIN64) && !defined(__OpenBSD__) +#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) #include -#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */ +#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(FreeBSD) */ namespace arm_conv { namespace pooling { diff --git a/src/core/NEON/kernels/arm_gemm/gemm_hybrid_indirect.hpp b/src/core/NEON/kernels/arm_gemm/gemm_hybrid_indirect.hpp index 8a706d40c7..055218dc6e 100644 --- a/src/core/NEON/kernels/arm_gemm/gemm_hybrid_indirect.hpp +++ b/src/core/NEON/kernels/arm_gemm/gemm_hybrid_indirect.hpp @@ -23,9 +23,9 @@ */ #pragma once -#if !defined(_WIN64) && !defined(__OpenBSD__) +#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) #include -#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */ +#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) */ #include #include diff --git a/src/core/NEON/kernels/arm_gemm/interleave-8way.cpp b/src/core/NEON/kernels/arm_gemm/interleave-8way.cpp index f4e411e4c5..d884928346 100644 --- a/src/core/NEON/kernels/arm_gemm/interleave-8way.cpp +++ b/src/core/NEON/kernels/arm_gemm/interleave-8way.cpp @@ -26,9 +26,9 @@ #include -#if !defined(_WIN64) && !defined(__OpenBSD__) +#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) #include -#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */ +#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) */ #include diff --git a/src/core/NEON/kernels/arm_gemm/interleave_indirect.cpp b/src/core/NEON/kernels/arm_gemm/interleave_indirect.cpp index 7e138bfb38..f9e3757a27 100644 --- a/src/core/NEON/kernels/arm_gemm/interleave_indirect.cpp +++ b/src/core/NEON/kernels/arm_gemm/interleave_indirect.cpp @@ -28,9 +28,9 @@ #include "interleave_indirect.hpp" #include "arm_common/bfloat.hpp" -#if !defined(_WIN64) && !defined(__OpenBSD__) +#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) #include -#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */ +#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) */ #include #include diff --git a/src/core/NEON/kernels/arm_gemm/transform-bf16.cpp b/src/core/NEON/kernels/arm_gemm/transform-bf16.cpp index 29dfbe2352..0a9d0514f3 100644 --- a/src/core/NEON/kernels/arm_gemm/transform-bf16.cpp +++ b/src/core/NEON/kernels/arm_gemm/transform-bf16.cpp @@ -26,9 +26,9 @@ #include "src/core/NEON/wrapper/intrinsics/intrinsics.h" #include "arm_common/bfloat.hpp" -#if !defined(_WIN64) && !defined(__OpenBSD__) +#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) #include -#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */ +#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) */ namespace arm_gemm { diff --git a/src/core/NEON/kernels/arm_gemm/transform.cpp b/src/core/NEON/kernels/arm_gemm/transform.cpp index 17a95d87d7..9f61646e9c 100644 --- a/src/core/NEON/kernels/arm_gemm/transform.cpp +++ b/src/core/NEON/kernels/arm_gemm/transform.cpp @@ -25,9 +25,9 @@ #include "arm_common/bfloat.hpp" -#if !defined(_WIN64) && !defined(__OpenBSD__) +#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) #include -#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */ +#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) */ namespace arm_gemm { diff --git a/src/runtime/CPP/CPPScheduler.cpp b/src/runtime/CPP/CPPScheduler.cpp index bc91f54918..6237879db5 100644 --- a/src/runtime/CPP/CPPScheduler.cpp +++ b/src/runtime/CPP/CPPScheduler.cpp @@ -103,7 +103,7 @@ void set_thread_affinity(int core_id) return; } -#if !defined(_WIN64) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__QNX__) +#if !defined(_WIN64) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__QNX__) cpu_set_t set; CPU_ZERO(&set); CPU_SET(core_id, &set); diff --git a/tests/framework/Framework.cpp b/tests/framework/Framework.cpp index 0d5d05af2f..8888a8d3ec 100644 --- a/tests/framework/Framework.cpp +++ b/tests/framework/Framework.cpp @@ -25,6 +25,8 @@ #include "arm_compute/runtime/Scheduler.h" +#include "tests/framework/instruments/OpenCLMemoryUsage.h" +#include "tests/framework/instruments/OpenCLTimer.h" #include "tests/framework/ParametersLibrary.h" #include "tests/framework/TestFilter.h" diff --git a/tests/framework/instruments/Instruments.h b/tests/framework/instruments/Instruments.h index e69dcb1fd9..4e872a3474 100644 --- a/tests/framework/instruments/Instruments.h +++ b/tests/framework/instruments/Instruments.h @@ -24,12 +24,13 @@ #ifndef ACL_TESTS_FRAMEWORK_INSTRUMENTS_INSTRUMENTS_H #define ACL_TESTS_FRAMEWORK_INSTRUMENTS_INSTRUMENTS_H -#if !defined(_WIN64) && !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__QNX__) +#if !defined(_WIN64) && !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && \ + !defined(__FreeBSD__) && !defined(__QNX__) #include "MaliCounter.h" #include "OpenCLMemoryUsage.h" #include "OpenCLTimer.h" #include "PMUCounter.h" -#endif /* !defined(_WIN64) && !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__QNX__) */ +#endif /* !defined(_WIN64) && !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && !defined(__QNX__) */ #include "SchedulerTimer.h" #include "WallClockTimer.h" #include