Skip to content

You know the game, but in every graphical API I know as well as console

License

Notifications You must be signed in to change notification settings

arf20/arfminesweeper

Repository files navigation

arfminesweeper

This project attempts to answer the first question, the universal question:

How many ways are there to build an application?

The answer is: yes*.

I happen to think that the classic game Minesweeper is a good benchmark for the majority of... things.

So I bring you: Minesweeper, but in every way I could think of.

*: See below

Build on Debian GNU/Linux

Build

Global dependencies: cmake build-essential

Dependencies for main frontends:

curses:     libncurses-dev
drmfb:      libdrm-dev
fltk:       libfltk1.4-dev
gl11:       libgl-dev freeglut3-dev
gl33:       libgl-dev libglfw3-dev
glx:        libgl-dev libx11-dev
gtk3:       libgtk-3-dev
java:       openjdk-17-jdk-headless
motif:      libmotif-dev
qt5:        qtbase5-dev qttools5-dev qttools5-dev-tools
sdl1:       libsdl1.2-dev libsdl-image1.2-dev libsdl-ttf2.0-dev
sdl2:       libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev
sdl3:       libsdl3-dev libsdl3-image-dev libsdl3-ttf-dev
vulkan:     libvulkan-dev
wayland:    libwayland-dev
wxwidgets:  libwxgtk3.2-dev
xaw:        libxaw7-dev
xcb:        libxcb1-dev libxcb-icccm4-dev
xforms:     libforms-dev
xlib:       libx11-dev

Dependencies for kernel module: linux-headers-amd64

Dependencies for BIOS kernel: nasm

Dependencies for UEFI application: gnu-efi binutils-mingw-w64 gcc-mingw-w64 xorriso

Build

mkdir build && cd build
cmake ..
make

Use -DNO_MODULE=TRUE, -DNO_KERNEL=TRUE or -DNO_EFIAPP=TRUE to disable building the linux kernel module target, kernel target or EFI app target

Use -DMODULE_ALL=TRUE to build all modules, -DMODULE_<frontend> to build specific modules

Use -DNO_STATIC to disable all static frontends, -DSTATIC_<frontend> to build specific static frontends

TODO frontends

MAIN TARGET

Toolkit/Library/Thing NAME STATE Linux BSD Mac Win
console console DONE X X X X
vt100 escapes vt100 DONE X X X X
ANSI color escapes ansi DONE X X X X
curses/ncurses curses DONE X X X X
fbdev fbdev DONE X
X11 Xlib xlib DONE X X X X
X11 XCB xcb DONE X X X X
Wayland wayland DONE X X
XForms xforms DONE X X
FLTK fltk WIP X X X X
Motif (Xm/Xt) motif WIP X X
XView (OpenLook/Xt) X X
Athena (Xaw/Xt) xaw WIP X X
Xaw3d X X
X Toolkit (Xt) X X
Tcl/Tk X X X
raylib X X X X
SDL3 sdl3 DONE X X X X
SDL2 sdl2 DONE X X X X
SDL1.2 sdl1 DONE X X X X
DRI DRM fb drmfb WIP X
GLIDE (with Voodoo) X X X
OpenGL GLX glx X X
OpenGL 2.2 FFP/FreeGLUT gl11 DONE X X X X
OpenGL 3.3/GLFW/GLAD 2D gl33 WIP X X X X
OpenGL 3.3/GLFW/GLAD 3D gl3d WIP X X X X
Vulkan/GLFW vulkan WIP X X X X
ImGui X X X X
Gtk2 X X X X
Gtk3 gtk3 DONE X X X X
Gtk4 + libadwaita X X X X
Qt4 X X X X
Qt5 qt5 DONE X X X X
Qt6 X X X X
wxWidgets wxwidgets WIP X X X X
WinAPI win32 WIP X
Win32 GDI gdi WIP X
Direct2D d2d WIP X
.NET WinForms X
.NET WPF X
Win UWP X
WinUI 3 X
.NET MAUI X
Java JNI AWT awt DONE X X X X
Java JNI Swing swing DONE X X X X
Webapp httpd DONE X X X X
Metal X
Objective-C ? X
Swift ? X
  • DONE 18/48 (37%)
  • WIP 10/48 (20%)
  • unattempted 19/48 (39%)

LINUX MODULE TARGET

Exposes a /dev/arfminesweeper character device that you can cat, and echo the same commands as console into

DONE

ANDROID TARGET

Using Android NDK

KERNEL TARGET

Mode type STATE BIOS UEFI
VGA text mode console DONE X X
VGA text mode DONE X X
VGA text w/graphic char DONE X X
VGA graphic mode WIP X X
VESA graphic mode UEFI DONE X X

UEFI APPLICATION TARGET

UEFI console

WIP

HARDWARE TARGET

The only one that doesnt compile against game.c

  • SystemVerilog
  • VHDL

I apologize.

Notes:

gl33 (OpenGL 3.3 GLSL 330 core)

Does not work on Intel iGPUs apparently, for some god unknown reason, maybe the bit shit?

Mutually exclusive with raylib on static builds

Win32

Currently I think it only builds correctly under MSVC

About

You know the game, but in every graphical API I know as well as console

Resources

License

Stars

Watchers

Forks

Packages

No packages published