diff --git a/Makefile b/Makefile
index fbc42d7c81..5517dbb810 100644
--- a/Makefile
+++ b/Makefile
@@ -32,6 +32,8 @@ DEFINES += -DGLOBAL_CONFIG_DIR='"$(GLOBAL_CONFIG_DIR)"'
ifneq ($(findstring BSD,$(OS)),)
CFLAGS += -DBSD
LDFLAGS += -L/usr/local/lib
+ UDEV_CFLAGS += -I/usr/local/include/libepoll-shim
+ UDEV_LIBS += -lepoll-shim
endif
ifneq ($(findstring DOS,$(OS)),)
diff --git a/input/drivers/udev_input.c b/input/drivers/udev_input.c
index f143a44a30..455c54a1b9 100644
--- a/input/drivers/udev_input.c
+++ b/input/drivers/udev_input.c
@@ -14,7 +14,8 @@
* If not, see .
*/
-/* TODO/FIXME - set this once the kqueue codepath is implemented and working properly */
+/* TODO/FIXME - set this once the kqueue codepath is implemented and working properly,
+ * also remove libepoll-shim from the Makefile when that happens. */
#if 1
#define HAVE_EPOLL
#else
@@ -46,7 +47,9 @@
#include
#include
+#ifdef __linux__
#include
+#endif
#include
#include
@@ -1204,7 +1207,9 @@ static void *udev_input_init(const char *joypad_driver)
udev->joypad = input_joypad_init_driver(joypad_driver, udev);
input_keymaps_init_keyboard_lut(rarch_key_map_linux);
+#ifdef __linux__
linux_terminal_disable_input();
+#endif
#ifndef HAVE_X11
RARCH_WARN("[udev]: Full-screen pointer won't be available.\n");
@@ -1299,7 +1304,11 @@ input_driver_t input_udev = {
udev_input_get_capabilities,
"udev",
udev_input_grab_mouse,
+#ifdef __linux__
linux_terminal_grab_stdin,
+#else
+ NULL,
+#endif
udev_input_set_rumble,
udev_input_get_joypad_driver,
NULL,
diff --git a/input/drivers_joypad/udev_joypad.c b/input/drivers_joypad/udev_joypad.c
index 2841032dda..6146e1e552 100644
--- a/input/drivers_joypad/udev_joypad.c
+++ b/input/drivers_joypad/udev_joypad.c
@@ -25,7 +25,9 @@
#include
#include
#include
+#ifdef __linux__
#include
+#endif
#include
#include