xref: /trunk/main/solenv/inc/set_wntx64.mk (revision 45c5a00162811bd03b87fcb4fe9996782f2b59ec)
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