nuttx-apps/graphics/microwindows/Makefile
Acfboy ae601e2892 graphics/microwindows: introduce Microwindows graphics support to NuttX
This commit integrates the Microwindows core into the NuttX apps
build system:

- Downloads a pinned upstream commit during build and compiles the
  engine, drivers and precompiled bitmap fonts via Microwindows'
  Objects.rules files.
- Adds Kconfig options for framebuffer path, keyboard driver
  selection (event-mode, raw byte-stream, none, custom), and
  mouse/touchscreen driver selection (relative, touchscreen, none,
  custom).
- Uses the MWCONFIG_FILE mechanism to inject NuttX-specific
  configuration (mwconfig.nuttx) without modifying upstream headers.
- The NuttX screen, keyboard, mouse and touchscreen drivers are
  pulled from upstream Microwindows. Driver selection is controlled
  via ARCH=NUTTX and Kconfig-driven KEYBOARD/MOUSE variables in
  the Makefile.
- Depends on VIDEO_FB for the framebuffer device.
- Builds the mwin library (Win32 API layer) when MICROWINDOWS_MWIN
  is enabled.

Co-authored-by: Pavel Pisa <ppisa@pikron.com>
Signed-off-by: Pavel Pisa <ppisa@pikron.com>
Signed-off-by: Acfboy <AcfboyU@outlook.com>
2026-07-28 09:53:05 +02:00

154 lines
5.2 KiB
Makefile

############################################################################
# apps/graphics/microwindows/Makefile
#
# SPDX-License-Identifier: Apache-2.0
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership. The
# ASF licenses this file to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
############################################################################
include $(APPDIR)/Make.defs
# Microwindows graphic library
MICROWINDOWS_DIR = .
MICROWINDOWS_DIR_NAME = microwindows
# Set up build configuration and environment
WD := ${shell echo $(CURDIR) | sed -e 's/ /\\ /g'}
MICROWINDOWS_COMMIT_HASH := 1f269127b991d01dea5784eacee321a23e34d3d5
CONFIG_GRAPH_MICROWINDOWS_URL ?= https://codeload.github.com/ghaerr/microwindows/zip/$(MICROWINDOWS_COMMIT_HASH)
MICROWINDOWS_TARBALL := microwindows-$(MICROWINDOWS_COMMIT_HASH).zip
MICROWINDOWS_UNPACKNAME = microwindows
UNPACK ?= unzip -o $(if $(V),,-q)
CURL ?= curl -L $(if $(V),,-Ss)
MICROWINDOWS_UNPACKDIR = $(WD)/$(MICROWINDOWS_UNPACKNAME)
$(MICROWINDOWS_TARBALL):
$(ECHO_BEGIN)"Downloading: $(MICROWINDOWS_TARBALL)"
$(Q) $(CURL) -o $(MICROWINDOWS_TARBALL) $(CONFIG_GRAPH_MICROWINDOWS_URL)
$(ECHO_END)
$(MICROWINDOWS_UNPACKNAME): $(MICROWINDOWS_TARBALL)
$(ECHO_BEGIN)"Unpacking: $(MICROWINDOWS_TARBALL) -> $(MICROWINDOWS_UNPACKNAME)"
$(Q) $(UNPACK) $(MICROWINDOWS_TARBALL)
$(Q) mv microwindows-$(MICROWINDOWS_COMMIT_HASH) $(MICROWINDOWS_UNPACKNAME)
$(Q) touch $(MICROWINDOWS_UNPACKNAME)
$(ECHO_END)
# Download and unpack tarball if no git repo found
ifeq ($(wildcard $(MICROWINDOWS_UNPACKNAME)/.git),)
context:: $(MICROWINDOWS_UNPACKNAME)
distclean::
$(call DELDIR, $(MICROWINDOWS_UNPACKNAME))
$(call DELFILE, $(MICROWINDOWS_TARBALL))
endif
CFLAGS += -Wno-undef
CFLAGS += -Wno-shadow
CFLAGS += ${INCDIR_PREFIX}$(APPDIR)/graphics/microwindows/microwindows/src/drivers
CFLAGS += -DNUTTX_FB_PATH=\"$(CONFIG_MICROWINDOWS_FB_PATH)\"
ifdef CONFIG_MICROWINDOWS_KBD_EVENT_PATH
CFLAGS += -DNUTTX_KBD_EVENT_PATH=\"$(CONFIG_MICROWINDOWS_KBD_EVENT_PATH)\"
endif
ifdef CONFIG_MICROWINDOWS_KBD_RAW_PATH
CFLAGS += -DNUTTX_KBD_RAW_PATH=\"$(CONFIG_MICROWINDOWS_KBD_RAW_PATH)\"
endif
ifdef CONFIG_MICROWINDOWS_MOUSE_PATH
CFLAGS += -DNUTTX_MOUSE_PATH=\"$(CONFIG_MICROWINDOWS_MOUSE_PATH)\"
endif
ifdef CONFIG_MICROWINDOWS_TS_PATH
CFLAGS += -DNUTTX_TOUCHSCREEN_PATH=\"$(CONFIG_MICROWINDOWS_TS_PATH)\"
endif
MW_DIR_OBJ = $(WD)/$(MICROWINDOWS_DIR_NAME)/src
# Select NuttX drivers via Microwindows Objects.rules
ARCH = NUTTX
ifeq ($(CONFIG_MICROWINDOWS_KBD_EVENT),y)
KEYBOARD = NUTTXKBD
else ifeq ($(CONFIG_MICROWINDOWS_KBD_RAW),y)
KEYBOARD = NUTTXRAWKBD
else ifeq ($(CONFIG_MICROWINDOWS_KBD_NONE),y)
KEYBOARD = NOKBD
else ifeq ($(CONFIG_MICROWINDOWS_KBD_CUSTOM),y)
KEYBOARD = CUSTOM
endif
ifeq ($(CONFIG_MICROWINDOWS_MOUSE_RELATIVE),y)
MOUSE = NUTTXMOUSE
else ifeq ($(CONFIG_MICROWINDOWS_MOUSE_TS),y)
MOUSE = NUTTXTOUCH
else ifeq ($(CONFIG_MICROWINDOWS_MOUSE_NONE),y)
MOUSE = NOMOUSE
else ifeq ($(CONFIG_MICROWINDOWS_MOUSE_CUSTOM),y)
MOUSE = CUSTOM
endif
-include microwindows/src/engine/Objects.rules
-include microwindows/src/drivers/Objects.rules
-include microwindows/src/fonts/Objects.rules
CSRCS += $(MW_CORE_OBJS:%.o=%.c)
ifneq ($(CONFIG_MICROWINDOWS_MWIN),)
# Win32 API
MWIN_CORE_SRCS = microwindows/src/mwin/winmain.c
MWIN_CORE_SRCS += microwindows/src/mwin/winuser.c
MWIN_CORE_SRCS += microwindows/src/mwin/wingdi.c
MWIN_CORE_SRCS += microwindows/src/mwin/winexpos.c
MWIN_CORE_SRCS += microwindows/src/mwin/winclip.c
MWIN_CORE_SRCS += microwindows/src/mwin/winevent.c
MWIN_CORE_SRCS += microwindows/src/mwin/windefw.c
MWIN_CORE_SRCS += microwindows/src/mwin/winrgn.c
MWIN_CORE_SRCS += microwindows/src/mwin/winfont.c
MWIN_CORE_SRCS += microwindows/src/mwin/winsbar.c
MWIN_CORE_SRCS += microwindows/src/mwin/winres.c
# mwin winlib
WINLIB_SRCS = microwindows/src/mwin/winlib/draw3d.c
WINLIB_SRCS += microwindows/src/mwin/winlib/fastfill.c
WINLIB_SRCS += microwindows/src/mwin/winlib/windlg.c
WINLIB_SRCS += microwindows/src/mwin/winlib/graph3d.c
WINLIB_SRCS += microwindows/src/mwin/winlib/caret.c
WINLIB_SRCS += microwindows/src/mwin/winlib/static.c
WINLIB_SRCS += microwindows/src/mwin/winlib/button.c
WINLIB_SRCS += microwindows/src/mwin/winlib/newedit.c
WINLIB_SRCS += microwindows/src/mwin/winlib/newlistbox.c
WINLIB_SRCS += microwindows/src/mwin/winlib/combobox.c
WINLIB_SRCS += microwindows/src/mwin/winlib/progbar.c
WINLIB_SRCS += microwindows/src/mwin/winlib/scrlbar.c
WINLIB_SRCS += microwindows/src/mwin/winlib/medit.c
WINLIB_SRCS += microwindows/src/mwin/winlib/ptinsid.c
WINLIB_SRCS += microwindows/src/mwin/winlib/insetr.c
CSRCS += $(MWIN_CORE_SRCS) $(WINLIB_SRCS)
CFLAGS += -DNOGDI
endif
include $(APPDIR)/Application.mk