1 # -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
3 # This file is part of the LibreOffice project.
5 # This Source Code Form is subject to the terms of the Mozilla Public
6 # License, v. 2.0. If a copy of the MPL was not distributed with this
7 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 # This file incorporates work covered by the following license notice:
11 # Licensed to the Apache Software Foundation (ASF) under one or more
12 # contributor license agreements. See the NOTICE file distributed
13 # with this work for additional information regarding copyright
14 # ownership. The ASF licenses this file to you under the Apache
15 # License, Version 2.0 (the "License"); you may not use this file
16 # except in compliance with the License. You may obtain a copy of
17 # the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 # Convert path to file URL.
21 define gb_Helper_make_url
27 define gb_YaccTarget__command
28 $(call gb_Output_announce
,$(2),$(true
),YAC
,3)
29 mkdir
-p
$(dir $(3)) && \
30 $(call gb_Helper_wsl_path
,$(WSL
) $(BISON
) $(T_YACCFLAGS
) --defines
=$(4) -o
$(5) $(1)) && touch
$(3)
36 # $(call gb_CObject__compiler,flags,source,compiler)
37 define gb_CObject__compiler
39 $(if
$(filter YES
,$(LIBRARY_X64
)), $(CXX_X64_BINARY
), \
40 $(if
$(filter YES
,$(PE_X86
)), $(CXX_X86_BINARY
), \
41 $(if
$(filter %.c
,$(2)), \
42 $(if
$(3), $(3), $(gb_CC
)), \
43 $(if
$(filter -clr
,$(1)), \
44 $(MSVC_CXX
) -I
$(SRCDIR
)/solenv
/clang-cl
, \
45 $(if
$(3), $(3), $(gb_CXX
))))))
48 # Avoid annoying warning D9025 about overriding command-line arguments.
49 gb_Helper_remove_overridden_flags
= \
50 $(filter-out -W4
-w
-arch
:SSE
-arch
:SSE2
-arch
:AVX
-arch
:AVX2
-Od
-O2
-Zc
:inline
-Zc
:inline- \
51 -Zc
:dllexportInlines
-Zc
:dllexportInlines-
-EHs
-EHa
-DNOMINMAX
-UNOMINMAX
-D_X86_
=1 -U_X86_ \
52 -D_AMD64_
=1 -U_AMD64_
,$(1)) \
53 $(lastword
$(filter -W4
-w
,$(1))) \
54 $(lastword
$(filter -Od
-O2
,$(1))) \
55 $(lastword
$(filter -arch
:SSE
-arch
:SSE2
-arch
:AVX
-arch
:AVX2
,$(1))) \
56 $(lastword
$(filter -EHs
-EHa
,$(1))) \
57 $(lastword
$(filter -DNOMINMAX
-UNOMINMAX
,$(1))) \
58 $(lastword
$(filter -D_X86_
=1 -U_X86_
,$(1))) \
59 $(lastword
$(filter -D_AMD64_
=1 -U_AMD64_
,$(1))) \
60 $(lastword
$(filter -Zc
:inline
-Zc
:inline-
,$(1))) \
61 $(lastword
$(filter -Zc
:dllexportInlines
-Zc
:dllexportInlines-
,$(1)))
63 # $(call gb_CObject__command_pattern,object,flags,source,dep-file,compiler-plugins,compiler)
64 define gb_CObject__command_pattern
65 $(call gb_Helper_abbreviate_dirs
,\
66 mkdir
-p
$(dir $(1)) $(dir $(4)) && \
68 $(if
$(and
$(gb_COMPILERDEPFLAGS
),$(T_USE_CLANG
)), export SHOWINCLUDES_PREFIX
="${LO_CLANG_SHOWINCLUDES_PREFIX}" &&) \
69 $(gb_COMPILER_SETUP
) \
70 $(call gb_CObject__compiler
,$(2),$(3),$(6)) \
71 $(call gb_Helper_remove_overridden_flags
, \
73 $(if
$(filter YES
,$(LIBRARY_X64
)), ,$(gb_LTOFLAGS
)) \
74 $(2) $(if
$(WARNINGS_DISABLED
),$(gb_CXXFLAGS_DISABLE_WARNINGS
)) \
75 $(if
$(EXTERNAL_CODE
), \
76 $(if
$(filter -clr
,$(2)),,$(if
$(COM_IS_CLANG
),-Wno-undef
)), \
77 $(gb_DEFS_INTERNAL
)) \
78 $(if
$(WARNINGS_NOT_ERRORS
),$(if
$(ENABLE_WERROR
),$(if
$(PLUGIN_WARNINGS_AS_ERRORS
),$(gb_COMPILER_PLUGINS_WARNINGS_AS_ERRORS
))),$(gb_CFLAGS_WERROR
)) \
79 $(if
$(filter -clr
,$(2)),,$(if
$(5),$(gb_COMPILER_PLUGINS
))) \
80 $(if
$(COMPILER_TEST
),-fsyntax-only
-ferror-limit
=0 -Xclang
-verify
) \
82 $(if
$(COMPILER_TEST
),,$(gb_COMPILERDEPFLAGS
)) \
83 $(if
$(filter YES
,$(LIBRARY_X64
)), -U_X86_
-D_AMD64_
,) \
84 $(if
$(filter YES
,$(PE_X86
)), -D_X86_
-U_AMD64_
,)) \
89 $(if
$(COMPILER_TEST
),,$(call gb_create_deps
,$(4),$(1),$(3)))
92 # PrecompiledHeader class
94 gb_PrecompiledHeader_get_enableflags
= \
95 -Yu
$(SRCDIR
)/$(3).hxx \
96 -FI
$(SRCDIR
)/$(3).hxx \
97 -Fp
$(call gb_PrecompiledHeader_get_target
,$(1),$(2)) \
100 gb_PrecompiledHeader_EXT
:= .pch
102 # MSVC PCH needs extra .obj created during the creation of the PCH file
103 gb_PrecompiledHeader_get_objectfile
= $(1).obj
105 # $(call gb_PrecompiledHeader__command,pchfile,pchtarget,source,cxxflags,includes,linktargetmakefilename,compiler)
106 define gb_PrecompiledHeader__command
107 $(call gb_Output_announce
,$(2),$(true
),PCH
,1)
108 $(call gb_Trace_StartRange
,$(2),PCH
)
109 $(call gb_Helper_abbreviate_dirs
,\
110 mkdir
-p
$(dir $(1)) $(dir $(call gb_PrecompiledHeader_get_dep_target
,$(2),$(6))) && \
112 $(if
$(and
$(gb_COMPILERDEPFLAGS
),$(T_USE_CLANG
)), export SHOWINCLUDES_PREFIX
="${LO_CLANG_SHOWINCLUDES_PREFIX}" &&) \
113 CCACHE_DISABLE
=1 $(gb_COMPILER_SETUP
) \
114 $(call gb_CObject__compiler
,$(4),$(3),$(7)) \
115 $(call gb_Helper_remove_overridden_flags
, \
116 $(4) $(if
$(WARNINGS_DISABLED
),$(gb_CXXFLAGS_DISABLE_WARNINGS
))) \
118 $(if
$(EXTERNAL_CODE
),$(if
$(COM_IS_CLANG
),-Wno-undef
),$(gb_DEFS_INTERNAL
)) \
119 $(if
$(filter YES
,$(LIBRARY_X64
)), ,$(gb_LTOFLAGS
)) \
120 $(gb_COMPILERDEPFLAGS
) \
121 $(gb_NO_PCH_TIMESTAMP
) \
124 -Yc
$(notdir $(patsubst %.
cxx,%.hxx
,$(3))) -I
$(dir $(patsubst %.
cxx,%.hxx
,$(3))) -Fp
$(1) -Fo
$(1).obj
) \
125 $(call gb_create_deps
,$(call gb_PrecompiledHeader_get_dep_target_tmp
,$(2),$(6)),$(1),$(3))
126 $(call gb_Trace_EndRange
,$(2),PCH
)
129 ifeq ($(COM_IS_CLANG
),TRUE
)
130 # Clang has -fno-pch-timestamp, just checksum the file for CCACHE_PCH_EXTSUM
131 # $(call gb_PrecompiledHeader__sum_command,pchfile,pchtarget,source,cxxflags,includes,linktargetmakefilename,compiler)
132 define gb_PrecompiledHeader__sum_command
133 $(SHA256SUM
) $(1) >$(1).sum
136 # MSVC does not generate the same .pch for the same input, so checksum the (preprocessed) input
137 # $(call gb_PrecompiledHeader__sum_command,pchfile,pchtarget,source,cxxflags,includes,linktargetmakefilename,compiler)
138 define gb_PrecompiledHeader__sum_command
139 $(call gb_Helper_abbreviate_dirs
,\
141 CCACHE_DISABLE
=1 $(gb_COMPILER_SETUP
) \
142 $(call gb_CObject__compiler
,$(4),$(3),$(7)) \
143 $(call gb_Helper_remove_overridden_flags
, \
144 $(4)$(if
$(WARNINGS_DISABLED
),$(gb_CXXFLAGS_DISABLE_WARNINGS
))) \
145 $(if
$(EXTERNAL_CODE
),$(if
$(COM_IS_CLANG
),-Wno-undef
),$(gb_DEFS_INTERNAL
)) \
149 2>&1 |
$(SHA256SUM
) >$(1).sum \
154 # When building a PCH, MSVC also creates a .pdb file with debug info. So for reuse
155 # add the .pdb to the PCH's files and then use the .pdb also for linktargets that reuse the PCH.
156 # call gb_PrecompiledHeader__create_reuse_files,linktarget,pchtarget,linktargetmakefilename
157 define gb_PrecompiledHeader__create_reuse_files
158 rm -f
$(call gb_PrecompiledHeader_get_target
,$(2),$(3)).pdb
; \
159 if
test -f
$(call gb_LinkTarget_get_pdbfile_in
,$(1)); then \
160 cp
$(call gb_LinkTarget_get_pdbfile_in
,$(1)) $(call gb_PrecompiledHeader_get_target
,$(2),$(3)).pdb
; \
164 # call gb_PrecompiledHeader__copy_reuse_files,linktarget,pchtarget,linktargetmakefilename
165 define gb_PrecompiledHeader__copy_reuse_files
166 rm -f
$(call gb_LinkTarget_get_pdbfile_in
,$(1)); \
167 if
test -f
$(call gb_PrecompiledHeader_get_target
,$(2),$(3)).pdb
; then \
168 cp
$(call gb_PrecompiledHeader_get_target
,$(2),$(3)).pdb
$(call gb_LinkTarget_get_pdbfile_in
,$(1)); \
173 ifeq ($(CPUNAME
),AARCH64
)
174 gb_AsmObject_get_source
= $(1)/$(2).S
176 # Code needs a preprocessor step .S -> .asm -> .o
177 define gb_AsmObject__command
178 $(call gb_Output_announce
,$(2),$(true
),ASM
,3)
179 $(call gb_Helper_abbreviate_dirs
,\
180 mkdir
-p
$(dir $(1)) $(dir $(4)) && \
181 $(CC
) -nologo
-EP
-D_M_ARM64
$(SOLARINC
) $(3) > $(subst .o
,.asm
,$(1)) && \
182 "$(ML_EXE)" $(gb_AFLAGS
) -g
-errorReport
:prompt
-o
$(1) $(subst .o
,.asm
,$(1)), \
184 echo
"$(1) : $(3)" > $(4)
188 gb_AsmObject_get_source
= $(1)/$(2).asm
190 define gb_AsmObject__command
191 $(call gb_Output_announce
,$(2),$(true
),ASM
,3)
192 $(call gb_Helper_abbreviate_dirs
,\
193 mkdir
-p
$(dir $(1)) $(dir $(4)) && \
195 $(if
$(filter X86_64
,$(CPUNAME
)),, /safeseh
) \
196 /c
/Cp
$(gb_AFLAGS
) -D
$(COM
) /Fo
$(1) $(3)) && \
197 echo
"$(1) : $(3)" > $(4)
204 gb_LinkTarget_CFLAGS
:= $(gb_CFLAGS
)
205 gb_LinkTarget_CXXFLAGS
:= $(gb_CXXFLAGS
)
206 gb_LinkTarget_CXXCLRFLAGS
:= $(gb_CXXCLRFLAGS
)
208 gb_LinkTarget_INCLUDE
:=\
210 $(foreach inc
,$(subst ;, ,$(JDKINC
)),-I
$(inc
)) \
211 -I
$(BUILDDIR
)/config_
$(gb_Side
) \
213 # We must name the .pdb like libname.pdb, not libname.\(dll\|exe\|pyd\).pdb,
214 # otherwise WinDbg does not find it.
215 define gb_LinkTarget__get_pdb_filename
216 $(patsubst %.dll
,%.pdb
,$(patsubst %.exe
,%.pdb
,$(patsubst %.bin
,%.bin.pdb
,$(patsubst %.pyd
,%.pdb
,$(1)))))
219 gb_LinkTarget_get_pdbfile_in
= \
220 $(WORKDIR
)/LinkTarget
/$(call gb_LinkTarget__get_workdir_linktargetname
,$(1)).objects.pdb
222 gb_LinkTarget_get_pdbfile_out
= \
223 $(call gb_LinkTarget__get_pdb_filename
,$(WORKDIR
)/LinkTarget
/$(call gb_LinkTarget__get_workdir_linktargetname
,$(1)))
225 gb_LinkTarget_get_ilkfile
= \
226 $(WORKDIR
)/LinkTarget
/$(call gb_LinkTarget__get_workdir_linktargetname
,$(1)).ilk
228 gb_LinkTarget_get_manifestfile
= \
229 $(WORKDIR
)/LinkTarget
/$(call gb_LinkTarget__get_workdir_linktargetname
,$(1)).manifest
231 gb_LinkTarget_get_linksearchpath_for_layer
= \
232 -LIBPATH
:$(WORKDIR
)/LinkTarget
/StaticLibrary \
233 -LIBPATH
:$(INSTDIR
)/$(SDKDIRNAME
)/lib \
234 $(if
$(filter OXT
,$(1)),\
235 -LIBPATH
:$(WORKDIR
)/LinkTarget
/ExtensionLibrary
, \
236 -LIBPATH
:$(WORKDIR
)/LinkTarget
/Library
)
238 # avoid fatal error LNK1170 for Library_merged
239 define gb_LinkTarget_MergedResponseFile
240 cat
$${RESPONSEFILE} | sed
's/ /\n/g' | grep
-v
'^$$' > $${RESPONSEFILE}.1 && \
241 mv
$${RESPONSEFILE}.1 $${RESPONSEFILE} &&
244 gb_MSC_SUBSYSTEM_VERSION
=$(COMMA
)$(if
$(filter AARCH64
,$(CPUNAME
)),6.02,6.01)
246 # the sort on the libraries is used to filter out duplicates to keep commandline
247 # length in check - otherwise the dupes easily hit the limit when linking mergedlib
248 define gb_LinkTarget__command
249 $(call gb_Output_announce
,$(2),$(true
),LNK
,4)
250 $(call gb_Trace_StartRange
,$(2),LNK
)
251 $(call gb_Helper_abbreviate_dirs
,\
253 RESPONSEFILE
=$(call gb_var2file
,$(shell $(gb_MKTEMP
)), \
254 $(foreach object
,$(CXXOBJECTS
),$(call gb_CxxObject_get_target
,$(object
))) \
255 $(foreach object
,$(GENCXXOBJECTS
),$(call gb_GenCxxObject_get_target
,$(object
))) \
256 $(foreach object
,$(COBJECTS
),$(call gb_CObject_get_target
,$(object
))) \
257 $(foreach object
,$(GENCOBJECTS
),$(call gb_GenCObject_get_target
,$(object
))) \
258 $(foreach object
,$(CXXCLROBJECTS
),$(call gb_CxxClrObject_get_target
,$(object
))) \
259 $(foreach object
,$(GENCXXCLROBJECTS
),$(call gb_GenCxxClrObject_get_target
,$(object
))) \
260 $(foreach object
,$(ASMOBJECTS
),$(call gb_AsmObject_get_target
,$(object
))) \
261 $(foreach object
,$(GENNASMOBJECTS
),$(call gb_GenNasmObject_get_target
,$(object
))) \
262 $(foreach extraobjectlist
,$(EXTRAOBJECTLISTS
),$(shell cat
$(extraobjectlist
))) \
263 $(PCHOBJS
) $(NATIVERES
)) && \
264 $(if
$(filter $(call gb_Library__get_workdir_linktargetname
,merged
),$(2)),$(call gb_LinkTarget_MergedResponseFile
)) \
267 $(if
$(filter Library CppunitTest
,$(TARGETTYPE
)),$(gb_Library_TARGETTYPEFLAGS
)) \
268 $(if
$(filter StaticLibrary
,$(TARGETTYPE
)),-LIB
) \
269 $(if
$(filter Executable
,$(TARGETTYPE
)),$(gb_Executable_TARGETTYPEFLAGS
)) \
270 $(if
$(T_SYMBOLS
),$(if
$(filter Executable Library CppunitTest
,$(TARGETTYPE
)),$(call gb_Windows_PE_TARGETTYPEFLAGS_DEBUGINFO
,$(DEFS
))),) \
271 $(if
$(filter YES
,$(TARGETGUI
)), -SUBSYSTEM
:WINDOWS
$(gb_MSC_SUBSYSTEM_VERSION
), -SUBSYSTEM
:CONSOLE
$(gb_MSC_SUBSYSTEM_VERSION
)) \
272 $(if
$(filter YES
,$(LIBRARY_X64
)), -MACHINE
:X64
) \
273 $(if
$(filter YES
,$(PE_X86
)), -MACHINE
:X86
) \
274 $(if
$(filter YES
,$(LIBRARY_X64
)), \
275 -LIBPATH
:$(COMPATH
)/lib
/x64 \
276 -LIBPATH
:$(WINDOWS_SDK_HOME
)/lib
/x64 \
277 -LIBPATH
:$(UCRTSDKDIR
)lib
/$(UCRTVERSION
)/ucrt
/x64 \
278 $(if
$(filter 80 81 10,$(WINDOWS_SDK_VERSION
)),-LIBPATH
:$(WINDOWS_SDK_HOME
)/lib
/$(WINDOWS_SDK_LIB_SUBDIR
)/um
/x64
)) \
279 $(if
$(filter YES
,$(PE_X86
)), \
280 -LIBPATH
:$(COMPATH
)/lib
/x86 \
281 -LIBPATH
:$(WINDOWS_SDK_HOME
)/lib
/x86 \
282 -LIBPATH
:$(UCRTSDKDIR
)lib
/$(UCRTVERSION
)/ucrt
/x86 \
283 $(if
$(filter 80 81 10,$(WINDOWS_SDK_VERSION
)),-LIBPATH
:$(WINDOWS_SDK_HOME
)/lib
/$(WINDOWS_SDK_LIB_SUBDIR
)/um
/x86
)) \
284 $(T_USE_LD
) $(T_LDFLAGS
) \
285 $(if
$(filter Library CppunitTest Executable
,$(TARGETTYPE
)),/NATVIS
:$(SRCDIR
)/solenv
/vs
/LibreOffice.natvis
) \
287 $(foreach lib
,$(sort $(LINKED_LIBS
)),$(call gb_Library_get_ilibfilename
,$(lib
))) \
288 $(foreach lib
,$(sort $(LINKED_STATIC_LIBS
)),$(call gb_StaticLibrary_get_filename
,$(lib
))) \
289 $(if
$(filter-out StaticLibrary
,$(TARGETTYPE
)),\
290 $(sort $(T_LIBS
)) user32.lib \
291 -manifestfile
:$(WORKDIR
)/LinkTarget
/$(2).manifest \
292 -pdb
:$(call gb_LinkTarget__get_pdb_filename
,$(WORKDIR
)/LinkTarget
/$(2))) \
293 $(if
$(ILIBTARGET
),-out
:$(1) -implib
:$(ILIBTARGET
),-out
:$(1)) \
294 |
$(GBUILDDIR
)/platform
/filter-creatingLibrary.awk
; RC
=$${PIPESTATUS
[0]}; rm $${RESPONSEFILE} \
295 $(if
$(filter Library
,$(TARGETTYPE
)),; if
[ ! -f
$(ILIBTARGET
) ]; then
rm -f
$(1); exit
42; fi
) \
296 $(if
$(filter Library
,$(TARGETTYPE
)),&& if
[ -f
$(WORKDIR
)/LinkTarget
/$(2).manifest
]; then mt.exe
$(MTFLAGS
) -nologo
-manifest
$(WORKDIR
)/LinkTarget
/$(2).manifest
$(SRCDIR
)/solenv
/gbuild
/platform
/win_compatibility.manifest
-outputresource
:$(1)\
;2 && touch
-r
$(1) $(WORKDIR
)/LinkTarget
/$(2).manifest
$(ILIBTARGET
); fi
) \
297 $(if
$(filter Executable
,$(TARGETTYPE
)),&& if
[ -f
$(WORKDIR
)/LinkTarget
/$(2).manifest
]; then mt.exe
$(MTFLAGS
) -nologo
-manifest
$(WORKDIR
)/LinkTarget
/$(2).manifest
$(SRCDIR
)/solenv
/gbuild
/platform
/win_compatibility.manifest
-outputresource
:$(1)\
;1 && touch
-r
$(1) $(WORKDIR
)/LinkTarget
/$(2).manifest
; fi
) \
298 $(if
$(filter Executable
,$(TARGETTYPE
)),&& mt.exe
$(MTFLAGS
) -nologo
-manifest
$(SRCDIR
)/solenv
/gbuild
/platform
/DeclareDPIAware.manifest
-updateresource
:$(1)\
;1 ) \
299 $(if
$(filter Library
,$(TARGETTYPE
)),&& \
300 echo
$(notdir $(1)) > $(WORKDIR
)/LinkTarget
/$(2).exports.tmp
&& \
302 -exports
$(ILIBTARGET
) \
303 >> $(WORKDIR
)/LinkTarget
/$(2).exports.tmp
&& \
304 $(call gb_Helper_replace_if_different_and_touch
,$(WORKDIR
)/LinkTarget
/$(2).exports.tmp
,$(WORKDIR
)/LinkTarget
/$(2).exports
,$(1))) \
306 $(call gb_Trace_EndRange
,$(2),LNK
) $(if
$(gb_TRACE
),;) \
310 define gb_MSVCRT_subst
311 $(if
$(MSVC_USE_DEBUG_RUNTIME
),$(subst msvcrt
,msvcrtd
,$(subst msvcprt
,msvcprtd
,$(subst libcmt
,libcmtd
,$(subst libvcruntime
,libvcruntimed
,$(subst libucrt
,libucrtd
,$(subst libcpmt
,libcpmtd
,$(subst msvcmrt
,msvcmrtd
,$(1)))))))),$(1))
314 define gb_LinkTarget_use_system_win32_libs
315 $(call gb_LinkTarget_add_libs
,$(1),$(foreach lib
,$(2),$(call gb_MSVCRT_subst
,$(lib
)).lib
))
316 $(if
$(call gb_LinkTarget__is_merged
,$(1)),\
317 $(call gb_LinkTarget_add_libs
,$(call gb_Library_get_linktarget
,merged
),$(foreach lib
,$(2),$(call gb_MSVCRT_subst
,$(lib
)).lib
)))
320 # Flags common for PE executables (EXEs and DLLs).
321 # Enable incremental only when debugging to speed up relinking.
322 gb_Windows_PE_TARGETTYPEFLAGS
:= \
325 $(if
$(ENABLE_DEBUG
),, -incremental
:no
) \
326 $(if
$(filter NO
,$(LIBRARY_X64
)), -safeseh
) \
331 # link.exe in -LIB mode doesn't understand -debug, use it only for EXEs and DLLs
332 ifeq ($(ENABLE_DBGUTIL
),TRUE
)
333 # fastlink is faster but pdb files reference .obj files
334 # but don't do that for setup_native DLLs: this produces make error 139 in some configurations
335 gb_Windows_PE_TARGETTYPEFLAGS_DEBUGINFO
= $(if
$(filter -U_DLL
,$(1)),-debug
,-debug
:fastlink
)
337 gb_Windows_PE_TARGETTYPEFLAGS_DEBUGINFO
= -debug
340 ifeq ($(ENABLE_LTO
),TRUE
)
341 gb_Windows_PE_TARGETTYPEFLAGS
+= -LTCG
347 gb_Library_DEFS
:= -D_DLL
348 gb_Library_TARGETTYPEFLAGS
:= \
350 $(gb_Windows_PE_TARGETTYPEFLAGS
)
352 gb_Library_get_rpath
:=
354 gb_Library_SYSPRE
:= i
355 gb_Library_PLAINEXT
:= .lib
356 gb_Library_PLAINEXT_FOR_BUILD
:= .lib
358 gb_Library_LAYER
:= \
359 $(foreach lib
,$(gb_Library_OOOLIBS
),$(lib
):OOO
) \
360 $(foreach lib
,$(gb_Library_PLAINLIBS_NONE
),$(lib
):NONE
) \
361 $(foreach lib
,$(gb_Library_PLAINLIBS_URE
),$(lib
):URELIB
) \
362 $(foreach lib
,$(gb_Library_PLAINLIBS_OOO
),$(lib
):OOO
) \
363 $(foreach lib
,$(gb_Library_PLAINLIBS_OXT
),$(lib
):OXT
) \
364 $(foreach lib
,$(gb_Library_PRIVATELIBS_URE
),$(lib
):URELIB
) \
365 $(foreach lib
,$(gb_Library_RTVERLIBS
),$(lib
):URELIB
) \
366 $(foreach lib
,$(gb_Library_UNOVERLIBS
),$(lib
):URELIB
) \
367 $(foreach lib
,$(gb_Library_EXTENSIONLIBS
),$(lib
):OXT
) \
368 $(foreach lib
,$(gb_Library_PLAINLIBS_SHLXTHDL
),$(lib
):SHLXTHDL
) \
370 gb_Library_ILIBFILENAMES
:=\
371 $(foreach lib
,$(gb_Library_KNOWNLIBS
),$(lib
):$(gb_Library_SYSPRE
)$(lib
)$(gb_Library_PLAINEXT
)) \
373 gb_Library_DLLEXT
:= .dll
374 gb_Library_UDK_MAJORVER
:= 3
375 gb_Library_RTEXT
:= MSC
$(gb_Library_DLLEXT
)
376 gb_Library_OOOEXT
:= $(gb_Library_DLLPOSTFIX
)$(gb_Library_DLLEXT
)
377 gb_Library_UNOEXT
:= .uno
$(gb_Library_DLLEXT
)
378 gb_Library_UNOVEREXT
:= $(gb_Library_UDK_MAJORVER
)$(gb_Library_DLLEXT
)
379 gb_Library_RTVEREXT
:= $(gb_Library_UDK_MAJORVER
)$(gb_Library_RTEXT
)
381 gb_Library_FILENAMES
:=\
382 $(foreach lib
,$(gb_Library_OOOLIBS
),$(lib
):$(lib
)$(gb_Library_OOOEXT
)) \
383 $(foreach lib
,$(gb_Library_PLAINLIBS_NONE
),$(lib
):$(lib
)$(gb_Library_DLLEXT
)) \
384 $(foreach lib
,$(gb_Library_PLAINLIBS_URE
),$(lib
):$(lib
)$(gb_Library_DLLEXT
)) \
385 $(foreach lib
,$(gb_Library_PLAINLIBS_OOO
),$(lib
):$(lib
)$(gb_Library_DLLEXT
)) \
386 $(foreach lib
,$(gb_Library_PLAINLIBS_OXT
),$(lib
):$(lib
)$(gb_Library_DLLEXT
)) \
387 $(foreach lib
,$(gb_Library_PLAINLIBS_SHLXTHDL
),$(lib
):$(lib
)$(gb_Library_DLLEXT
)) \
388 $(foreach lib
,$(gb_Library_PRIVATELIBS_URE
),$(lib
):$(lib
)$(gb_Library_OOOEXT
)) \
389 $(foreach lib
,$(gb_Library_RTVERLIBS
),$(lib
):$(lib
)$(gb_Library_RTVEREXT
)) \
390 $(foreach lib
,$(gb_Library_UNOVERLIBS
),$(lib
):$(lib
)$(gb_Library_UNOVEREXT
)) \
391 $(foreach lib
,$(gb_Library_EXTENSIONLIBS
),$(lib
):$(lib
)$(gb_Library_UNOEXT
)) \
393 # An assembly is a special kind of library for CLI
394 define gb_Library_Assembly
395 $(call gb_Library_Library
,$(1))
396 $(call gb_Library_get_linktarget_target
,$(1)) : NATIVERES
:=
400 define gb_Library_Library_platform
401 $(call gb_LinkTarget_set_ilibtarget
,$(2),$(3))
403 $(call gb_LinkTarget_add_auxtargets
,$(2),\
404 $(patsubst %.lib
,%.exp
,$(3)) \
405 $(call gb_LinkTarget_get_manifestfile
,$(2)) \
406 $(call gb_LinkTarget_get_pdbfile_in
,$(2)) \
407 $(call gb_LinkTarget_get_pdbfile_out
,$(2)) \
408 $(call gb_LinkTarget_get_ilkfile
,$(2)) \
411 $(call gb_Library_add_default_nativeres
,$(1),$(1)/default
)
413 $(call gb_LinkTarget_get_target
,$(2)) \
414 $(call gb_LinkTarget_get_headers_target
,$(2)) : PDBFILE
= $(call gb_LinkTarget_get_pdbfile_in
,$(2))
418 define gb_Library_add_default_nativeres
419 $(call gb_WinResTarget_WinResTarget_init
,$(2))
420 $(call gb_WinResTarget_set_rcfile
,$(2),include/default
)
421 $(call gb_WinResTarget_add_defs
,$(2),\
422 -DVERVARIANT
="$(LIBO_VERSION_PATCH)" \
423 -DRES_APP_VENDOR
="$(OOO_VENDOR)" \
424 -DORG_NAME
="$(call gb_Library_get_filename,$(1))"\
425 -DINTERNAL_NAME
="$(subst $(gb_Library_DLLEXT),,$(call gb_Library_get_filename,$(1)))" \
426 -DADDITIONAL_VERINFO1
="" \
427 -DADDITIONAL_VERINFO2
="" \
428 -DADDITIONAL_VERINFO3
="" \
430 $(call gb_Library_add_nativeres
,$(1),$(2))
431 $(call gb_Library_get_clean_target
,$(1)) : $(call gb_WinResTarget_get_clean_target
,$(2))
435 define gb_Executable_add_default_nativeres
436 $(call gb_WinResTarget_WinResTarget_init
,$(1)/default
)
437 $(call gb_WinResTarget_set_rcfile
,$(1)/default
,include/default
)
438 $(call gb_WinResTarget_add_defs
,$(1)/default
,\
439 -DVERVARIANT
="$(LIBO_VERSION_PATCH)" \
440 -DRES_APP_VENDOR
="$(OOO_VENDOR)" \
441 -DORG_NAME
="$(call gb_Executable_get_filename,$(1))"\
442 -DINTERNAL_NAME
="$(subst $(gb_Executable_EXT),,$(call gb_Executable_get_filename,$(1)))" \
443 -DADDITIONAL_VERINFO1
="$(if $(2),VALUE \"FileDescription\"$(COMMA) \"$(2)\\0\")" \
444 -DADDITIONAL_VERINFO2
="" \
445 -DADDITIONAL_VERINFO3
="" \
447 $(call gb_Executable_add_nativeres
,$(1),$(1)/default
)
448 $(call gb_Executable_get_clean_target
,$(1)) : $(call gb_WinResTarget_get_clean_target
,$(1)/default
)
452 define gb_LinkTarget_add_nativeres
453 $(call gb_LinkTarget_get_target
,$(1)) : $(call gb_WinResTarget_get_target
,$(2))
454 $(call gb_LinkTarget_get_target
,$(1)) : NATIVERES
+= $(call gb_WinResTarget_get_target
,$(2))
458 define gb_LinkTarget_set_nativeres
459 $(call gb_LinkTarget_get_target
,$(1)) : $(call gb_WinResTarget_get_target
,$(2))
460 $(call gb_LinkTarget_get_target
,$(1)) : NATIVERES
:= $(call gb_WinResTarget_get_target
,$(2))
464 define gb_Library_get_ilibfilename
465 $(patsubst $(1):%,%,$(filter $(1):%,$(gb_Library_ILIBFILENAMES
)))
468 gb_Library_get_sdk_link_dir
= $(INSTDIR
)/$(SDKDIRNAME
)/lib
470 gb_Library_get_sdk_link_lib
= $(gb_Library_get_ilib_target
)
472 # StaticLibrary class
474 gb_StaticLibrary_get_filename
= $(1).lib
475 gb_StaticLibrary_PLAINEXT
:= .lib
477 define gb_StaticLibrary_StaticLibrary_platform
478 $(call gb_LinkTarget_get_target
,$(2)) \
479 $(call gb_LinkTarget_get_headers_target
,$(2)) : PDBFILE
= $(call gb_LinkTarget_get_pdbfile_in
,$(2))
481 $(call gb_LinkTarget_add_auxtargets
,$(2),\
482 $(call gb_LinkTarget_get_pdbfile_in
,$(2)) \
489 gb_Executable_EXT
:= .exe
490 gb_Executable_EXT_for_build
:= .exe
491 gb_Executable_TARGETTYPEFLAGS
:= $(gb_Windows_PE_TARGETTYPEFLAGS
)
493 gb_Executable_get_rpath
:=
495 # surprisingly some executables have exports so link.exe creates import lib
496 define gb_Executable_Executable_platform
497 $(call gb_LinkTarget_set_ilibtarget
,$(2),$(3))
499 $(call gb_LinkTarget_add_auxtargets
,$(2),\
500 $(patsubst %.lib
,%.exp
,$(3)) \
501 $(call gb_LinkTarget_get_pdbfile_out
,$(2)) \
502 $(call gb_LinkTarget_get_pdbfile_in
,$(2)) \
503 $(call gb_LinkTarget_get_manifestfile
,$(2)) \
506 $(call gb_LinkTarget_get_target
,$(2)) \
507 $(call gb_LinkTarget_get_headers_target
,$(2)) : PDBFILE
:= $(call gb_LinkTarget_get_pdbfile_in
,$(2))
513 gb_CppunitTest_UNITTESTFAILED
:= $(GBUILDDIR
)/platform
/unittest-failed-WNT.sh
514 gb_CppunitTest_PYTHONDEPS
:= $(call gb_Package_get_target
,python3
)
515 gb_CppunitTest_DEFS
:= -D_DLL
516 gb_CppunitTest_CPPTESTPRECOMMAND
:= $(call gb_Helper_prepend_ld_path
,$(shell cygpath
-u
$(gb_Library_DLLDIR
)):$(shell cygpath
-u
$(WORKDIR
)/UnpackedTarball
/cppunit
/src
/cppunit
/$(if
$(MSVC_USE_DEBUG_RUNTIME
),DebugDll
,ReleaseDll
)))
517 gb_CppunitTest_get_filename
= test_
$(1).dll
518 gb_CppunitTest_get_ilibfilename
= itest_
$(1).lib
520 define gb_CppunitTest_CppunitTest_platform
521 $(call gb_LinkTarget_set_ilibtarget
,$(2),$(3))
523 $(call gb_LinkTarget_add_auxtargets
,$(2),\
524 $(patsubst %.lib
,%.exp
,$(3)) \
526 $(call gb_LinkTarget_get_manifestfile
,$(2)) \
527 $(call gb_LinkTarget_get_pdbfile_out
,$(2)) \
528 $(call gb_LinkTarget_get_pdbfile_in
,$(2)) \
529 $(call gb_LinkTarget_get_ilkfile
,$(2)) \
532 $(call gb_LinkTarget_get_target
,$(2)) \
533 $(call gb_LinkTarget_get_headers_target
,$(2)) : PDBFILE
= $(call gb_LinkTarget_get_pdbfile_in
,$(2))
539 ifneq ($(OOO_TEST_SOFFICE
),)
540 gb_JunitTest_SOFFICEARG
:=$(OOO_TEST_SOFFICE
)
542 ifneq ($(gb_JunitTest_DEBUGRUN
),)
543 gb_JunitTest_SOFFICEARG
:=connect
:pipe
,name
=$(USER
)
545 gb_JunitTest_SOFFICEARG
:=path
:$(INSTROOT
)/$(LIBO_BIN_FOLDER
)/soffice
550 define gb_JunitTest_JunitTest_platform
551 $(call gb_JunitTest_get_target
,$(1)) : DEFS
:= \
552 -Dorg.openoffice.
test.arg.soffice
="$(gb_JunitTest_SOFFICEARG)" \
553 -Dorg.openoffice.
test.arg.env
=PATH
="$$$$PATH" \
554 -Dorg.openoffice.
test.arg.user
=$(call gb_Helper_make_url
,$(call gb_JunitTest_get_userdir
,$(1)))
555 -Dorg.openoffice.
test.arg.workdir
=$(call gb_JunitTest_get_userdir
,$(1)) \
560 define gb_Module_DEBUGRUNCOMMAND
561 printf
"\nAttach the debugger to soffice.bin\n\n"
562 OFFICESCRIPT
=`mktemp` && \
563 printf
"$(INSTROOT)/$(LIBO_BIN_FOLDER)/soffice.exe" > $${OFFICESCRIPT} && \
564 printf
" --norestore --nologo '--accept=pipe,name=$(USER);urp;'\n" >> $${OFFICESCRIPT} && \
565 $(SHELL
) $${OFFICESCRIPT} && \
574 gb_PythonTest_PRECOMMAND
:= $(gb_CppunitTest_CPPTESTPRECOMMAND
)
575 gb_PythonTest_DEPS
= $(call gb_Package_get_target
,python3
) $(call gb_Executable_get_target
,python
)
577 ifeq ($(strip $(CPPUNITTRACE
)),TRUE
)
578 override CPPUNITTRACE
:= '$(DEVENV)' /debugexe
583 gb_WinResTarget_POSTFIX
:=.res
585 define gb_WinResTarget__command
586 $(call gb_Output_announce
,$(2),$(true
),RC
,1)
587 $(call gb_Helper_abbreviate_dirs
,\
588 mkdir
-p
$(dir $(1)) && \
596 $(eval
$(call gb_Helper_make_dep_targets
,\
600 ifeq ($(gb_FULLDEPS
),$(true
))
601 # FIXME this is used before TargetLocations is read?
602 gb_WinResTarget__command_target
= $(WORKDIR_FOR_BUILD
)/LinkTarget
/Executable
/makedepend.exe
603 define gb_WinResTarget__command_dep
604 $(call gb_Output_announce
,RC
:$(2),$(true
),DEP
,1)
605 $(call gb_Trace_StartRange
,RC
:$(2),DEP
)
606 $(call gb_Helper_abbreviate_dirs
,\
607 mkdir
-p
$(dir $(1)) && \
608 $(call gb_Executable_get_target_for_build
,makedepend
) \
615 $(call gb_Trace_EndRange
,RC
:$(2),DEP
)
618 gb_WinResTarget__command_target
=
619 gb_WinResTarget__command_dep
=
622 # InstallModuleTarget class
624 define gb_InstallModuleTarget_InstallModuleTarget_platform
625 $(call gb_InstallModuleTarget_add_defs
,$(1),\
633 # ExternalProject class
635 # Use the gcc wrappers for an autoconf based project
637 # gb_ExternalProject_register_targets project state_target
638 define gb_ExternalProject_use_autoconf
639 $(call gb_ExternalProject_get_preparation_target
,$(1)) : $(call gb_Executable_get_runtime_dependencies
,gcc-wrapper
) \
640 $(call gb_Executable_get_runtime_dependencies
,g
++-wrapper
)
641 $(call gb_ExternalProject_get_state_target
,$(1),$(2)): WRAPPERS
:= $(gb_AUTOCONF_WRAPPERS
)
644 # Set INCLUDE and LIB variables and unset MAKE/MAKEFLAGS when using nmake
646 # gb_ExternalProject_use_nmake project state_target
647 define gb_ExternalProject_use_nmake
648 $(call gb_ExternalProject_get_state_target
,$(1),$(2)): NMAKE
:= $(gb_NMAKE_VARS
)
651 # if ccache is enabled, then split it and use lastword as REAL_FOO
652 # /opt/lo/bin/ccache /cygdrive/c/PROGRA~2/MICROS~2.0/VC/bin/cl.exe
654 gb_AUTOCONF_WRAPPERS
= \
655 REAL_CC
="$(shell cygpath -w $(filter-out -%,$(CC)))" \
656 REAL_CC_FLAGS
="$(filter -%,$(CC))" \
657 CC
="$(call gb_Executable_get_target_for_build,gcc-wrapper)" \
658 REAL_CXX
="$(shell cygpath -w $(filter-out -%,$(CXX)))" \
659 REAL_CXX_FLAGS
="$(filter -%,$(CXX))" \
660 CXX
="$(call gb_Executable_get_target_for_build,g++-wrapper)" \
661 LD
="$(shell cygpath -w $(COMPATH)/bin/link.exe) -nologo"
663 gb_ExternalProject_INCLUDE
:= \
664 $(subst -I
,,$(subst $(WHITESPACE
),;,$(SOLARINC
)))
666 # Workaround for openssl build - it puts the CC var into additional pair of quotes. This breaks if
667 # CC consists of more than a single element such as when using "ccache compiler". In case the
668 # variables are exported for openssl, it closes and reopens the quotes after each element.
670 CC
="$(subst $(WHITESPACE),$(if $(filter openssl,$(1)),\" \", ),$(strip \
671 $(shell cygpath -ws $(filter-out -%,$(CC))) $(filter -%,$(CC))))" \
672 INCLUDE
="$(gb_ExternalProject_INCLUDE)" \
677 # InstallScript class
679 gb_InstallScript_EXT
:= .inf
681 # CliAssemblyTarget class
683 gb_CliAssemblyTarget_POLICYEXT
:= $(gb_Library_DLLEXT
)
684 gb_CliAssemblyTarget_get_dll
= $(call gb_Library__get_dir_for_layer
,NONE
)/$(1)$(gb_CliAssemblyTarget_POLICYEXT
)
688 gb_Extension_LICENSEFILE_DEFAULT
:= $(INSTROOT
)/license.txt
690 # UnpackedTarget class
692 gb_UnpackedTarget_TARFILE_LOCATION
:= $(shell cygpath
-u
$(TARFILE_LOCATION
))
696 # use responsefile because cui has too many files for command line
697 define gb_UIConfig__command
698 $(call gb_Helper_abbreviate_dirs
,\
699 RESPONSEFILE
=$(call gb_var2file
,$(shell $(gb_MKTEMP
)),$(if
$(UI_IMAGELISTS
),$(strip $(UI_IMAGELISTS
)),/dev
/null
)) \
700 && tr
" " "\000" < $$RESPONSEFILE | tr
-d
"\r\n" > $$RESPONSEFILE.0 \
701 && $(SORT
) -u
--files0-from
=$$RESPONSEFILE.0 > $@ \
702 && rm $$RESPONSEFILE $$RESPONSEFILE.0 \
707 # use file list file because swriter has too many files for command line
708 define gb_UIConfig__gla11y_command
709 $(call gb_ExternalExecutale__check_registration
,python
)
710 $(call gb_Helper_abbreviate_dirs
,\
711 FILES
=$(call gb_var2file
,$(shell $(gb_MKTEMP
)),$(UIFILES
)) && \
712 $(gb_UIConfig_LXML_PATH
) $(if
$(SYSTEM_LIBXML
)$(SYSTEM_LIBXSLT
),,$(gb_Helper_set_ld_path
)) \
713 $(call gb_ExternalExecutable_get_command
,python
) \
714 $(gb_UIConfig_gla11y_SCRIPT
) $(gb_UIConfig_gla11y_PARAMETERS
) -o
$@
-L
$$FILES && \
720 # UIMenubarTarget class
722 define gb_UIMenubarTarget__command
723 $(call gb_Output_announce
,$(2),$(true
),UIM
,1)
724 $(call gb_Trace_StartRange
,$(2),UIM
)
726 $(call gb_Trace_EndRange
,$(2),UIM
)
730 gb_UIMenubarTarget_UIMenubarTarget_platform
:=
733 gb_Python_HOME
:= $(INSTDIR_FOR_BUILD
)/program
/python-core-
$(PYTHON_VERSION
)
734 gb_Python_PRECOMMAND
:= PATH
="$(shell cygpath -w $(INSTDIR_FOR_BUILD)/program)" PYTHONHOME
="$(gb_Python_HOME)" PYTHONPATH
="$${PYPATH:+$$PYPATH;}$(gb_Python_HOME)/lib;$(gb_Python_HOME)/lib/lib-dynload:$(INSTDIR_FOR_BUILD)/program"
735 gb_Python_INSTALLED_EXECUTABLE
:= $(INSTROOT_FOR_BUILD
)/$(LIBO_BIN_FOLDER
)/python.exe
737 gb_ICU_PRECOMMAND
:= PATH
="$(shell cygpath -w $(WORKDIR_FOR_BUILD)/UnpackedTarball/icu/source/lib)"
739 # vim: set noet sw=4: