From 3656df42bc310fb0637e81f6dec0273a3bd08ffa Mon Sep 17 00:00:00 2001 From: Daniel Hammer Date: Sat, 8 Mar 2025 01:03:14 +0100 Subject: [PATCH] feat(kernel): Add Objective C development support --- kernel/GNUmakefile | 13 +++++++++++-- kernel/src/ObjC/Test.mm | 5 +++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 kernel/src/ObjC/Test.mm diff --git a/kernel/GNUmakefile b/kernel/GNUmakefile index ca797d5..97304f5 100644 --- a/kernel/GNUmakefile +++ b/kernel/GNUmakefile @@ -23,6 +23,9 @@ CC := cc # User controllable C++ compiler command. CXX := c++ +# User controllable Objective C compiler command. +OBJC := g++ + # User controllable archiver command. AR := ar @@ -200,15 +203,16 @@ override LDFLAGS += \ override SRCFILES := $(shell cd src && find -L * -type f | LC_ALL=C sort) override CFILES := $(filter %.c,$(SRCFILES)) override CXXFILES := $(filter %.cpp,$(SRCFILES)) +override OBJCFILES := $(filter %.mm,$(SRCFILES)) override ASFILES := $(filter %.S,$(SRCFILES)) ifeq ($(ARCH),x86_64) override NASMFILES := $(filter %.asm,$(SRCFILES)) endif -override OBJ := $(addprefix obj-$(ARCH)/,$(CFILES:.c=.c.o) $(CXXFILES:.cpp=.cpp.o) $(ASFILES:.S=.S.o)) +override OBJ := $(addprefix obj-$(ARCH)/,$(CFILES:.c=.c.o) $(CXXFILES:.cpp=.cpp.o) $(OBJCFILES:.mm=.mm.o) $(ASFILES:.S=.S.o)) ifeq ($(ARCH),x86_64) override OBJ += $(addprefix obj-$(ARCH)/,$(NASMFILES:.asm=.asm.o)) endif -override HEADER_DEPS := $(addprefix obj-$(ARCH)/,$(CFILES:.c=.c.d) $(CXXFILES:.cpp=.cpp.d) $(ASFILES:.S=.S.d)) +override HEADER_DEPS := $(addprefix obj-$(ARCH)/,$(CFILES:.c=.c.d) $(CXXFILES:.cpp=.cpp.d) $(OBJCFILES:.mm=.mm.d) $(ASFILES:.S=.S.d)) # Default target. This must come first, before header dependencies. .PHONY: all @@ -254,6 +258,11 @@ obj-$(ARCH)/%.asm.o: src/%.asm GNUmakefile nasm $(NASMFLAGS) $< -o $@ endif +# Compilation rules for *.mm (Objective C) files. +obj-$(ARCH)/%.mm.o: src/%.mm GNUmakefile + mkdir -p "$$(dirname $@)" + $(OBJC) $(CXXFLAGS) $(CPPFLAGS_CXX) -c $< -o $@ + # Remove object files and the final executable. .PHONY: clean clean: diff --git a/kernel/src/ObjC/Test.mm b/kernel/src/ObjC/Test.mm new file mode 100644 index 0000000..5f56c88 --- /dev/null +++ b/kernel/src/ObjC/Test.mm @@ -0,0 +1,5 @@ +extern "C" { + int foobar(){ + return 3; + } +}