Skip to content

Commit 4b8a087

Browse files
committed
feat: Add experimental support for FreeBSD(R) OS
1 parent 9c9151c commit 4b8a087

File tree

14 files changed

+43
-37
lines changed

14 files changed

+43
-37
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ Pre-build binaries are generated with the following security / good coding pract
7373
- macOS®
7474
- Tizen™
7575
- QNX® (Experimental)
76+
- FreeBSD® (Experimental)
7677

7778
<br>
7879

@@ -160,3 +161,5 @@ Tizen is a registered trademark of The Linux Foundation.
160161
Windows® is a trademark of the Microsoft group of companies.
161162

162163
QNX® is a trademark of QNX, a division of BlackBerry.
164+
165+
FreeBSD® is a registered trademark of The FreeBSD Foundation.

SConscript

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ arm_compute_env = env.Clone()
399399
version_file = arm_compute_env.Command("src/core/arm_compute_version.embed", "", action=create_version_file)
400400
arm_compute_env.AlwaysBuild(version_file)
401401

402-
default_cpp_compiler = 'g++' if env['os'] not in ['android', 'macos', 'openbsd'] else 'clang++'
402+
default_cpp_compiler = 'g++' if env['os'] not in ['android', 'macos', 'openbsd', 'freebsd'] else 'clang++'
403403
cpp_compiler = os.environ.get('CXX', default_cpp_compiler)
404404

405405
# Generate embed files

SConstruct

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ vars.AddVariables(
103103
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",
104104
"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")),
105105
EnumVariable("estate", "Execution State", "auto", allowed_values=("auto", "32", "64")),
106-
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")),
106+
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")),
107107
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")),
108108
BoolVariable("examples", "Build example programs", True),
109109
BoolVariable("gemm_tuner", "Build gemm_tuner programs", True),
@@ -282,11 +282,11 @@ if env['profile']:
282282

283283
cpp_tool = {'linux': 'g++', 'android' : 'clang++',
284284
'tizen': 'g++', 'macos':'clang++',
285-
'bare_metal':'g++', 'openbsd':'g++','windows':'clang-cl', 'qnx':'qcc -Vgcc_ntoaarch64le'}
285+
'bare_metal':'g++', 'openbsd':'g++', 'freebsd':'clang++', 'windows':'clang-cl', 'qnx':'qcc -Vgcc_ntoaarch64le'}
286286

287287
c_tool = {'linux':'gcc', 'android': 'clang', 'tizen':'gcc',
288288
'macos':'clang','bare_metal':'gcc',
289-
'openbsd':'gcc','windows':'clang-cl', 'qnx':'qcc -Vgcc_ntoaarch64le'}
289+
'openbsd':'gcc', 'freebsd':'clang++', 'windows':'clang-cl', 'qnx':'qcc -Vgcc_ntoaarch64le'}
290290

291291
default_cpp_compiler = cpp_tool[env['os']]
292292
default_c_compiler = c_tool[env['os']]
@@ -569,7 +569,7 @@ if env['opencl']:
569569
if env["os"] not in ["windows","android", "bare_metal", "qnx"] and (env['opencl'] or env['cppthreads']):
570570
env.Append(LIBS = ['pthread'])
571571

572-
if env['os'] == 'openbsd':
572+
if env['os'] == 'openbsd' or 'freebsd':
573573
env.Append(LIBS = ['c'])
574574
env.Append(CCFLAGS = ['-fPIC'])
575575

src/common/cpuinfo/CpuInfo.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,15 @@
5353
#endif /* !defined(BARE_METAL) */
5454

5555
#if !defined(_WIN64)
56-
#if !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__QNX__) && \
57-
(defined(__arm__) || defined(__aarch64__))
56+
#if !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__FreeBSD__) && \
57+
!defined(__QNX__) && (defined(__arm__) || defined(__aarch64__))
5858
#include <asm/hwcap.h> /* Get HWCAP bits from asm/hwcap.h */
5959
#include <sys/auxv.h>
60-
#elif (defined(__OpenBSD__) || defined(__APPLE__)) && defined(__aarch64__)
60+
#elif (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__APPLE__)) && defined(__aarch64__)
6161
#include <sys/sysctl.h>
6262
#include <sys/types.h>
6363
#endif /* defined(__APPLE__) && defined(__aarch64__)) */
64-
#endif /* !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__QNX__) && (defined(__arm__) || defined(__aarch64__)) */
64+
#endif /* !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) !defined(__FreeBSD__) && !defined(__QNX__) && (defined(__arm__) || defined(__aarch64__)) */
6565

6666
#define ARM_COMPUTE_CPU_FEATURE_HWCAP_CPUID (1 << 11)
6767
#define ARM_COMPUTE_GET_FEATURE_REG(var, freg) __asm __volatile("MRS %0, " #freg : "=r"(var))
@@ -71,8 +71,8 @@ namespace cpuinfo
7171
{
7272
namespace
7373
{
74-
#if !defined(_WIN64) && !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__QNX__) && \
75-
(defined(__arm__) || defined(__aarch64__))
74+
#if !defined(_WIN64) && !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && \
75+
!defined(__FreeBSD__) && !defined(__QNX__) && (defined(__arm__) || defined(__aarch64__))
7676
/** Extract MIDR using CPUID information that are exposed to user-space
7777
*
7878
* @param[in] max_num_cpus Maximum number of possible CPUs
@@ -364,8 +364,8 @@ CpuInfo::CpuInfo(CpuIsaInfo isa, std::vector<CpuModel> cpus) : _isa(std::move(is
364364

365365
CpuInfo CpuInfo::build()
366366
{
367-
#if !defined(_WIN64) && !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__QNX__) && \
368-
(defined(__arm__) || defined(__aarch64__))
367+
#if !defined(_WIN64) && !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && \
368+
!defined(__FreeBSD__) && !defined(__QNX__) && (defined(__arm__) || defined(__aarch64__))
369369
const uint64_t hwcaps = getauxval(AT_HWCAP);
370370
const uint64_t hwcaps2 = getauxval(AT_HWCAP2);
371371
const uint32_t max_cpus = get_max_cpus();
@@ -395,7 +395,7 @@ CpuInfo CpuInfo::build()
395395

396396
CpuInfo info(isa, cpus_model);
397397
return info;
398-
#elif defined(__OpenBSD__)
398+
#elif defined(__OpenBSD__) || defined(__FreeBSD__)
399399
int mib[2] = {0, 0};
400400
int ncpu = {1};
401401
size_t len = sizeof(ncpu);
@@ -435,8 +435,8 @@ CpuInfo CpuInfo::build()
435435
std::vector<CpuModel> cpus_model(1, midr_to_model(midr));
436436
CpuInfo info(isa, cpus_model);
437437
return info;
438-
#elif defined(__aarch64__) && \
439-
(defined(__OpenBSD__) || defined(__APPLE__)) /* #elif(BARE_METAL) && defined(__aarch64__) */
438+
#elif defined(__aarch64__) && (defined(__OpenBSD__) || defined(__FreeBSD__) || \
439+
defined(__APPLE__)) /* #elif(BARE_METAL) && defined(__aarch64__) */
440440
int ncpus = get_hw_capability("hw.perflevel0.logicalcpu");
441441
CpuIsaInfo isainfo;
442442
std::vector<CpuModel> cpus_model(ncpus);
@@ -453,7 +453,7 @@ CpuInfo CpuInfo::build()
453453
isainfo.sme2 = get_hw_capability("hw.optional.arm.FEAT_SME2");
454454
CpuInfo info(isainfo, cpus_model);
455455
return info;
456-
#elif defined(__aarch64__) && defined(_WIN64) /* #elif defined(__aarch64__) && defined(__APPLE__) */
456+
#elif defined(__aarch64__) && defined(_WIN64) /* #elif defined(__aarch64__) && defined(__APPLE__) */
457457
CpuIsaInfo isainfo;
458458

459459
isainfo.neon = IsProcessorFeaturePresent(PF_ARM_NEON_INSTRUCTIONS_AVAILABLE);
@@ -485,7 +485,7 @@ CpuInfo CpuInfo::build()
485485
std::vector<CpuModel> cpus_model(ncpus);
486486
CpuInfo info(isainfo, cpus_model);
487487
return info;
488-
#else /* #elif defined(__aarch64__) && defined(_WIN64) */
488+
#else /* #elif defined(__aarch64__) && defined(_WIN64) */
489489
CpuInfo info(CpuIsaInfo(), {CpuModel::GENERIC});
490490
return info;
491491
#endif /* !defined(BARE_METAL) && !defined(__APPLE__) && !defined(__OpenBSD__) && (defined(__arm__) || defined(__aarch64__)) */
@@ -502,8 +502,8 @@ CpuModel CpuInfo::cpu_model(uint32_t cpuid) const
502502

503503
CpuModel CpuInfo::cpu_model() const
504504
{
505-
#if defined(_WIN64) || defined(BARE_METAL) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__QNX__) || \
506-
(!defined(__arm__) && !defined(__aarch64__))
505+
#if defined(_WIN64) || defined(BARE_METAL) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__FreeBSD__) || \
506+
defined(__QNX__) || (!defined(__arm__) && !defined(__aarch64__))
507507
return cpu_model(0);
508508
#else /* defined(BARE_METAL) || defined(__APPLE__) || defined(__OpenBSD__) || defined(__QNX__) || (!defined(__arm__) && !defined(__aarch64__)) */
509509
return cpu_model(sched_getcpu());

src/core/NEON/kernels/arm_conv/pooling/pooling_depthfirst.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
#include "depthfirst_driver.hpp"
2828
#include "src/core/NEON/kernels/arm_conv/addressing.hpp"
2929
#include "utils.hpp"
30-
#if !defined(_WIN64) && !defined(__OpenBSD__)
30+
#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__)
3131
#include <alloca.h>
32-
#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */
32+
#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) */
3333
#include <limits>
3434

3535
namespace arm_conv {

src/core/NEON/kernels/arm_conv/pooling/pooling_depthfirst_generic.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626

2727
#include "depthfirst_driver.hpp"
2828
#include "utils.hpp"
29-
#if !defined(_WIN64) && !defined(__OpenBSD__)
29+
#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__)
3030
#include <alloca.h>
31-
#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */
31+
#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(FreeBSD) */
3232

3333
namespace arm_conv {
3434
namespace pooling {

src/core/NEON/kernels/arm_gemm/gemm_hybrid_indirect.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
*/
2424
#pragma once
2525

26-
#if !defined(_WIN64) && !defined(__OpenBSD__)
26+
#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__)
2727
#include <alloca.h>
28-
#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */
28+
#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) */
2929

3030
#include <algorithm>
3131
#include <cassert>

src/core/NEON/kernels/arm_gemm/interleave-8way.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626

2727
#include <arm_neon.h>
2828

29-
#if !defined(_WIN64) && !defined(__OpenBSD__)
29+
#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__)
3030
#include <alloca.h>
31-
#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */
31+
#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) */
3232

3333
#include <cstring>
3434

src/core/NEON/kernels/arm_gemm/interleave_indirect.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
#include "interleave_indirect.hpp"
2929
#include "arm_common/bfloat.hpp"
3030

31-
#if !defined(_WIN64) && !defined(__OpenBSD__)
31+
#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__)
3232
#include <alloca.h>
33-
#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */
33+
#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) */
3434

3535
#include <algorithm>
3636
#include <cstddef>

src/core/NEON/kernels/arm_gemm/transform-bf16.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@
2626
#include "src/core/NEON/wrapper/intrinsics/intrinsics.h"
2727
#include "arm_common/bfloat.hpp"
2828

29-
#if !defined(_WIN64) && !defined(__OpenBSD__)
29+
#if !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__)
3030
#include <alloca.h>
31-
#endif /* !defined(_WIN64) && !defined(__OpenBSD__) */
31+
#endif /* !defined(_WIN64) && !defined(__OpenBSD__) && !defined(__FreeBSD__) */
3232

3333
namespace arm_gemm {
3434

0 commit comments

Comments
 (0)