From 64362b192c847b3b4bd7c538801c2e29ee7a8d51 Mon Sep 17 00:00:00 2001 From: Petr Penzin Date: Thu, 2 Jan 2025 20:44:50 -0800 Subject: [PATCH 1/6] Detect FreeBSD in top-level CMake --- CMakeLists.txt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cd077075d4a..4752c779526 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,7 +48,8 @@ else(NOT CHAKRACORE_BUILD_SH) endif(NOT CHAKRACORE_BUILD_SH) if(CC_USES_SYSTEM_ARCH_SH OR NOT CHAKRACORE_BUILD_SH) - if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" + OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64") set(CC_TARGETS_AMD64_SH 1) elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") set(CC_TARGETS_ARM_SH 1) @@ -121,6 +122,8 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL Linux) set(CC_TARGET_OS_LINUX 1) elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin) set(CC_TARGET_OS_OSX 1) +elseif(CMAKE_SYSTEM_NAME STREQUAL FreeBSD) + set(CC_TARGET_OS_FREEBSD 1) endif() if (ENABLE_CC_XPLAT_TRACE_SH) @@ -331,6 +334,11 @@ elseif(CC_TARGET_OS_OSX) message(WARNING "-- !! macOS Deployment Target was set to $ENV{MACOSX_DEPLOYMENT_TARGET}. Using it as is.") endif() endif() +elseif(CC_TARGET_OS_FREEBSD) + add_definitions( + -DPLATFORM_UNIX + ) + # TODO else() message(FATAL_ERROR "Unsupported OS: ${CMAKE_SYSTEM_NAME}") endif() From d144ebadcfa81a9d9853e77bbabb3fad657bf857 Mon Sep 17 00:00:00 2001 From: Petr Penzin Date: Thu, 2 Jan 2025 20:42:24 -0800 Subject: [PATCH 2/6] Define BSD regs macros for FreeBSD --- pal/src/config.h.in | 1 + pal/src/configure.cmake | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/pal/src/config.h.in b/pal/src/config.h.in index 15e4a4c0deb..eb14ad1bf19 100644 --- a/pal/src/config.h.in +++ b/pal/src/config.h.in @@ -126,6 +126,7 @@ #cmakedefine01 ERROR_FUNC_FOR_GLOB_HAS_FIXED_PARAMS #cmakedefine01 HAS_FTRUNCATE_LENGTH_ISSUE #cmakedefine FREEBSD_LIBC "@FREEBSD_LIBC@" +#cmakedefine BSD_REGS_STYLE(reg, RR, rr) @BSD_REGS_STYLE@ #cmakedefine JA_JP_LOCALE_NAME "@JA_JP_LOCALE_NAME@" #cmakedefine KO_KR_LOCALE_NAME "@KO_KR_LOCALE_NAME@" diff --git a/pal/src/configure.cmake b/pal/src/configure.cmake index b0c128e0a1f..596b8b6ce81 100644 --- a/pal/src/configure.cmake +++ b/pal/src/configure.cmake @@ -895,6 +895,13 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL FreeBSD) set(KO_KR_LOCALE_NAME ko_KR_LOCALE_NOT_FOUND) set(ZH_TW_LOCALE_NAME zh_TW_LOCALE_NOT_FOUND) set(HAS_FTRUNCATE_LENGTH_ISSUE 0) + if(CMAKE_SYSTEM_PROCESSOR STREQUAL amd64) + set(BSD_REGS_STYLE "((reg).r_##rr)") + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL arm64) + set(BSD_REGS_STYLE "((reg).rr)") + else() + message(FATAL_ERROR "Unsupported FreeBSD architecture") + endif() if(EXISTS "/lib/libc.so.7") set(FREEBSD_LIBC "/lib/libc.so.7") From 282a285e9b8aaced00dc0ef21c358d72ecc15efe Mon Sep 17 00:00:00 2001 From: Petr Penzin Date: Thu, 2 Jan 2025 20:46:17 -0800 Subject: [PATCH 3/6] FreeBSD: locate sysconf --- lib/Common/Core/SysInfo.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Common/Core/SysInfo.cpp b/lib/Common/Core/SysInfo.cpp index af33b449204..2d953911f31 100644 --- a/lib/Common/Core/SysInfo.cpp +++ b/lib/Common/Core/SysInfo.cpp @@ -10,7 +10,7 @@ #include #ifdef __APPLE__ #include // sysctl* -#elif defined(__linux__) +#elif defined(__linux__) || defined(__FreeBSD__) #include // sysconf #endif // Initialization order @@ -194,7 +194,7 @@ AutoSystemInfo::InitPhysicalProcessorCount() countPhysicalProcessor = 1; } } -#elif defined(__linux__) +#elif defined(__linux__) || defined(__FreeBSD__) countPhysicalProcessor = sysconf(_SC_NPROCESSORS_ONLN); #else // implementation for __linux__ should work for some others. From 473a52555952b5d2933a2b709061e82f6c15e62f Mon Sep 17 00:00:00 2001 From: Petr Penzin Date: Thu, 2 Jan 2025 20:44:05 -0800 Subject: [PATCH 4/6] FreeBSD: disable PAL_GLOBAL for now (TODO) --- pal/inc/pal.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pal/inc/pal.h b/pal/inc/pal.h index 20ca7a80d8e..5eed5058ff5 100644 --- a/pal/inc/pal.h +++ b/pal/inc/pal.h @@ -230,7 +230,12 @@ extern "C" { #endif #endif +#ifndef __FreeBSD__ #define PAL_GLOBAL __attribute__((init_priority(200))) +#else +/* TODO above macro expansion fails to compile on FreeBSD */ +#define PAL_GLOBAL +#endif /******************* PAL-Specific Entrypoints *****************************/ #define IsDebuggerPresent PAL_IsDebuggerPresent From 2177b20db31f51bfb9dee021b429fe6911d2114a Mon Sep 17 00:00:00 2001 From: Petr Penzin Date: Sun, 2 Feb 2025 20:08:49 -0800 Subject: [PATCH 5/6] Include machine/fpu.h on FreeBSD --- pal/src/include/pal/context.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pal/src/include/pal/context.h b/pal/src/include/pal/context.h index 907d1349217..987d46ead9a 100644 --- a/pal/src/include/pal/context.h +++ b/pal/src/include/pal/context.h @@ -25,6 +25,9 @@ extern "C" * platforms and another type elsewhere. */ #if HAVE_UCONTEXT_T #include +#ifdef __FreeBSD__ +#include +#endif typedef ucontext_t native_context_t; #else // HAVE_UCONTEXT_T From fcc9c488206d6f362b420819763f719f607ba66f Mon Sep 17 00:00:00 2001 From: Petr Penzin Date: Sun, 2 Feb 2025 20:33:17 -0800 Subject: [PATCH 6/6] Add FreeBSD 13+ byteswap.h (TODO) --- lib/Common/Common/ByteSwap.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/Common/Common/ByteSwap.h b/lib/Common/Common/ByteSwap.h index b9b1894f7e2..70d6650f62e 100644 --- a/lib/Common/Common/ByteSwap.h +++ b/lib/Common/Common/ByteSwap.h @@ -68,7 +68,14 @@ RtlUlonglongByteSwap( #define RtlUlongByteSwap(_x) __bswap_32((_x)) #define RtlUlonglongByteSwap(_x) __bswap_64((_x)) +#elif defined(__FreeBSD__) +#include +/* FreeBSD 13+, also above definitions would work + * TODO replace with "has byteswap.h" check? */ +#define RtlUshortByteSwap(_x) bswap_16((_x)) +#define RtlUlongByteSwap(_x) bswap_32((_x)) +#define RtlUlonglongByteSwap(_x) bswap_64((_x)) + #else -// TODO: include endian.h for BSD? #error "ByteSwap.h: Not implemented for this platform" #endif