1#************************************************************** 2# 3# Licensed to the Apache Software Foundation (ASF) under one 4# or more contributor license agreements. See the NOTICE file 5# distributed with this work for additional information 6# regarding copyright ownership. The ASF licenses this file 7# to you under the Apache License, Version 2.0 (the 8# "License"); you may not use this file except in compliance 9# with the License. You may obtain a copy of the License at 10# 11# http://www.apache.org/licenses/LICENSE-2.0 12# 13# Unless required by applicable law or agreed to in writing, 14# software distributed under the License is distributed on an 15# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16# KIND, either express or implied. See the License for the 17# specific language governing permissions and limitations 18# under the License. 19# 20#************************************************************** 21 22 23############################################### 24# Windows 64 bit special 25# only used for 64 bit shell extension 26# ( Windows Vista ) 27# --------------------------------------------- 28# THIS FILE WILL BE DELETED when a fully ported 29# Windows 64 bit version is available 30############################################### 31 32.IF "$(BUILD_X64)"!="" 33# ----------------- settings for x64 -------------------- 34CC_X64*:=$(WRAPCMD) $(CXX_X64_BINARY) 35CXX_X64*:=$(WRAPCMD) $(CXX_X64_BINARY) 36LINK_X64*:=$(WRAPCMD) $(LINK_X64_BINARY) $(NOLOGO) -MACHINE:X64 37LIBMGR_X64=$(WRAPCMD) $(LIBMGR_X64_BINARY) $(NOLOGO) 38IMPLIB_X64=$(WRAPCMD) $(LIBMGR_X64_BINARY) 39 40USE_CFLAGS_X64=-c -nologo -Gs $(NOLOGO) -Zm500 -Zc:wchar_t- -GR 41 42# Stack buffer overrun detection. 43CFLAGS+=-GS 44 45USE_CDEFS_X64+= -DWIN32 -D_AMD64_=1 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NON_CONFORMING_SWPRINTFS 46.IF "$(debug)"!="" 47USE_CFLAGS_X64+=-Zi -Fd$(MISC_X64)/$(@:b).pdb 48USE_CDEFS_X64+=-DDEBUG 49.ENDIF # "$(debug)"!="" 50# Required for correct Windows function call ABI for expat static library 51.IF "$(SYSTEM_EXPAT)"=="NO" 52USE_CDEFS_X64+=-DXML_STATIC 53.ENDIF 54USE_CFLAGS_X64+=$(CFLAGS_X64) 55USE_CDEFS_X64+=$(CDEFS_X64) 56INCLUDE_X64=$(subst,/stl$(SPACECHAR),dont_use_stl$(SPACECHAR) $(INCLUDE)) 57 58.IF "$(product)" != "" 59USE_CFLAGS_X64+=-Gy 60.ENDIF # "$(product)" != "" 61 62# inline expansion 63USE_CFLAGS_X64+=-Ob1 64 65.IF "$(DYNAMIC_CRT)"!="" 66CDEFSSLOMT_X64+=-D_MT -D_DLL 67CDEFSSLOMT_X64+=-D_MT -D_DLL 68.IF "$(NO_DYNAMIC_OBJ)"=="" 69CDEFSOBJMT_X64+=-D_MT -D_DLL 70CDEFSOBJMT_X64+=-D_MT -D_DLL 71.ELSE 72CDEFSOBJMT_X64+=-D_MT 73CDEFSOBJMT_X64+=-D_MT 74.ENDIF # "$(NO_DYNAMIC_OBJ)"=="" 75.ELSE 76CDEFSSLOMT_X64+=-D_MT 77CDEFSOBJMT_X64+=-D_MT 78.ENDIF # "$(DYNAMIC_CRT)"!="" 79 80.IF "$(PRODUCT)"!="full" 81.ELSE 82LINKFLAGS_X64=/MAP /OPT:NOREF 83.ENDIF 84 85# exception handling protection 86# /SAFESEH is x86-only -- x64 SEH is table-driven and the linker rejects the 87# flag outright with LNK1246. This file predates a full x64 build: it was 88# written to cross-build the x64 shell extension from an x86 build, where 89# plain LINKFLAGS was still the x86 link. gbuild's windows.mk already gates 90# -SAFESEH on CPUNAME==INTEL; the dmake path needs the same guard. 91.IF "$(CPUNAME)"=="INTEL" 92LINKFLAGS+=-safeseh 93.ENDIF 94 95# enable DEP 96LINKFLAGS+=-nxcompat 97 98# enable ASLR 99LINKFLAGS+=-dynamicbase 100 101.IF "$(PRODUCT)"!="full" 102LINKFLAGS_X64+= -NODEFAULTLIB -DEBUG 103.ELSE # "$(PRODUCT)"!="full" 104LINKFLAGS_X64+= -NODEFAULTLIB -RELEASE -DEBUG -INCREMENTAL:NO 105.ENDIF # "$(PRODUCT)"!="full" 106MAPFILE=-out:$$@ 107 108.IF "$(debug)" != "" 109LINKFLAGS_X64+= $(LINKFLAGSDEBUG) 110.ENDIF 111 112LINKFLAGSSHLCUI_X64=/SUBSYSTEM:CONSOLE /DLL 113LINKFLAGSSHL_X64=$(LINKFLAGSSHLCUI_X64) 114CDEFSSLO_X64+=$(CDEFSMT_X64) $(CDEFSOBJMT_X64) 115CFLAGSSLO_X64+=-MT 116 117STDOBJGUI_X64= 118STDSLOGUI_X64= 119STDOBJCUI_X64= 120STDSLOCUI_X64= 121 122IMPLIBFLAGS_X64=-machine:X64 123 124# Both SDK and toolset moved their 64-bit libraries when the UCRT arrived. The 125# SDK gained a version level and split its libraries into um/ and ucrt/; the 126# toolset renamed amd64/ to x64/. This mirrors what set_soenv.in already does 127# for the main build's ILIB -- see the MSVC_MODERN branch there -- for the one 128# thing that computes its own paths instead, the 64-bit shell extension. 129.IF "$(COMEX)"=="14" 130LIBPATH_X64=$(PSDK_HOME)/lib/$(WINDOWS_SDK_VERSION)/um/x64 131LIBPATH_UCRT_X64=$(PSDK_HOME)/lib/$(WINDOWS_SDK_VERSION)/ucrt/x64 132LIBPATH_VC_X64=$(COMPATH)/lib/x64 133.ELSE 134LIBPATH_X64=$(PSDK_HOME)/lib/x64 135LIBPATH_VC_X64=$(COMPATH)/lib/amd64 136.ENDIF 137 138ADVAPI32LIB_X64=$(LIBPATH_X64)/advapi32.lib 139SHELL32LIB_X64=$(LIBPATH_X64)/shell32.lib 140GDI32LIB_X64=$(LIBPATH_X64)/gdi32.lib 141OLE32LIB_X64=$(LIBPATH_X64)/ole32.lib 142OLEAUT32LIB_X64=$(LIBPATH_X64)/oleaut32.lib 143UUIDLIB_X64=$(LIBPATH_X64)/uuid.lib 144WINSPOOLLIB_X64=$(LIBPATH_X64)/winspool.lib 145IMM32LIB_X64=$(LIBPATH_X64)/imm32.lib 146VERSIONLIB_X64=$(LIBPATH_X64)/version.lib 147WINMMLIB_X64=$(LIBPATH_X64)/winmm.lib 148WSOCK32LIB_X64=$(LIBPATH_X64)/wsock32.lib 149MPRLIB_X64=$(LIBPATH_X64)/mpr.lib 150WS2_32LIB_X64=$(LIBPATH_X64)/ws2_32.lib 151KERNEL32LIB_X64=$(LIBPATH_X64)/kernel32.lib 152USER32LIB_X64=$(LIBPATH_X64)/user32.lib 153COMDLG32LIB_X64=$(LIBPATH_X64)/comdlg32.lib 154COMCTL32LIB_X64=$(LIBPATH_X64)/comctl32.lib 155CRYPT32LIB_X64=$(LIBPATH_X64)/crypt32.lib 156GDIPLUSLIB_X64=$(LIBPATH_X64)/gdiplus.lib 157DBGHELPLIB_X64=$(LIBPATH_X64)/dbghelp.lib 158PROPSYSLIB_X64=$(LIBPATH_X64)/propsys.lib 159MSILIB_X64=$(LIBPATH_X64)/msi.lib 160DDRAWLIB_X64=$(LIBPATH_X64)/ddraw.lib 161SHLWAPILIB_X64=$(LIBPATH_X64)/shlwapi.lib 162URLMONLIB_X64=$(LIBPATH_X64)/urlmon.lib 163WININETLIB_X64=$(LIBPATH_X64)/wininet.lib 164OLDNAMESLIB_X64=$(LIBPATH_VC_X64)/oldnames.lib 165MSIMG32LIB_X64=$(LIBPATH_X64)/msimg32.lib 166MSVCPRT_X64=$(LIBPATH_VC_X64)/msvcprt.lib 167MSVCRT_X64=$(LIBPATH_VC_X64)/msvcrt.lib 168.IF "$(COMEX)"=="14" 169# The same three-way CRT split the 32-bit build already deals with, reaching 170# the one target that names its CRT libraries by full path. These consumers 171# all link -NODEFAULTLIB, so an unnamed library is an unlinked one. 172MSVCRT_X64+=$(LIBPATH_VC_X64)/vcruntime.lib $(LIBPATH_UCRT_X64)/ucrt.lib 173.ENDIF 174 175MISC_X64=$(MISC)/x64 176OBJ_X64=$(OBJ)/x64 177SLO_X64=$(SLO)/x64 178LB_X64=$(LB)/x64 179SLB_X64=$(SLB)/x64 180L_X64=$(SOLARLIBDIR_X64) 181VERSIONOBJ_X64=$(SLO_X64)/_version.obj 182BIN_X64=$(BIN)/x64 183RES_X64=$(RES)/x64 184SOLARLIBDIR_X64=$(SOLARVERSION)/$(INPATH)/lib$(UPDMINOREXT)/x64 185LIB_X64:=$(LB_X64);$(SLB_X64);$(ILIB_X64) 186 187.IF "$(LIBTARGET)"=="" 188.IF "$(OBJFILES_X64)$(IDLOBJFILES_X64)"!="" 189OBJTARGET_X64=$(LB_X64)/$(TARGET).lib 190.ENDIF # "$(OBJFILES_X64)$(IDLOBJFILES_X64)"!="" 191.IF "$(SLOFILES_X64)$(IDLSLOFILES_x64)"!="" 192SLOTARGET_X64=$(SLB_X64)/$(TARGET).lib 193.ENDIF # "$(SLOFILES_X64)$(IDLSLOFILES_x64)"!="" 194.ENDIF # "$(LIBTARGET)"=="" 195 196.IF "$(OBJFILES_X64)"!="" 197.IF "$(LIBTARGET)" != "" 198NOLIBOBJTARGET_X64=$(OBJFILES_X64) 199.ENDIF 200.ENDIF 201 202.IF "$(SLOFILES_X64)"!="" 203.IF "$(LIBTARGET)" != "" 204NOLIBSLOTARGET_X64=$(SLOFILES_X64) 205.ENDIF 206.ENDIF 207 208.IF "$(SHL1TARGET_X64)"!="" 209SHL1TARGETN_X64=$(BIN_X64)/$(DLLPRE)$(SHL1TARGET_X64)$(DLLPOST) 210.ENDIF 211.IF "$(SHL2TARGET_X64)"!="" 212SHL2TARGETN_X64=$(BIN_X64)/$(DLLPRE)$(SHL2TARGET_X64)$(DLLPOST) 213.ENDIF 214.IF "$(LIB1TARGET_X64)" != "" 215LIB1TARGETN_X64=$(LIB1TARGET_X64) 216.ENDIF 217.IF "$(LIB2TARGET_X64)" != "" 218LIB2TARGETN_X64=$(LIB2TARGET_X64) 219.ENDIF 220.IF "$(DEF1NAME_X64)"!="" 221DEF1TARGETN_X64=$(MISC_X64)/$(DEF1NAME_X64).def 222.ENDIF 223.IF "$(DEF2NAME_X64)"!="" 224DEF2TARGETN_X64=$(MISC_X64)/$(DEF2NAME_X64).def 225.ENDIF 226 227$(SLO_X64)/%.obj : $(MISC_X64)/%.c 228 @echo ------------------------------ 229 @echo Making: $@ 230 -$(MKDIR) $(@:d) 231 @-$(MKDIR) $(MISC_X64) 232 @@-$(RM) $@ 233 @$(TYPE) $(mktmp $(CC_X64) $(USE_CFLAGS_X64) $(INCLUDE_C) $(CFLAGSCC_X64) $(CFLAGSSLO_X64) $(USE_CDEFS_X64) $(CDEFSSLO_X64) $(CFLAGSAPPEND_X64) $(CFLAGSOUTOBJ)$(SLO_X64)/$*.obj $(MISC_X64)/$*.c ) 234 @$(ECHONL) 235 $(CC_X64) @$(mktmp $(USE_CFLAGS_X64) $(INCLUDE_C) $(CFLAGSCC_X64) $(CFLAGSSLO_X64) $(USE_CDEFS_X64) $(CDEFSSLO_X64) $(CFLAGSAPPEND_X64) $(CFLAGSOUTOBJ)$(SLO_X64)/$*.obj $(MISC_X64)/$*.c ) 236 237.ENDIF # "$(BUILD_X64)"!="" 238