Yes, changes to gbuild itself are largely made by experimentation. It's
beyond anyone's complete understanding.
Please try this patch, with the file extensions back on *.m.
On Tue, Feb 19, 2019 at 10:39 PM Jim Jagielski <[email protected]> wrote:
>
>
> > On Feb 19, 2019, at 12:05 PM, Damjan Jovanovic <[email protected]>
> wrote:
> >
> > If
> > not, I'll have to make a gb_Library_add_objcobjects API instead.
>
> If I knew how, I'd do it. Looking over the add_objcxxobjects stuff it
> seems like a maze of twisty little passages
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
diff --git a/main/apple_remote/Library_AppleRemote.mk b/main/apple_remote/Library_AppleRemote.mk
index 8c7aedd267..0d28cf3418 100644
--- a/main/apple_remote/Library_AppleRemote.mk
+++ b/main/apple_remote/Library_AppleRemote.mk
@@ -42,7 +42,7 @@ $(eval $(call gb_Library_add_libs,AppleRemote,\
-framework IOKit \
))
-$(eval $(call gb_Library_add_objcxxobjects,AppleRemote,\
+$(eval $(call gb_Library_add_objcobjects,AppleRemote,\
apple_remote/source/AppleRemote \
apple_remote/source/RemoteControl \
apple_remote/source/RemoteControlContainer \
diff --git a/main/solenv/gbuild/Library.mk b/main/solenv/gbuild/Library.mk
index 591b5392a0..42c78fda2b 100644
--- a/main/solenv/gbuild/Library.mk
+++ b/main/solenv/gbuild/Library.mk
@@ -113,6 +113,8 @@ $(eval $(foreach method,\
add_cobjects \
add_cxxobject \
add_cxxobjects \
+ add_objcobject \
+ add_objcobjects \
add_objcxxobject \
add_objcxxobjects \
add_exception_objects \
@@ -125,6 +127,8 @@ $(eval $(foreach method,\
set_cflags \
add_cxxflags \
set_cxxflags \
+ add_objcflags \
+ set_objcflags \
add_objcxxflags \
set_objcxxflags \
add_defs \
diff --git a/main/solenv/gbuild/LinkTarget.mk b/main/solenv/gbuild/LinkTarget.mk
index f19910e17b..c67c1c5f15 100644
--- a/main/solenv/gbuild/LinkTarget.mk
+++ b/main/solenv/gbuild/LinkTarget.mk
@@ -25,6 +25,7 @@
# CPPFLAGS
# CFLAGS
# CXXFLAGS
+# OBJCFLAGS
# OBJCXXFLAGS
# JAVAFLAGS
# LDFLAGS
@@ -34,11 +35,13 @@
ifeq ($(gb_DEBUGGING),TRUE)
CFLAGS ?= $(gb_COMPILEROPTFLAGS) $(gb_DEBUG_CFLAGS)
CXXFLAGS ?= $(gb_COMPILEROPTFLAGS) $(gb_DEBUG_CFLAGS)
+OBJCFLAGS ?= $(gb_COMPILEROPTFLAGS) $(gb_DEBUG_CFLAGS)
OBJCXXFLAGS ?= $(gb_COMPILEROPTFLAGS) $(gb_DEBUG_CFLAGS)
JAVAFLAGS ?= -g
else
CFLAGS ?= $(gb_COMPILEROPTFLAGS)
CXXFLAGS ?= $(gb_COMPILEROPTFLAGS)
+OBJCFLAGS ?= $(gb_COMPILEROPTFLAGS)
OBJCXXFLAGS ?= $(gb_COMPILEROPTFLAGS)
endif
@@ -206,6 +209,38 @@ endif
gb_GenCxxObject_GenCxxObject =
+
+# ObjCObject class
+#
+gb_ObjCObject_REPOS := $(gb_REPOS)
+
+gb_ObjCObject_get_source = $(1)/$(2).m
+# defined by platform
+# gb_ObjCObject__command
+
+define gb_ObjCObject__rules
+$$(call gb_ObjCObject_get_target,%) : $$(call gb_ObjCObject_get_source,$(1),%)
+ $$(call gb_ObjCObject__command,$$@,$$*,$$<,$$(call gb_ObjCObject_get_dep_target,$$*))
+
+ifeq ($(gb_FULLDEPS),$(true))
+$$(call gb_ObjCObject_get_dep_target,%) : $$(call gb_ObjCObject_get_target,%)
+ $$(if $$(wildcard $$@),touch $$@,\
+ $$(call gb_Object__command_dep,$$@,$$(call gb_ObjCObject_get_target,$$*)))
+endif
+
+endef
+
+$(foreach repo,$(gb_ObjCObject_REPOS),$(eval $(call gb_ObjCObject__rules,$(repo))))
+
+ifeq ($(gb_FULLDEPS),$(true))
+$(call gb_ObjCObject_get_dep_target,%) :
+ $(eval $(call gb_Output_error,Unable to find Objective C file $(call gb_ObjCObject_get_source,,$*) in repositories: $(gb_ObjCObject_REPOS)))
+endif
+
+gb_ObjCObject_ObjCObject =
+
+
+
# ObjCxxObject class
#
gb_ObjCxxObject_REPOS := $(gb_REPOS)
@@ -255,6 +290,8 @@ $(call gb_LinkTarget_get_clean_target,%) :
$(foreach object,$(COBJECTS),$(call gb_CObject_get_dep_target,$(object))) \
$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_dep_target,$(object))) \
+ $(foreach object,$(OBJCOBJECTS),$(call gb_ObjCObject_get_target,$(object))) \
+ $(foreach object,$(OBJCOBJECTS),$(call gb_ObjCObject_get_dep_target,$(object))) \
$(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_target,$(object))) \
$(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_dep_target,$(object))) \
$(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \
@@ -279,9 +316,10 @@ $(call gb_Helper_abbreviate_dirs,\
RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),200,\
$(foreach object,$(3),$(call gb_CObject_get_dep_target,$(object))) \
$(foreach object,$(4),$(call gb_CxxObject_get_dep_target,$(object))) \
- $(foreach object,$(5),$(call gb_ObjCxxObject_get_dep_target,$(object)))\
- $(foreach object,$(6),$(call gb_GenCObject_get_dep_target,$(object)))\
- $(foreach object,$(7),$(call gb_GenCxxObject_get_dep_target,$(object)))\
+ $(foreach object,$(5),$(call gb_ObjCObject_get_dep_target,$(object)))\
+ $(foreach object,$(6),$(call gb_ObjCxxObject_get_dep_target,$(object)))\
+ $(foreach object,$(7),$(call gb_GenCObject_get_dep_target,$(object)))\
+ $(foreach object,$(8),$(call gb_GenCxxObject_get_dep_target,$(object)))\
) && \
cat $${RESPONSEFILE} /dev/null | xargs -n 200 cat > $(1)) && \
rm -f $${RESPONSEFILE}
@@ -294,7 +332,7 @@ $(call gb_LinkTarget_get_target,%) : $(call gb_LinkTarget_get_headers_target,%)
ifeq ($(gb_FULLDEPS),$(true))
$(call gb_LinkTarget_get_target,%) : $(call gb_LinkTarget_get_dep_target,%)
$(call gb_LinkTarget_get_dep_target,%) : | $(call gb_LinkTarget_get_headers_target,%)
- $(call gb_LinkTarget__command_dep,$@,$*,$(COBJECTS),$(CXXOBJECTS),$(OBJCXXOBJECTS),$(GENCOBJECTS),$(GENCXXOBJECTS))
+ $(call gb_LinkTarget__command_dep,$@,$*,$(COBJECTS),$(CXXOBJECTS),$(OBJCOBJECTS),$(OBJCXXOBJECTS),$(GENCOBJECTS),$(GENCXXOBJECTS))
endif
# Ok, this is some dark voodoo: When declaring a linktarget with
@@ -372,6 +410,8 @@ $(call gb_LinkTarget_get_target,$(1)) : COBJECTS :=
$(call gb_LinkTarget_get_clean_target,$(1)) \
$(call gb_LinkTarget_get_target,$(1)) : CXXOBJECTS :=
$(call gb_LinkTarget_get_clean_target,$(1)) \
+$(call gb_LinkTarget_get_target,$(1)) : OBJCOBJECTS :=
+$(call gb_LinkTarget_get_clean_target,$(1)) \
$(call gb_LinkTarget_get_target,$(1)) : OBJCXXOBJECTS :=
$(call gb_LinkTarget_get_clean_target,$(1)) \
$(call gb_LinkTarget_get_target,$(1)) : GENCOBJECTS :=
@@ -383,6 +423,7 @@ $(call gb_LinkTarget_get_headers_target,$(1)) \
$(call gb_LinkTarget_get_target,$(1)) : T_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS)
$(call gb_LinkTarget_get_headers_target,$(1)) \
$(call gb_LinkTarget_get_target,$(1)) : PCH_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS) $$(CXXFLAGS)
+$(call gb_LinkTarget_get_target,$(1)) : T_OBJCFLAGS := $$(gb_LinkTarget_OBJCFLAGS)
$(call gb_LinkTarget_get_target,$(1)) : T_OBJCXXFLAGS := $$(gb_LinkTarget_OBJCXXFLAGS)
$(call gb_LinkTarget_get_headers_target,$(1)) \
$(call gb_LinkTarget_get_target,$(1)) : DEFS := $$(gb_LinkTarget_DEFAULTDEFS) $(CPPFLAGS)
@@ -410,12 +451,14 @@ ifeq ($(gb_FULLDEPS),$(true))
-include $(call gb_LinkTarget_get_dep_target,$(1))
$(call gb_LinkTarget_get_dep_target,$(1)) : COBJECTS :=
$(call gb_LinkTarget_get_dep_target,$(1)) : CXXOBJECTS :=
+$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCOBJECTS :=
$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCXXOBJECTS :=
$(call gb_LinkTarget_get_dep_target,$(1)) : GENCOBJECTS :=
$(call gb_LinkTarget_get_dep_target,$(1)) : GENCXXOBJECTS :=
$(call gb_LinkTarget_get_dep_target,$(1)) : T_CFLAGS := $$(gb_LinkTarget_CFLAGS)
$(call gb_LinkTarget_get_dep_target,$(1)) : T_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS)
$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS) $$(CXXFLAGS)
+$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCFLAGS := $$(gb_LinkTarget_OBJCFLAGS)
$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCXXFLAGS := $$(gb_LinkTarget_OBJCXXFLAGS)
$(call gb_LinkTarget_get_dep_target,$(1)) : DEFS := $$(gb_LinkTarget_DEFAULTDEFS) $(CPPFLAGS)
$(call gb_LinkTarget_get_dep_target,$(1)) : PCH_DEFS := $$(gb_LinkTarget_DEFAULTDEFS) $(CPPFLAGS)
@@ -506,6 +549,25 @@ endif
endef
+define gb_LinkTarget_add_objcflags
+$(call gb_LinkTarget_get_target,$(1)) : T_OBJCFLAGS += $(2)
+ifeq ($(gb_FULLDEPS),$(true))
+$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCFLAGS += $(2)
+endif
+endef
+
+define gb_LinkTarget_set_objcflags
+ifeq (,)
+$$(call gb_Output_error,\
+ gb_LinkTarget_set_objcflags: use gb_LinkTarget_add_objcflags instead.)
+else
+$(call gb_LinkTarget_get_target,$(1)) : T_OBJCFLAGS := $(2)
+ifeq ($(gb_FULLDEPS),$(true))
+$(call gb_LinkTarget_get_dep_target,$(1)) : T_OBJCFLAGS := $(2)
+endif
+endif
+endef
+
define gb_LinkTarget_add_objcxxflags
$(call gb_LinkTarget_get_target,$(1)) : T_OBJCXXFLAGS += $(2)
ifeq ($(gb_FULLDEPS),$(true))
@@ -541,6 +603,10 @@ define gb_LinkTarget_set_gencxx_optimization
$(foreach object,$(1),$(eval $(call gb_GenCxxObject_get_target,$(object)) : CXXFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(CXXFLAGS)) $(2)))
endef
+define gb_LinkTarget_set_objc_optimization
+$(foreach object,$(1),$(eval $(call gb_ObjCObject_get_target,$(object)) : OBJCFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(OBJCFLAGS)) $(2)))
+endef
+
define gb_LinkTarget_set_objcxx_optimization
$(foreach object,$(1),$(eval $(call gb_ObjCxxObject_get_target,$(object)) : OBJCXXFLAGS := $(filter-out $(gb_COMPILEROPTFLAGS),$(OBJCXXFLAGS)) $(2)))
endef
@@ -814,6 +880,21 @@ endif
endef
+define gb_LinkTarget_add_objcobject
+$(call gb_LinkTarget_get_target,$(1)) : OBJCOBJECTS += $(2)
+$(call gb_LinkTarget_get_clean_target,$(1)) : OBJCOBJECTS += $(2)
+
+$(call gb_LinkTarget_get_target,$(1)) : $(call gb_ObjCObject_get_target,$(2))
+$(call gb_ObjCObject_get_target,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1))
+$(call gb_ObjCObject_get_target,$(2)) : T_OBJCFLAGS += $(3)
+
+ifeq ($(gb_FULLDEPS),$(true))
+$(call gb_LinkTarget_get_dep_target,$(1)) : OBJCOBJECTS += $(2)
+$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_ObjCObject_get_dep_target,$(2))
+endif
+
+endef
+
define gb_LinkTarget_add_objcxxobject
$(call gb_LinkTarget_get_target,$(1)) : OBJCXXOBJECTS += $(2)
$(call gb_LinkTarget_get_clean_target,$(1)) : OBJCXXOBJECTS += $(2)
@@ -879,6 +960,10 @@ define gb_LinkTarget_add_cxxobjects
$(foreach obj,$(2),$(call gb_LinkTarget_add_cxxobject,$(1),$(obj),$(3)))
endef
+define gb_LinkTarget_add_objcobjects
+$(foreach obj,$(2),$(call gb_LinkTarget_add_objcobject,$(1),$(obj),$(3)))
+endef
+
define gb_LinkTarget_add_objcxxobjects
$(foreach obj,$(2),$(call gb_LinkTarget_add_objcxxobject,$(1),$(obj),$(3)))
endef
diff --git a/main/solenv/gbuild/platform/macosx.mk b/main/solenv/gbuild/platform/macosx.mk
index 1e814fd8ea..d859e3a78f 100644
--- a/main/solenv/gbuild/platform/macosx.mk
+++ b/main/solenv/gbuild/platform/macosx.mk
@@ -110,6 +110,7 @@ endif
# these are to get g++ to switch to Objective-C++ mode
# (see toolkit module for a case where it is necessary to do it this way)
+gb_OBJCFLAGS := -x objective-c -fobjc-exceptions
gb_OBJCXXFLAGS := -x objective-c++ -fobjc-exceptions
ifneq ($(MACOSX_DEPLOYMENT_TARGET),)
@@ -231,6 +232,25 @@ $(call gb_Helper_abbreviate_dirs,\
endef
+# ObjCObject class
+
+define gb_ObjCObject__command
+$(call gb_Output_announce,$(2),$(true),OC ,3)
+$(call gb_Helper_abbreviate_dirs,\
+ mkdir -p $(dir $(1)) $(dir $(4)) && \
+ $(gb_CC) \
+ $(DEFS) \
+ $(T_OBJCFLAGS) \
+ $(OBJCFLAGS) \
+ -c $(3) \
+ -o $(1) \
+ -MMD -MT $(1) \
+ -MF $(4) \
+ -I$(dir $(3)) \
+ $(INCLUDE_STL) $(INCLUDE))
+endef
+
+
# ObjCxxObject class
define gb_ObjCxxObject__command
@@ -270,6 +290,7 @@ endef
gb_LinkTarget_CFLAGS := $(gb_CFLAGS) $(gb_CFLAGS_WERROR)
gb_LinkTarget_CXXFLAGS := $(gb_CXXFLAGS) $(gb_CXXFLAGS_WERROR)
+gb_LinkTarget_OBJCFLAGS := $(gb_CFLAGS) $(gb_CFLAGS_WERROR) $(gb_OBJCFLAGS)
gb_LinkTarget_OBJCXXFLAGS := $(gb_CXXFLAGS) $(gb_CXXFLAGS_WERROR) $(gb_OBJCXXFLAGS)
gb_LinkTarget_INCLUDE := $(filter-out %/stl, $(subst -I. , ,$(SOLARINC)))
@@ -310,6 +331,7 @@ $(call gb_Helper_abbreviate_dirs,\
$(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \
$(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
+ $(foreach object,$(OBJCOBJECTS),$(call gb_ObjCObject_get_target,$(object))) \
$(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_target,$(object))) \
$(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \
$(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \
@@ -330,6 +352,7 @@ $(call gb_Helper_abbreviate_dirs,\
$(gb_AR) -rsu $(1) \
$(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
+ $(foreach object,$(OBJCOBJECTS),$(call gb_ObjCObject_get_target,$(object))) \
$(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_target,$(object))) \
$(foreach object,$(GENCOBJECTS),$(call gb_GenCObject_get_target,$(object))) \
$(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]