From eb2939e19075f9c4cd79cf468b1c4b6200623db9 Mon Sep 17 00:00:00 2001 From: Peter Foley Date: Sun, 18 Dec 2011 01:46:03 +0100 Subject: [PATCH] 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. --- solenv/gbuild/Library.mk | 2 ++ solenv/gbuild/LinkTarget.mk | 14 ++++++++++++++ solenv/gbuild/platform/WNT_INTEL_MSC.mk | 13 ++++++------- 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 \