From 5dbb529de9f84e731e26b83525f3f599f1914aca Mon Sep 17 00:00:00 2001
From: David 'Digit' Turner <digit@google.com>
Date: Thu, 14 May 2009 16:00:09 +0200
Subject: [PATCH] Allow the build system to build Objective-C sources.

This is needed to move our modified SDL sources under external/qemu/distrib.
As per joeo's request, this change also enables target Objective-C compilation, letting it error at build time.
---
 core/binary.mk      | 13 +++++++++++++
 core/definitions.mk | 30 ++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+)

diff --git a/core/binary.mk b/core/binary.mk
index b64bc81bd..ddcdc6f59 100644
--- a/core/binary.mk
+++ b/core/binary.mk
@@ -211,6 +211,19 @@ $(c_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.c $(yacc_cpps) $(PR
 -include $(c_objects:%.o=%.P)
 endif
 
+###########################################################
+## ObjC: Compile .m files to .o
+###########################################################
+
+objc_sources := $(filter %.m,$(LOCAL_SRC_FILES))
+objc_objects := $(addprefix $(intermediates)/,$(objc_sources:.m=.o))
+
+ifneq ($(strip $(objc_objects)),)
+$(objc_objects): $(intermediates)/%.o: $(TOPDIR)$(LOCAL_PATH)/%.m $(yacc_cpps) $(PRIVATE_ADDITIONAL_DEPENDENCIES)
+	$(transform-$(PRIVATE_HOST)m-to-o)
+-include $(objc_objects:%.o=%.P)
+endif
+
 ###########################################################
 ## AS: Compile .S files to .o.
 ###########################################################
diff --git a/core/definitions.mk b/core/definitions.mk
index 5631fb99f..069855d8f 100644
--- a/core/definitions.mk
+++ b/core/definitions.mk
@@ -793,6 +793,22 @@ $(transform-s-to-o-no-deps)
 $(hide) $(transform-d-to-p)
 endef
 
+###########################################################
+## Commands for running gcc to compile an Objective-C file
+## This should never happen for target builds but this
+## will error at build time.
+###########################################################
+
+define transform-m-to-o-no-deps
+@echo "target ObjC: $(PRIVATE_MODULE) <= $<"
+$(call transform-c-or-s-to-o-no-deps)
+endef
+
+define transform-m-to-o
+$(transform-m-to-o-no-deps)
+$(hide) $(transform-d-to-p)
+endef
+
 ###########################################################
 ## Commands for running gcc to compile a host C++ file
 ###########################################################
@@ -870,6 +886,20 @@ $(transform-host-s-to-o-no-deps)
 $(transform-d-to-p)
 endef
 
+###########################################################
+## Commands for running gcc to compile a host Objective-C file
+###########################################################
+
+define transform-host-m-to-o-no-deps
+@echo "host ObjC: $(PRIVATE_MODULE) <= $<"
+$(call transform-host-c-or-s-to-o-no-deps)
+endef
+
+define tranform-host-m-to-o
+$(transform-host-m-to-o-no-deps)
+$(transform-d-to-p)
+endef
+
 ###########################################################
 ## Commands for running ar
 ###########################################################