# Makefile for desktop (GUI desktop environment) on MontaukOS # Copyright (c) 2025 Daniel Hammer MAKEFLAGS += -rR .SUFFIXES: # ---- Toolchain ---- TOOLCHAIN_PREFIX := $(shell cd ../../.. && pwd)/toolchain/local/bin/x86_64-montauk- ifeq ($(wildcard $(TOOLCHAIN_PREFIX)gcc),) CXX = $(error x86_64-montauk toolchain not found. Run ./toolchain/build-montauk-toolchain.sh first) else CXX := $(TOOLCHAIN_PREFIX)g++ endif # ---- Paths ---- PROG_INC := ../../include JPEG_LIB := ../../lib/libjpeg LIBC_LIB := ../../lib/libc BEARSSL := ../../lib/bearssl LOADER_LIB := ../../lib/libloader/liblibloader.a LINK_LD := ../../link.ld BINDIR := ../../bin OBJDIR := obj # ---- C++ compiler flags ---- CXXFLAGS := \ -std=gnu++20 \ -g -O2 -pipe \ -Wall \ -Wextra \ -Wno-unused-parameter \ -Wno-unused-function \ -ffreestanding \ -fno-stack-protector \ -fno-stack-check \ -fno-rtti \ -fno-exceptions \ -ffunction-sections \ -fdata-sections \ -msse \ -msse2 \ -MMD -MP \ -I $(PROG_INC) \ -isystem $(PROG_INC)/libc \ -I $(BEARSSL)/inc # ---- Linker flags ---- LDFLAGS := \ -nostdlib \ -Wl,--gc-sections \ -T $(LINK_LD) # ---- C++ source files ---- CORE_SRCS := main.cpp window.cpp panel.cpp messaging.cpp desktop_icons.cpp wifi.cpp battery.cpp brightness.cpp compose.cpp input.cpp dialogs.cpp launcher.cpp desktop_builtin.cpp desktop_catalog.cpp consent.cpp font_data.cpp stb_truetype_impl.cpp APP_SRCS := $(sort $(shell find apps -name '*.cpp' -print)) SRCS := $(CORE_SRCS) $(APP_SRCS) OBJS := $(addprefix $(OBJDIR)/,$(SRCS:.cpp=.o)) # ---- Target ---- TARGET := $(BINDIR)/os/desktop.elf .PHONY: all clean all: $(TARGET) # ---- Libraries ---- LIBS := $(LOADER_LIB) $(JPEG_LIB)/libjpeg.a $(BEARSSL)/libbearssl.a $(LIBC_LIB)/liblibc.a $(TARGET): $(OBJS) $(LIBS) $(LINK_LD) Makefile mkdir -p $(BINDIR)/os $(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -o $@ # Sources $(OBJDIR)/%.o: %.cpp Makefile mkdir -p $(dir $@) $(CXX) $(CXXFLAGS) -c $< -o $@ -include $(OBJS:.o=.d) clean: rm -rf $(OBJDIR) $(TARGET)