diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:06:44 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:06:44 +0000 |
commit | ed5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch) | |
tree | 7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /solenv/gbuild/platform/com_MSC_defs.mk | |
parent | Initial commit. (diff) | |
download | libreoffice-upstream.tar.xz libreoffice-upstream.zip |
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'solenv/gbuild/platform/com_MSC_defs.mk')
-rw-r--r-- | solenv/gbuild/platform/com_MSC_defs.mk | 352 |
1 files changed, 352 insertions, 0 deletions
diff --git a/solenv/gbuild/platform/com_MSC_defs.mk b/solenv/gbuild/platform/com_MSC_defs.mk new file mode 100644 index 000000000..364c0011f --- /dev/null +++ b/solenv/gbuild/platform/com_MSC_defs.mk @@ -0,0 +1,352 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +# set tmpdir to some mixed case path, suitable for native tools +gb_TMPDIR:=$(if $(TMPDIR),$(shell cygpath -m $(TMPDIR)),$(shell cygpath -m /tmp)) + +# please make generic Windows modifications to windows.mk +include $(GBUILDDIR)/platform/windows.mk + +gb_CC := cl +gb_CXX := cl +gb_LINK := link +gb_DUMPBIN := dumpbin +gb_AWK := awk +gb_CLASSPATHSEP := ; +gb_RC := rc + +# use CC/CXX if they are nondefaults +ifneq ($(origin CC),default) +gb_CC := $(CC) +gb_GCCP := $(CC) +endif +ifneq ($(origin CXX),default) +gb_CXX := $(CXX) +endif + +# _SCL_SECURE_NO_WARNINGS avoids deprecation warnings for STL algorithms +# like std::copy, std::transform (when MSVC_USE_DEBUG_RUNTIME is enabled) + +gb_COMPILERDEFS := \ + -DBOOST_ERROR_CODE_HEADER_ONLY \ + -DBOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE \ + -DBOOST_SYSTEM_NO_DEPRECATED \ + -D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING \ + -D_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING \ + -D_SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING \ + -D_CRT_NON_CONFORMING_SWPRINTFS \ + -D_CRT_NONSTDC_NO_DEPRECATE \ + -D_CRT_SECURE_NO_DEPRECATE \ + -D_SCL_SECURE_NO_WARNINGS \ + -D_MT \ + -D_DLL \ + -DCPPU_ENV=$(CPPU_ENV) \ + +ifeq ($(CPUNAME),INTEL) +gb_COMPILERDEFS += \ + -DBOOST_MEM_FN_ENABLE_CDECL \ + +endif + +gb_RCDEFS := \ + $(gb_WIN_VERSION_DEFS) \ + +gb_RCFLAGS := + +gb_AFLAGS := $(AFLAGS) + +# Do we really need to disable this many warnings? It seems to me that +# many of these warnings are for constructs that we have been actively +# cleaning away from the code, to avoid warnings when building with +# gcc or Clang and -Wall -Werror. + +# C4127: conditional expression is constant + +# C4201: nonstandard extension used : nameless struct/union + +# C4244: nonstandard extension used : formal parameter 'identifier' +# was previously defined as a type + +# C4250: 'class1' : inherits 'class2::member' via dominance + +# C4251: 'identifier' : class 'type' needs to have dll-interface to be +# used by clients of class 'type2' + +# C4267: conversion from 'size_t' to 'type', possible loss of data + +# C4275: non-DLL-interface classkey 'identifier' used as base for +# DLL-interface classkey 'identifier' + +# C4505: 'function' : unreferenced local function has been removed + +# C4611: interaction between 'function' and C++ object destruction is +# non-portable + +# C4702: unreachable code + +# C4706: assignment within conditional expression + +gb_CFLAGS := \ + -utf-8 \ + -Gd \ + -GR \ + -Gs \ + -GS \ + $(if $(MSVC_USE_DEBUG_RUNTIME),-MDd,-MD) \ + -nologo \ + -W4 \ + -wd4244 \ + -wd4505 \ + -bigobj \ + +gb_CXXFLAGS_DISABLE_WARNINGS = -w + +ifneq ($(COM_IS_CLANG),TRUE) + +# clang-cl doesn't support -Wv:18 for now +gb_CFLAGS += \ + -Wv:18 \ + +endif + +gb_CXXFLAGS := \ + -utf-8 \ + $(CXXFLAGS_CXX11) \ + -Gd \ + -GR \ + -Gs \ + -GS \ + -Gy \ + $(if $(MSVC_USE_DEBUG_RUNTIME),-MDd,-MD) \ + -nologo \ + -W4 \ + -wd4127 \ + -wd4201 \ + -wd4244 \ + -wd4250 \ + -wd4251 \ + -wd4267 \ + -wd4275 \ + -wd4505 \ + -wd4611 \ + -wd4706 \ + -bigobj \ + +ifneq ($(COM_IS_CLANG),TRUE) +gb_CXXFLAGS += -Zc:inline +gb_CXXFLAGS_ZCINLINE_OFF := -Zc:inline- +endif + +ifeq ($(CPUNAME),INTEL) + +gb_CXXFLAGS += \ + -Zm500 \ + +gb_CFLAGS += \ + -Zm500 \ + +endif + +ifeq ($(HAVE_DLLEXPORTINLINES),TRUE) +gb_CXXFLAGS += -Zc:dllexportInlines- +endif + +gb_CXXFLAGS_include := -FI +ifeq ($(COM_IS_CLANG),TRUE) +gb_CXXFLAGS_no_pch_warnings := -Wno-clang-cl-pch +endif + +ifneq ($(COM_IS_CLANG),TRUE) + +# clang-cl doesn't support -Wv:18 for now +# Work around MSVC 2017 C4702 compiler bug with release builds +# http://document-foundation-mail-archive.969070.n3.nabble.com/Windows-32-bit-build-failure-unreachable-code-tp4243848.html +# http://document-foundation-mail-archive.969070.n3.nabble.com/64-bit-Windows-build-failure-after-MSVC-Update-tp4246816.html +gb_CXXFLAGS += \ + -Wv:18 \ + $(if $(filter 0,$(gb_DEBUGLEVEL)),-wd4702) \ + +endif + +# rc.exe does not support -nologo in 6.1.6723.1 that is in the Windows SDK 6.0A +gb_RCFLAGS += -nologo + +# C4005: 'identifier' : macro redefinition + +gb_PCHWARNINGS = \ + -we4650 \ + -we4651 \ + -we4652 \ + -we4653 \ + -we4005 \ + +gb_STDLIBS := \ + advapi32.lib \ + +gb_CFLAGS_WERROR = $(if $(ENABLE_WERROR),-WX) + +# there does not seem to be a way to force C++03 with MSVC, nor with clang-cl against MSVC system +# headers +gb_CXX03FLAGS := + +gb_LinkTarget_EXCEPTIONFLAGS := \ + -DEXCEPTIONS_ON \ + -EHs \ + +gb_PrecompiledHeader_EXCEPTIONFLAGS := $(gb_LinkTarget_EXCEPTIONFLAGS) + +ifneq ($(gb_ENABLE_PCH),) +ifeq ($(COM_IS_CLANG),TRUE) +# the same as in com_GCC_defs.mk +gb_NO_PCH_TIMESTAMP := -Xclang -fno-pch-timestamp +endif +endif + +gb_LinkTarget_LDFLAGS := \ + $(if $(findstring s,$(filter-out --%,$(MAKEFLAGS))),-nologo,) \ + $(patsubst %,-LIBPATH:%,$(filter-out .,$(subst ;, ,$(subst \,/,$(ILIB))))) \ + +# Prevent warning spamming +# Happens because of the way we link our unit tests with our libraries. +# LNK4049: locally defined symbol +gb_LinkTarget_LDFLAGS += \ + /ignore:4217 /ignore:4049 + + +ifeq ($(ENABLE_Z7_DEBUG),) +gb_DEBUGINFO_FLAGS := \ + -FS \ + -Zi \ + +else +# ccache does not work with -Zi +gb_DEBUGINFO_FLAGS := \ + -Z7 \ + +endif + +# See gb_Windows_PE_TARGETTYPEFLAGS_DEBUGINFO +gb_LINKER_DEBUGINFO_FLAGS := + +gb_COMPILEROPTFLAGS := -O2 -Oy- +gb_COMPILERNOOPTFLAGS := -Od +gb_COMPILERDEBUGOPTFLAGS := + +ifeq ($(gb_FULLDEPS),$(true)) +gb_COMPILERDEPFLAGS := -showIncludes +define gb_create_deps +| LC_ALL=C $(GBUILDDIR)/platform/filter-showIncludes.awk -vdepfile=$(1) -vobjectfile=$(2) -vsourcefile=$(3); exit $${PIPESTATUS[0]} +endef +else +gb_COMPILERDEPFLAGS := +define gb_create_deps +| LC_ALL=C $(GBUILDDIR)/platform/filter-sourceName.awk; exit $${PIPESTATUS[0]} +endef +endif + +gb_LTOFLAGS := $(if $(filter TRUE,$(ENABLE_LTO)),-GL) + +# When compiling for CLR, disable "warning C4339: use of undefined type detected +# in CLR meta-data - use of this type may lead to a runtime exception": +gb_CXXCLRFLAGS := \ + $(if $(COM_IS_CLANG), \ + $(patsubst -std=%,-std:c++17 -Zc:__cplusplus,$(gb_CXXFLAGS)), \ + $(gb_CXXFLAGS)) \ + $(gb_LinkTarget_EXCEPTIONFLAGS) \ + -AI $(INSTDIR)/$(LIBO_URE_LIB_FOLDER) \ + -EHa \ + -clr \ + -wd4339 \ + -Wv:18 \ + -wd4267 \ + -Zc:twoPhase- \ + +ifeq ($(COM_IS_CLANG),TRUE) + +gb_CFLAGS += \ + -Wendif-labels \ + -Wshadow \ + -Wstrict-prototypes \ + -Wundef \ + -Wunused-macros \ + +gb_CXXFLAGS += \ + -Wendif-labels \ + -Wimplicit-fallthrough \ + -Wno-missing-braces \ + -Wnon-virtual-dtor \ + -Woverloaded-virtual \ + -Wshadow \ + -Wundef \ + -Wunused-macros \ + +endif + +ifeq ($(COM_IS_CLANG),TRUE) +gb_COMPILER_TEST_FLAGS := -Xclang -plugin-arg-loplugin -Xclang --unit-test-mode +ifeq ($(COMPILER_PLUGIN_TOOL),) +gb_COMPILER_PLUGINS := -Xclang -load -Xclang $(BUILDDIR)/compilerplugins/clang/plugin.dll -Xclang -add-plugin -Xclang loplugin +ifneq ($(COMPILER_PLUGIN_WARNINGS_ONLY),) +gb_COMPILER_PLUGINS += -Xclang -plugin-arg-loplugin -Xclang \ + --warnings-only='$(COMPILER_PLUGIN_WARNINGS_ONLY)' +endif +else +gb_COMPILER_PLUGINS := -Xclang -load -Xclang $(BUILDDIR)/compilerplugins/clang/plugin.dll -Xclang -plugin -Xclang loplugin $(foreach plugin,$(COMPILER_PLUGIN_TOOL), -Xclang -plugin-arg-loplugin -Xclang $(plugin)) +ifneq ($(UPDATE_FILES),) +gb_COMPILER_PLUGINS += -Xclang -plugin-arg-loplugin -Xclang --scope=$(UPDATE_FILES) +endif +endif +ifeq ($(COMPILER_PLUGINS_DEBUG),TRUE) +gb_COMPILER_PLUGINS += -Xclang -plugin-arg-loplugin -Xclang --debug +endif +gb_COMPILER_PLUGINS_WARNINGS_AS_ERRORS := \ + -Xclang -plugin-arg-loplugin -Xclang --warnings-as-errors +else +gb_COMPILER_TEST_FLAGS := +gb_COMPILER_PLUGINS := +gb_COMPILER_PLUGINS_WARNINGS_AS_ERRORS := +endif + +# Helper class + +gb_Helper_set_ld_path := PATH="$(shell cygpath -u $(INSTDIR_FOR_BUILD)/$(LIBO_URE_LIB_FOLDER)):$(shell cygpath -u $(INSTDIR_FOR_BUILD)/$(LIBO_BIN_FOLDER)):$$PATH" + +define gb_Helper_prepend_ld_path +PATH="$(shell cygpath -u $(INSTDIR_FOR_BUILD)/$(LIBO_URE_LIB_FOLDER)):$(shell cygpath -u $(INSTDIR_FOR_BUILD)/$(LIBO_BIN_FOLDER)):$(1):$$PATH" +endef + +# $(1): one directory pathname to append to the ld path +define gb_Helper_extend_ld_path +$(gb_Helper_set_ld_path)':$(shell cygpath -u $(1))' +endef + +# common macros to build GPG related libraries +# we explicitly have to replace cygwin with mingw32 for the host, but the build must stay cygwin, or cmd.exe processes will be spawned +gb_WIN_GPG_WINDRES_target := $(if $(filter INTEL,$(CPUNAME)),pe-i386,pe-x86-64) +gb_WIN_GPG_platform_switches := --build=$(BUILD_PLATFORM) --host=$(subst cygwin,mingw32,$(HOST_PLATFORM)) +gb_WIN_GPG_cross_setup_exports = export REAL_BUILD_CC="$(filter-out -%,$(CC_FOR_BUILD))" REAL_BUILD_CC_FLAGS="$(filter -%,$(CC_FOR_BUILD))" \ + && export CC_FOR_BUILD="$(call gb_Executable_get_target_for_build,gcc-wrapper) --wrapper-env-prefix=REAL_BUILD_ $(SOLARINC) -L$(subst ;, -L,$(ILIB_FOR_BUILD))" \ + && export RC='windres -O COFF --target=$(gb_WIN_GPG_WINDRES_target) --preprocessor=$(call gb_Executable_get_target_for_build,cpp) --preprocessor-arg=-+ -DRC_INVOKED -DWINAPI_FAMILY=0 $(SOLARINC)' + +ifneq ($(gb_ENABLE_PCH),) +# Enable use of .sum files for PCHs. +gb_COMPILER_SETUP += CCACHE_PCH_EXTSUM=1 +endif + +# vim: set noet sw=4: |