diff options
author | Michael Stahl <mst@openoffice.org> | 2011-01-27 14:44:14 +0100 |
---|---|---|
committer | Michael Stahl <mst@openoffice.org> | 2011-01-27 14:44:14 +0100 |
commit | 847b8c8b37d7f199b5f56f8e19343c743be8f85c (patch) | |
tree | 5b8e208d6f3b7ef8b07f932f69108f7d105fffc6 | |
parent | fcf6e35bfb3d6be351326b612102f738115472b2 (diff) |
gnumake3: add GenCxxObject class, for generated C++ files
-rw-r--r-- | solenv/gbuild/Executable.mk | 1 | ||||
-rw-r--r-- | solenv/gbuild/Library.mk | 1 | ||||
-rw-r--r-- | solenv/gbuild/LinkTarget.mk | 68 | ||||
-rw-r--r-- | solenv/gbuild/StaticLibrary.mk | 1 | ||||
-rw-r--r-- | solenv/gbuild/TargetLocations.mk | 4 | ||||
-rwxr-xr-x | solenv/gbuild/platform/linux.mk | 5 | ||||
-rwxr-xr-x | solenv/gbuild/platform/macosx.mk | 6 | ||||
-rwxr-xr-x | solenv/gbuild/platform/solaris.mk | 5 | ||||
-rwxr-xr-x | solenv/gbuild/platform/windows.mk | 4 |
9 files changed, 87 insertions, 8 deletions
diff --git a/solenv/gbuild/Executable.mk b/solenv/gbuild/Executable.mk index 67cebd99ff67..a1cf1c34856b 100644 --- a/solenv/gbuild/Executable.mk +++ b/solenv/gbuild/Executable.mk @@ -71,6 +71,7 @@ $(eval $(foreach method,\ add_objcxxobjects \ add_exception_objects \ add_noexception_objects \ + add_generated_exception_objects \ set_cflags \ set_cxxflags \ set_objcxxflags \ diff --git a/solenv/gbuild/Library.mk b/solenv/gbuild/Library.mk index e0292ec8ffe8..5ab1eeaf5ec4 100644 --- a/solenv/gbuild/Library.mk +++ b/solenv/gbuild/Library.mk @@ -110,6 +110,7 @@ $(eval $(foreach method,\ add_objcxxobjects \ add_exception_objects \ add_noexception_objects \ + add_generated_exception_objects \ set_cflags \ set_cxxflags \ set_objcxxflags \ diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk index 1f4aba5562a4..c16740f3a3f0 100644 --- a/solenv/gbuild/LinkTarget.mk +++ b/solenv/gbuild/LinkTarget.mk @@ -138,6 +138,38 @@ endif gb_CxxObject_CxxObject = +# GenCxxObject class + +gb_GenCxxObject_get_source = $(WORKDIR)/$(1).cxx +# defined by platform +# gb_CxxObject__command + +# This rule generates an "always rebuild" dep file, to have something to +# include. The dep file will be overridden on the fly, when the object is +# compiled. +ifeq ($(gb_FULLDEPS),$(true)) +define gb_GenCxxObject__command_dep +mkdir -p $(dir $(1)) && \ + echo '$(call gb_GenCxxObject_get_target,$(2)) : $$(gb_Helper_PHONY)' > $(1) +endef +else +gb_GenCxxObject__command_dep = +endif + +$(call gb_GenCxxObject_get_target,%) : $(call gb_GenCxxObject_get_source,%) + $(call gb_CxxObject__command,$@,$*,$<) + +ifeq ($(gb_FULLDEPS),$(true)) +$(call gb_GenCxxObject_get_dep_target,%) : $(call gb_GenCxxObject_get_source,%) + $(call gb_GenCxxObject__command_dep,$@,$*,$<) + +$(call gb_GenCxxObject_get_dep_target,%) : + $(eval $(call gb_Output_error,Unable to find generated C++ file $(call gb_GenCxxObject_get_source,$*) in WORKDIR.)) +endif + +gb_GenCxxObject_GenCxxObject = + + # ObjCxxObject class # gb_ObjCxxObject_REPOS := $(gb_REPOS) @@ -199,6 +231,8 @@ $(call gb_LinkTarget_get_clean_target,%) : $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_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,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ + $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_dep_target,$(object))) \ $(call gb_LinkTarget_get_target,$*) \ $(call gb_LinkTarget_get_dep_target,$*) \ $(call gb_LinkTarget_get_headers_target,$*) \ @@ -217,7 +251,9 @@ $(call gb_Helper_abbreviate_dirs,\ RESPONSEFILE=$(call var2file,$(call uniqname),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,$(5),$(call gb_ObjCxxObject_get_dep_target,$(object)))\ + $(foreach object,$(6),$(call gb_GenCxxObject_get_dep_target,$(object)))\ + ) && \ cat $${RESPONSEFILE} |xargs -n 200 cat > $(1)) && \ rm -f $${RESPONSEFILE} @@ -229,7 +265,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)) + $(call gb_LinkTarget__command_dep,$@,$*,$(COBJECTS),$(CXXOBJECTS),$(OBJCXXOBJECTS),$(GENCXXOBJECTS)) endif # Ok, this is some dark voodoo: When declaring a linktarget with @@ -267,7 +303,7 @@ $(call gb_LinkTarget_get_headers_target,%) : $(call gb_LinkTarget_get_external_h # - gb_LinkTarget_get_target links the objects into a file in WORKDIR. # gb_LinkTarget_get_target depends on gb_LinkTarget_get_headers_target which in # turn depends gb_LinkTarget_get_external_headers_target. - # gb_LinkTarget_get_target depends additionally on the objects, which in turn +# gb_LinkTarget_get_target depends additionally on the objects, which in turn # depend build-order only on the gb_LinkTarget_get_headers_target. The build # order-only dependency ensures all headers to be there for compiling and # dependency generation without causing all objects to be rebuild when one @@ -300,6 +336,8 @@ $(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)) : OBJCXXOBJECTS := +$(call gb_LinkTarget_get_clean_target,$(1)) \ +$(call gb_LinkTarget_get_target,$(1)) : GENCXXOBJECTS := $(call gb_LinkTarget_get_headers_target,$(1)) \ $(call gb_LinkTarget_get_target,$(1)) : CFLAGS := $$(gb_LinkTarget_CFLAGS) $(call gb_LinkTarget_get_headers_target,$(1)) \ @@ -334,6 +372,7 @@ endif $(call gb_LinkTarget_get_dep_target,$(1)) : COBJECTS := $(call gb_LinkTarget_get_dep_target,$(1)) : CXXOBJECTS := $(call gb_LinkTarget_get_dep_target,$(1)) : OBJCXXOBJECTS := +$(call gb_LinkTarget_get_dep_target,$(1)) : GENCXXOBJECTS := $(call gb_LinkTarget_get_dep_target,$(1)) : CFLAGS := $$(gb_LinkTarget_CFLAGS) $(call gb_LinkTarget_get_dep_target,$(1)) : CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS) $(call gb_LinkTarget_get_dep_target,$(1)) : PCH_CXXFLAGS := $$(gb_LinkTarget_CXXFLAGS) @@ -484,6 +523,21 @@ endif endef +define gb_LinkTarget_add_generated_cxx_object +$(call gb_LinkTarget_get_target,$(1)) : GENCXXOBJECTS += $(2) +$(call gb_LinkTarget_get_clean_target,$(1)) : GENCXXOBJECTS += $(2) + +$(call gb_LinkTarget_get_target,$(1)) : $(call gb_GenCxxObject_get_target,$(2)) +$(call gb_GenCxxObject_get_source,$(2)) : | $(call gb_LinkTarget_get_headers_target,$(1)) +$(call gb_GenCxxObject_get_target,$(2)) : CXXFLAGS += $(3) + +ifeq ($(gb_FULLDEPS),$(true)) +$(call gb_LinkTarget_get_dep_target,$(1)) : GENCXXOBJECTS += $(2) +$(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_GenCxxObject_get_dep_target,$(2)) +endif + +endef + define gb_LinkTarget_add_noexception_object $(call gb_LinkTarget_add_cxxobject,$(1),$(2),$(gb_LinkTarget_NOEXCEPTIONFLAGS)) endef @@ -512,6 +566,14 @@ define gb_LinkTarget_add_exception_objects $(foreach obj,$(2),$(call gb_LinkTarget_add_exception_object,$(1),$(obj))) endef +define gb_LinkTarget_add_generated_exception_object +$(call gb_LinkTarget_add_generated_cxx_object,$(1),$(2),$(gb_LinkTarget_EXCEPTIONFLAGS)) +endef + +define gb_LinkTarget_add_generated_exception_objects +$(foreach obj,$(2),$(call gb_LinkTarget_add_generated_exception_object,$(1),$(obj))) +endef + define gb_LinkTarget_set_targettype $(call gb_LinkTarget_get_target,$(1)) \ $(call gb_LinkTarget_get_dep_target,$(1)) : TARGETTYPE := $(2) diff --git a/solenv/gbuild/StaticLibrary.mk b/solenv/gbuild/StaticLibrary.mk index a0f2ec120326..a2521bc4d242 100644 --- a/solenv/gbuild/StaticLibrary.mk +++ b/solenv/gbuild/StaticLibrary.mk @@ -89,6 +89,7 @@ $(eval $(foreach method,\ add_objcxxobjects \ add_exception_objects \ add_noexception_objects \ + add_generated_exception_objects \ set_cflags \ set_cxxflags \ set_objcxxflags \ diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk index a023684e6ce3..69591063bc4e 100644 --- a/solenv/gbuild/TargetLocations.mk +++ b/solenv/gbuild/TargetLocations.mk @@ -53,6 +53,7 @@ gb_CustomTarget_get_repo_target = $(WORKDIR)/CustomTarget/$(2)_$(1).done gb_CustomTarget_get_target = $(WORKDIR)/CustomTarget/$(1).done gb_CustomTarget_get_workdir = $(WORKDIR)/CustomTarget/$(1) gb_CxxObject_get_target = $(WORKDIR)/CxxObject/$(1).o +gb_GenCxxObject_get_target = $(WORKDIR)/GenCxxObject/$(1).o gb_Executable_get_external_headers_target = $(WORKDIR)/ExternalHeaders/Executable/$(1) gb_Executable_get_headers_target = $(WORKDIR)/Headers/Executable/$(1) gb_JavaClassSet_get_classdir = $(WORKDIR)/JavaClassSet/$(1) @@ -128,7 +129,8 @@ $(eval $(call gb_Helper_make_dep_targets,\ SrsPartTarget \ SrsTarget \ )) - +# needs to use same dep target because we use gb_CxxObject__command +gb_GenCxxObject_get_dep_target = $(gb_CxxObject_get_dep_target) # other getters diff --git a/solenv/gbuild/platform/linux.mk b/solenv/gbuild/platform/linux.mk index ba283ed6b4e2..eac126414963 100755 --- a/solenv/gbuild/platform/linux.mk +++ b/solenv/gbuild/platform/linux.mk @@ -219,6 +219,7 @@ $(call gb_Helper_abbreviate_dirs,\ $(patsubst lib%.so,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib)))) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ + $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ -Wl$(COMMA)--start-group $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) -Wl$(COMMA)--end-group \ -o $(1)) endef @@ -228,7 +229,9 @@ $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) && \ $(gb_AR) -rsu $(1) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ - $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) 2> /dev/null) + $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ + $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ + 2> /dev/null) endef define gb_LinkTarget__command diff --git a/solenv/gbuild/platform/macosx.mk b/solenv/gbuild/platform/macosx.mk index f921ea401590..62d763515091 100755 --- a/solenv/gbuild/platform/macosx.mk +++ b/solenv/gbuild/platform/macosx.mk @@ -259,6 +259,7 @@ $(call gb_Helper_abbreviate_dirs,\ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ $(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_target,$(object))) \ + $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) \ -o $(1) \ `cat $${DYLIB_FILE}` && \ @@ -274,7 +275,10 @@ $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) && \ $(gb_AR) -rsu $(1) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ - $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) 2> /dev/null) + $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ + $(foreach object,$(OBJCXXOBJECTS),$(call gb_ObjCxxObject_get_target,$(object))) \ + $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ + 2> /dev/null) endef define gb_LinkTarget__command diff --git a/solenv/gbuild/platform/solaris.mk b/solenv/gbuild/platform/solaris.mk index 4f602d1352d2..d4289025e899 100755 --- a/solenv/gbuild/platform/solaris.mk +++ b/solenv/gbuild/platform/solaris.mk @@ -198,6 +198,7 @@ $(call gb_Helper_abbreviate_dirs,\ $(patsubst lib%.so,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib)))) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ + $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) \ -o $(1)) endef @@ -207,7 +208,9 @@ $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) && \ $(gb_AR) -rsu $(1) \ $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ - $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) 2> /dev/null) + $(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ + $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ + 2> /dev/null) endef define gb_LinkTarget__command diff --git a/solenv/gbuild/platform/windows.mk b/solenv/gbuild/platform/windows.mk index 218e9768aaf9..4508ff00bee9 100755 --- a/solenv/gbuild/platform/windows.mk +++ b/solenv/gbuild/platform/windows.mk @@ -391,7 +391,9 @@ $(call gb_Helper_abbreviate_dirs_native,\ rm -f $(1) && \ RESPONSEFILE=$$(mktemp --tmpdir=$(gb_Helper_MISC)) && \ echo "$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \ - $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) $(PCHOBJS)" > $${RESPONSEFILE} && \ + $(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \ + $(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \ + $(PCHOBJS)" > $${RESPONSEFILE} && \ $(gb_LINK) \ $(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \ $(if $(filter StaticLibrary,$(TARGETTYPE)),$(gb_StaticLibrary_TARGETTYPEFLAGS)) \ |