summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Foley <pefoley2@verizon.net>2011-12-18 01:46:03 +0100
committerMichael Stahl <mstahl@redhat.com>2011-12-18 01:46:03 +0100
commiteb2939e19075f9c4cd79cf468b1c4b6200623db9 (patch)
tree87ad23e367956c33ffe0275843e9b74323d9c29c
parentc439bc7a4aa0a4e01e0d01e09c5869619240c040 (diff)
gbuild: MSVC: add support for building x64 libraries
The committer wants to state that he has no opinion on the content of this commit due to total ignorance of the problem area.
-rw-r--r--solenv/gbuild/Library.mk2
-rw-r--r--solenv/gbuild/LinkTarget.mk14
-rw-r--r--solenv/gbuild/platform/WNT_INTEL_MSC.mk13
3 files changed, 22 insertions, 7 deletions
diff --git a/solenv/gbuild/Library.mk b/solenv/gbuild/Library.mk
index 82daae1d97a6..0de2876c89ec 100644
--- a/solenv/gbuild/Library.mk
+++ b/solenv/gbuild/Library.mk
@@ -120,6 +120,7 @@ $(eval $(foreach method,\
add_asmobject \
add_asmobjects \
add_exception_objects \
+ add_x64_generated_exception_objects \
add_noexception_objects \
add_generated_cobjects \
add_generated_cxxobjects \
@@ -139,6 +140,7 @@ $(eval $(foreach method,\
set_include \
add_ldflags \
set_ldflags \
+ set_x64 \
add_libs \
set_library_path_flags \
add_api \
diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk
index c094bb424b54..94fcca6e13c2 100644
--- a/solenv/gbuild/LinkTarget.mk
+++ b/solenv/gbuild/LinkTarget.mk
@@ -416,6 +416,7 @@ $(call gb_LinkTarget_get_headers_target,%) : $(call gb_LinkTarget_get_external_h
# on clean.
# - TARGETTYPE is the type of linktarget as some platforms need very different
# command to link different targettypes.
+# - LIBRARY_X64 is only relevent for building a x64 library on windows.
#
# Since most variables are set on the linktarget and not on the object, the
# object learns about these setting via GNU makes scoping of target variables.
@@ -465,6 +466,7 @@ $(call gb_LinkTarget_get_target,$(1)) : LINKED_LIBS :=
$(call gb_LinkTarget_get_target,$(1)) : LINKED_STATIC_LIBS :=
$(call gb_LinkTarget_get_target,$(1)) : LIBS :=
$(call gb_LinkTarget_get_target,$(1)) : TARGETTYPE :=
+$(call gb_LinkTarget_get_target,$(1)) : LIBRARY_X64 :=
$(call gb_LinkTarget_get_headers_target,$(1)) \
$(call gb_LinkTarget_get_target,$(1)) : PDBFILE :=
$(call gb_LinkTarget_get_target,$(1)) : EXTRAOBJECTLISTS :=
@@ -489,6 +491,7 @@ $(call gb_LinkTarget_get_dep_target,$(1)) : DEFS := $$(gb_LinkTarget_DEFAULTDEFS
$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE := $$(gb_LinkTarget_INCLUDE)
$(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE_STL := $$(gb_LinkTarget_INCLUDE_STL)
$(call gb_LinkTarget_get_dep_target,$(1)) : TARGETTYPE :=
+$(call gb_LinkTarget_get_dep_target,$(1)) : LIBRARY_X64 :=
$(call gb_LinkTarget_get_dep_target,$(1)) : EXTRAOBJECTLISTS :=
endif
@@ -869,6 +872,12 @@ define gb_LinkTarget_add_exception_objects
$(foreach obj,$(2),$(call gb_LinkTarget_add_exception_object,$(1),$(obj)))
endef
+#only useful for building x64 libraries on windows
+define gb_LinkTarget_add_x64_generated_exception_objects
+$(foreach obj,$(2),$(call gb_LinkTarget_add_generated_exception_object,$(1),$(obj)))
+$(foreach obj,$(2),$(eval $(call gb_GenCxxObject_get_target,$(obj)) : CXXOBJECT_X64 := YES))
+endef
+
define gb_LinkTarget_add_generated_cobjects
$(foreach obj,$(2),$(call gb_LinkTarget_add_generated_c_object,$(1),$(obj),$(3)))
endef
@@ -890,6 +899,11 @@ $(call gb_LinkTarget_get_target,$(1)) \
$(call gb_LinkTarget_get_dep_target,$(1)) : TARGETTYPE := $(2)
endef
+define gb_LinkTarget_set_x64
+$(call gb_LinkTarget_get_target,$(1)) \
+$(call gb_LinkTarget_get_dep_target,$(1)) : LIBRARY_X64 := $(2)
+endef
+
define gb_LinkTarget_set_dlltarget
$(call gb_LinkTarget_get_clean_target,$(1)) \
$(call gb_LinkTarget_get_target,$(1)) : DLLTARGET := $(2)
diff --git a/solenv/gbuild/platform/WNT_INTEL_MSC.mk b/solenv/gbuild/platform/WNT_INTEL_MSC.mk
index 45c960905f58..1e068ffe8ee4 100644
--- a/solenv/gbuild/platform/WNT_INTEL_MSC.mk
+++ b/solenv/gbuild/platform/WNT_INTEL_MSC.mk
@@ -75,9 +75,7 @@ gb_RCDEFS := \
gb_RCFLAGS := \
-V
-# FIXME: When porting to Windows64, we should use only:
-# /c /Cp
-gb_AFLAGS := /c /Cp /coff /safeseh
+gb_AFLAGS := /c /Cp
gb_CFLAGS := \
-Gd \
@@ -207,7 +205,6 @@ gb_LinkTarget_NOEXCEPTIONFLAGS := \
-DEXCEPTIONS_OFF \
gb_LinkTarget_LDFLAGS := \
- -MACHINE:IX86 \
-MANIFEST \
$(patsubst %,-LIBPATH:%,$(filter-out .,$(subst ;, ,$(subst \,/,$(ILIB))))) \
@@ -302,13 +299,14 @@ define gb_CxxObject__command
$(call gb_Output_announce,$(2),$(true),CXX,3)
$(call gb_Helper_abbreviate_dirs_native,\
mkdir -p $(dir $(1)) $(dir $(4)) && \
- $(gb_CXX) \
+ $(if $(filter YES,$(CXXOBJECT_X64)), $(CXX_X64_BINARY), $(gb_CXX)) \
$(DEFS) \
$(T_CXXFLAGS) \
-Fd$(PDBFILE) \
$(gb_COMPILERDEPFLAGS) \
-I$(realpath $(dir $(3))) \
$(INCLUDE_STL) $(INCLUDE) \
+ $(if $(filter YES,$(CXXOBJECT_X64)), -U_X86_ -D_AMD64_,) \
-c $(realpath $(3)) \
-Fo$(1)) $(call gb_create_deps,$(1),$(4),$(realpath $(3)))
endef
@@ -353,11 +351,13 @@ $(call gb_Helper_abbreviate_dirs_native,\
$(foreach object,$(ASMOBJECTS),$(call gb_AsmObject_get_target,$(object))) \
$(foreach extraobjectlist,$(EXTRAOBJECTLISTS),$(shell cat $(extraobjectlist))) \
$(NATIVERES))) && \
- $(gb_LINK) \
+ $(if $(filter YES,$(LIBRARY_X64)), $(LINK_X64_BINARY), $(gb_LINK)) \
$(if $(filter Library CppunitTest,$(TARGETTYPE)),$(gb_Library_TARGETTYPEFLAGS)) \
$(if $(filter StaticLibrary,$(TARGETTYPE)),$(gb_StaticLibrary_TARGETTYPEFLAGS)) \
$(if $(filter Executable,$(TARGETTYPE)),$(gb_Executable_TARGETTYPEFLAGS)) \
$(if $(filter YES,$(TARGETGUI)), -SUBSYSTEM:WINDOWS, -SUBSYSTEM:CONSOLE) \
+ $(if $(filter YES,$(LIBRARY_X64)), -MACHINE:X64, -MACHINE:IX86) \
+ $(if $(filter YES,$(LIBRARY_X64)), -LIBPATH:$(COMPATH)/lib/amd64 -LIBPATH:$(WINDOWS_SDK_HOME)/lib/x64,) \
$(T_LDFLAGS) \
$(if $(gb_PRODUCT),,-NODEFAULTLIB) \
@$${RESPONSEFILE} \
@@ -377,7 +377,6 @@ gb_Windows_PE_TARGETTYPEFLAGS := \
-opt:noref \
-incremental:no \
-debug \
- -safeseh \
-nxcompat \
-dynamicbase \