diff --git a/Marlin/src/HAL/LINUX/HAL.cpp b/Marlin/src/HAL/LINUX/HAL.cpp
index 6a767c76e7b7..a90819b6b0c1 100644
--- a/Marlin/src/HAL/LINUX/HAL.cpp
+++ b/Marlin/src/HAL/LINUX/HAL.cpp
@@ -19,6 +19,7 @@
* along with this program. If not, see .
*
*/
+
#ifdef __PLAT_LINUX__
#include "../../inc/MarlinConfig.h"
@@ -57,4 +58,49 @@ uint16_t MarlinHAL::adc_value() {
void MarlinHAL::reboot() { /* Reset the application state and GPIO */ }
+// ------------------------
+// BSD String
+// ------------------------
+
+/**
+ * Copyright (c) 1998, 2015 Todd C. Miller
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifndef HAS_LIBBSD
+
+ /**
+ * Copy string src to buffer dst of size dsize. At most dsize-1
+ * chars will be copied. Always NUL terminates (unless dsize == 0).
+ * Returns strlen(src); if retval >= dsize, truncation occurred.
+ */
+ size_t MarlinHAL::_strlcpy(char *dst, const char *src, size_t dsize) {
+ const char *osrc = src;
+ size_t nleft = dsize;
+
+ // Copy as many bytes as will fit.
+ if (nleft != 0) while (--nleft != 0) if ((*dst++ = *src++) == '\0') break;
+
+ // Not enough room in dst, add NUL and traverse rest of src.
+ if (nleft == 0) {
+ if (dsize != 0) *dst = '\0'; // NUL-terminate dst
+ while (*src++) { /* nada */ }
+ }
+
+ return (src - osrc - 1); // count does not include NUL
+ }
+
+#endif // HAS_LIBBSD
+
#endif // __PLAT_LINUX__
diff --git a/Marlin/src/HAL/LINUX/HAL.h b/Marlin/src/HAL/LINUX/HAL.h
index e84516d4dca9..bb5fb73e0502 100644
--- a/Marlin/src/HAL/LINUX/HAL.h
+++ b/Marlin/src/HAL/LINUX/HAL.h
@@ -26,6 +26,11 @@
#include
#include
#include
+
+#ifdef HAS_LIBBSD
+ #include
+#endif
+
#undef min
#undef max
#include
@@ -162,4 +167,13 @@ class MarlinHAL {
}
static void set_pwm_frequency(const pin_t, int) {}
+
+ #ifndef HAS_LIBBSD
+ /**
+ * Redirect missing strlcpy here
+ */
+ static size_t _strlcpy(char *dst, const char *src, size_t dsize);
+ #define strlcpy hal._strlcpy
+ #endif
+
};
diff --git a/Marlin/src/HAL/LINUX/include/Arduino.h b/Marlin/src/HAL/LINUX/include/Arduino.h
index 6e9c80ee07dc..f05aaed88083 100644
--- a/Marlin/src/HAL/LINUX/include/Arduino.h
+++ b/Marlin/src/HAL/LINUX/include/Arduino.h
@@ -28,9 +28,6 @@
#include
-#define strlcpy(A, B, C) strncpy(A, B, (C) - 1)
-#define strlcpy_P(A, B, C) strncpy_P(A, B, (C) - 1)
-
#define HIGH 0x01
#define LOW 0x00
diff --git a/Marlin/src/HAL/NATIVE_SIM/HAL.cpp b/Marlin/src/HAL/NATIVE_SIM/HAL.cpp
new file mode 100644
index 000000000000..18c225fb3f15
--- /dev/null
+++ b/Marlin/src/HAL/NATIVE_SIM/HAL.cpp
@@ -0,0 +1,67 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (c) 2023 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+/**
+ * Copyright (c) 1998, 2015 Todd C. Miller
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef __PLAT_NATIVE_SIM__
+
+#ifndef HAS_LIBBSD
+
+ #include "HAL.h"
+
+ /**
+ * Copy string src to buffer dst of size dsize. At most dsize-1
+ * chars will be copied. Always NUL terminates (unless dsize == 0).
+ * Returns strlen(src); if retval >= dsize, truncation occurred.
+ */
+ size_t MarlinHAL::_strlcpy(char *dst, const char *src, size_t dsize) {
+ const char *osrc = src;
+ size_t nleft = dsize;
+
+ // Copy as many bytes as will fit.
+ if (nleft != 0) while (--nleft != 0) if ((*dst++ = *src++) == '\0') break;
+
+ // Not enough room in dst, add NUL and traverse rest of src.
+ if (nleft == 0) {
+ if (dsize != 0) *dst = '\0'; // NUL-terminate dst
+ while (*src++) { /* nada */ }
+ }
+
+ return (src - osrc - 1); // count does not include NUL
+ }
+
+#endif // HAS_LIBBSD
+#endif // __PLAT_NATIVE_SIM__
diff --git a/Marlin/src/HAL/NATIVE_SIM/HAL.h b/Marlin/src/HAL/NATIVE_SIM/HAL.h
index 8e88e5023026..f57e065a8e82 100644
--- a/Marlin/src/HAL/NATIVE_SIM/HAL.h
+++ b/Marlin/src/HAL/NATIVE_SIM/HAL.h
@@ -263,4 +263,14 @@ class MarlinHAL {
analogWrite(pin, v);
}
+ static void set_pwm_frequency(const pin_t, int) {}
+
+ #ifndef HAS_LIBBSD
+ /**
+ * Redirect missing strlcpy here
+ */
+ static size_t _strlcpy(char *dst, const char *src, size_t dsize);
+ #define strlcpy hal._strlcpy
+ #endif
+
};
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index 04e96177b5d1..e87681684d42 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -30,6 +30,16 @@
// Extras for CI testing
#endif
+// Arduino IDE with Teensy Additions
+#ifdef TEENSYDUINO
+ #undef max
+ #define max(a,b) ((a)>(b)?(a):(b))
+ #undef min
+ #define min(a,b) ((a)<(b)?(a):(b))
+ #undef NOT_A_PIN // Override Teensyduino legacy CapSense define work-around
+ #define NOT_A_PIN 0 // For PINS_DEBUGGING
+#endif
+
// ADC
#ifdef BOARD_ADC_VREF_MV
#define ADC_VREF_MV BOARD_ADC_VREF_MV
@@ -64,16 +74,6 @@
#undef OTA_FIRMWARE_UPDATE
#endif
-#ifdef TEENSYDUINO
- #undef max
- #define max(a,b) ((a)>(b)?(a):(b))
- #undef min
- #define min(a,b) ((a)<(b)?(a):(b))
-
- #undef NOT_A_PIN // Override Teensyduino legacy CapSense define work-around
- #define NOT_A_PIN 0 // For PINS_DEBUGGING
-#endif
-
/**
* Axis lengths and center
*/
diff --git a/ini/native.ini b/ini/native.ini
index 40511beb6fc2..86608ff3d71a 100644
--- a/ini/native.ini
+++ b/ini/native.ini
@@ -36,7 +36,8 @@ build_src_filter = ${common.default_src_filter} +
[simulator_common]
platform = native
framework =
-build_flags = ${common.build_flags} -std=gnu++17 -D__PLAT_NATIVE_SIM__ -DU8G_HAL_LINKS -I/usr/include/SDL2 -IMarlin -IMarlin/src/HAL/NATIVE_SIM/u8g
+build_flags = ${common.build_flags} -std=gnu++17 -D__PLAT_NATIVE_SIM__ -DU8G_HAL_LINKS
+ -I/usr/include/SDL2 -IMarlin -IMarlin/src/HAL/NATIVE_SIM/u8g
build_src_flags = -Wall -Wno-expansion-to-defined -Wno-deprecated-declarations -Wcast-align
release_flags = -g0 -O3 -flto
debug_build_flags = -fstack-protector-strong -g -g3 -ggdb
@@ -99,6 +100,7 @@ build_flags = ${simulator_linux.build_flags} ${simulator_linux.release_flags}
[simulator_macos]
build_unflags = -lGL -fstack-protector-strong
build_flags =
+ -DHAS_LIBBSD
-I/opt/local/include
-I/opt/local/include/freetype2
-I/opt/local/include/SDL2/
@@ -135,5 +137,8 @@ custom_gcc = g++
[env:simulator_windows]
extends = simulator_common
build_src_flags = ${simulator_common.build_src_flags} -fpermissive
-build_flags = ${simulator_common.build_flags} ${simulator_common.debug_build_flags} -IC:\\msys64\\mingw64\\include\\SDL2 -fno-stack-protector -Wl,-subsystem,windows -ldl -lmingw32 -lSDL2main -lSDL2 -lSDL2_net -lopengl32 -lssp
+build_flags = ${simulator_common.build_flags} ${simulator_common.debug_build_flags}
+ -IC:\\msys64\\mingw64\\include\\SDL2 -fno-stack-protector -Wl,-subsystem,windows
+ -ldl -lmingw32 -lSDL2main -lSDL2 -lSDL2_net -lopengl32 -lssp
+ -DHAS_LIBBSD
build_type = debug