da00cd9ef9
...after
<6461e53781
>
"[Driver] Don't claim -c/-S",
> [CPT] sal/qa/rtl/strings/compile-oustring.cxx
> clang++: error: argument unused during compilation: '-c' [-Werror,-Wunused-command-line-argument]
etc.
Change-Id: I2a128c21fdc8a8858981a359880cf1d92c60cd68
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171692
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <stephan.bergmann@allotropia.de>
255 lines
8.8 KiB
Makefile
255 lines
8.8 KiB
Makefile
# -*- 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/.
|
|
#
|
|
|
|
ifeq ($(gb_FULLDEPS),$(true))
|
|
ifneq (,$(CCACHE_HARDLINK))
|
|
# cannot move hardlink over itself, so create dep file directly, even if that
|
|
# might leave a broken file behind in case the build is interrupted forcefully
|
|
define gb_cxx_dep_generation_options
|
|
-MMD -MT $(1) -MP -MF $(2)
|
|
endef
|
|
define gb_cxx_dep_copy
|
|
endef
|
|
else
|
|
define gb_cxx_dep_generation_options
|
|
-MMD -MT $(1) -MP -MF $(2)_
|
|
endef
|
|
define gb_cxx_dep_copy
|
|
&& mv $(1)_ $(1)
|
|
endef
|
|
endif
|
|
else
|
|
define gb_cxx_dep_generation_options
|
|
endef
|
|
define gb_cxx_dep_copy
|
|
endef
|
|
endif
|
|
|
|
# AsmObject class
|
|
|
|
gb_AsmObject_get_source = $(1)/$(2).s
|
|
|
|
# $(call gb_AsmObject__command,object,relative-source,source,dep-file)
|
|
define gb_AsmObject__command
|
|
$(call gb_Output_announce,$(2),$(true),ASM,3)
|
|
$(call gb_Helper_abbreviate_dirs,\
|
|
mkdir -p $(dir $(1)) $(dir $(4)) && cd $(SRCDIR) && \
|
|
$(gb_CC) \
|
|
-x assembler-with-cpp \
|
|
$(T_LTOFLAGS) \
|
|
$(gb_AFLAGS) \
|
|
$(if $(HAVE_ASM_END_BRANCH_INS_SUPPORT),-DEND_BRANCH_INS_SUPPORT) \
|
|
-c $(3) \
|
|
-o $(1)) \
|
|
$(INCLUDE) && \
|
|
echo "$(1) : $(3)" > $(4)
|
|
endef
|
|
|
|
# CObject class
|
|
|
|
# $(call gb_CObject__compiler,source,compiler)
|
|
define gb_CObject__compiler
|
|
$(if $(filter %.c %.m,$(1)), \
|
|
$(if $(2), $(2), $(gb_CC)), \
|
|
$(if $(2), $(2), $(gb_CXX)))
|
|
endef
|
|
|
|
# When gb_LinkTarget_use_clang is used, filter out GCC flags that Clang doesn't know.
|
|
# $(call gb_CObject__filter_out_clang_cflags,cflags)
|
|
define gb_CObject__filter_out_clang_cflags
|
|
$(filter-out $(gb_FilterOutClangCFLAGS),$(1))
|
|
endef
|
|
|
|
# $(call gb_CObject__command_pattern,object,flags,source,dep-file,compiler-plugins,compiler)
|
|
define gb_CObject__command_pattern
|
|
$(call gb_Helper_abbreviate_dirs,\
|
|
mkdir -p $(dir $(1)) $(dir $(4)) && cd $(SRCDIR) && \
|
|
$(gb_COMPILER_SETUP) \
|
|
$(if $(5),$(gb_COMPILER_PLUGINS_SETUP)) \
|
|
$(call gb_CObject__compiler,$(3),$(6)) \
|
|
$(DEFS) \
|
|
$(T_LTOFLAGS) \
|
|
$(if $(VISIBILITY),,$(gb_VISIBILITY_FLAGS)) \
|
|
$(if $(WARNINGS_NOT_ERRORS),$(if $(ENABLE_WERROR),$(if $(PLUGIN_WARNINGS_AS_ERRORS),$(gb_COMPILER_PLUGINS_WARNINGS_AS_ERRORS))),$(gb_CFLAGS_WERROR)) \
|
|
$(if $(5),$(gb_COMPILER_PLUGINS)) \
|
|
$(if $(COMPILER_TEST),-fsyntax-only -ferror-limit=0 -Xclang -verify) \
|
|
$(if $(6), $(call gb_CObject__filter_out_clang_cflags,$(2)),$(2)) \
|
|
$(if $(WARNINGS_DISABLED),$(gb_CXXFLAGS_DISABLE_WARNINGS)) \
|
|
$(if $(EXTERNAL_CODE),$(gb_CXXFLAGS_Wundef),$(gb_DEFS_INTERNAL)) \
|
|
$(if $(COMPILER_TEST),,-c) $(3) \
|
|
-o $(1) \
|
|
$(if $(COMPILER_TEST),,$(call gb_cxx_dep_generation_options,$(1),$(4))) \
|
|
$(INCLUDE) \
|
|
$(PCHFLAGS) \
|
|
$(if $(COMPILER_TEST),,$(call gb_cxx_dep_copy,$(4))) \
|
|
)
|
|
endef
|
|
|
|
# PrecompiledHeader class
|
|
|
|
ifeq ($(COM_IS_CLANG),TRUE)
|
|
gb_PrecompiledHeader_get_enableflags = -include-pch $(call gb_PrecompiledHeader_get_target,$(1),$(2))
|
|
gb_PrecompiledHeader_EXT := .pch
|
|
# Workaround: Apple Clang version 12.0.5 sometimes tries to compile instead of generating PCH
|
|
# when used just with -c c++-header, so help it by being explicit.
|
|
gb_PrecompiledHeader_emit_pch := -Xclang -emit-pch
|
|
else
|
|
gb_PrecompiledHeader_get_enableflags = \
|
|
-include $(dir $(call gb_PrecompiledHeader_get_target,$(1),$(2)))$(notdir $(subst .gch,,$(call gb_PrecompiledHeader_get_target,$(1),$(2))))
|
|
gb_PrecompiledHeader_EXT := .gch
|
|
gb_PrecompiledHeader_emit_pch :=
|
|
endif
|
|
|
|
gb_PrecompiledHeader_extra_pch_cxxflags += $(PCH_INSTANTIATE_TEMPLATES)
|
|
|
|
# Clang supports building extra object file where it puts code that would be shared by all users of the PCH.
|
|
# Unlike with MSVC it is built as a separate step. The relevant options are used only when generating the PCH
|
|
# and when creating the PCH's object file, normal compilations using the PCH do not need extra options.
|
|
gb_PrecompiledHeader_pch_with_obj += $(BUILDING_PCH_WITH_OBJ)
|
|
gb_PrecompiledHeader_extra_pch_cxxflags += $(BUILDING_PCH_WITH_OBJ)
|
|
ifneq ($(BUILDING_PCH_WITH_OBJ),)
|
|
# If using Clang's PCH extra object, we may need to strip unused sections, otherwise inline and template functions
|
|
# emitted in that object may in some cases cause unresolved references to private symbols in other libraries.
|
|
gb_LinkTarget_LDFLAGS += $(LD_GC_SECTIONS)
|
|
gb_PrecompiledHeader_pch_with_obj += -ffunction-sections -fdata-sections
|
|
# Enable generating more shared code and debuginfo in the PCH object file.
|
|
gb_PrecompiledHeader_extra_pch_cxxflags += $(PCH_DEBUGINFO)
|
|
ifeq ($(ENABLE_OPTIMIZED),)
|
|
# -fmodules-codegen appears to be worth it only if not optimizing, otherwise optimizing all the functions emitted
|
|
# in the PCH object file may take way too long, especially given that many of those may get thrown away
|
|
gb_PrecompiledHeader_extra_pch_cxxflags += $(PCH_CODEGEN)
|
|
endif
|
|
endif
|
|
|
|
# This is for MSVC's object file built directly as a side-effect of building the PCH.
|
|
gb_PrecompiledHeader_get_objectfile =
|
|
|
|
# $(call gb_PrecompiledHeader__command,pchfile,pchtarget,source,cxxflags,includes,linktargetmakefilename,compiler)
|
|
define gb_PrecompiledHeader__command
|
|
$(call gb_Output_announce,$(2),$(true),PCH,1)
|
|
$(call gb_Trace_StartRange,$(2),PCH)
|
|
$(call gb_Helper_abbreviate_dirs,\
|
|
mkdir -p $(dir $(1)) $(dir $(call gb_PrecompiledHeader_get_dep_target,$(2),$(6))) && \
|
|
cd $(BUILDDIR)/ && \
|
|
CCACHE_DISABLE=1 $(gb_COMPILER_SETUP) \
|
|
$(if $(7),$(7),$(gb_CXX)) \
|
|
-x c++-header $(gb_PrecompiledHeader_emit_pch) \
|
|
$(if $(7), $(call gb_CObject__filter_out_clang_cflags,$(4)),$(4)) \
|
|
$(if $(WARNINGS_DISABLED),$(gb_CXXFLAGS_DISABLE_WARNINGS)) \
|
|
$(gb_COMPILERDEPFLAGS) \
|
|
$(if $(VISIBILITY),,$(gb_VISIBILITY_FLAGS)) \
|
|
$(if $(EXTERNAL_CODE),$(gb_CXXFLAGS_Wundef),$(gb_DEFS_INTERNAL)) \
|
|
$(gb_NO_PCH_TIMESTAMP) \
|
|
$(gb_PrecompiledHeader_extra_pch_cxxflags) \
|
|
$(5) \
|
|
$(call gb_cxx_dep_generation_options,$(1),$(call gb_PrecompiledHeader_get_dep_target_tmp,$(2),$(6))) \
|
|
-c $(patsubst %.cxx,%.hxx,$(3)) \
|
|
-o$(1) \
|
|
$(call gb_cxx_dep_copy,$(call gb_PrecompiledHeader_get_dep_target_tmp,$(2),$(6))) \
|
|
)
|
|
$(call gb_Trace_EndRange,$(2),PCH)
|
|
endef
|
|
|
|
ifeq ($(COM_IS_CLANG),TRUE)
|
|
# Clang has -fno-pch-timestamp, just checksum the file for CCACHE_PCH_EXTSUM
|
|
# $(call gb_PrecompiledHeader__sum_command,pchfile,pchtarget,source,cxxflags,includes,linktargetmakefilename,compiler)
|
|
define gb_PrecompiledHeader__sum_command
|
|
$(SHA256SUM) $(1) >$(1).sum
|
|
endef
|
|
else
|
|
# GCC does not generate the same .gch for the same input, so checksum the (preprocessed) input
|
|
# $(call gb_PrecompiledHeader__sum_command,pchfile,pchtarget,source,cxxflags,includes,linktargetmakefilename,compiler)
|
|
define gb_PrecompiledHeader__sum_command
|
|
$(call gb_Helper_abbreviate_dirs,\
|
|
CCACHE_DISABLE=1 $(gb_COMPILER_SETUP) \
|
|
$(if $(7),$(7),$(gb_CXX)) \
|
|
-x c++-header \
|
|
$(4) \
|
|
$(if $(WARNINGS_DISABLED),$(gb_CXXFLAGS_DISABLE_WARNINGS)) \
|
|
$(gb_COMPILERDEPFLAGS) \
|
|
$(if $(VISIBILITY),,$(gb_VISIBILITY_FLAGS)) \
|
|
$(if $(EXTERNAL_CODE),$(gb_CXXFLAGS_Wundef),$(gb_DEFS_INTERNAL)) \
|
|
$(gb_NO_PCH_TIMESTAMP) \
|
|
$(5) \
|
|
-E $(patsubst %.cxx,%.hxx,$(3)) \
|
|
-o- \
|
|
| $(SHA256SUM) >$(1).sum \
|
|
)
|
|
endef
|
|
endif
|
|
|
|
# not needed
|
|
gb_PrecompiledHeader__create_reuse_files =
|
|
gb_PrecompiledHeader__copy_reuse_files =
|
|
|
|
# YaccTarget class
|
|
|
|
define gb_YaccTarget__command
|
|
$(call gb_Output_announce,$(2),$(true),YAC,3)
|
|
$(call gb_Helper_abbreviate_dirs,\
|
|
mkdir -p $(dir $(3)) && \
|
|
$(BISON) $(T_YACCFLAGS) -v --defines=$(4) -o $(5) $(1) && touch $(3) )
|
|
|
|
endef
|
|
|
|
# CppunitTest class
|
|
|
|
ifeq ($(strip $(DEBUGCPPUNIT)),TRUE)
|
|
ifeq ($(strip $(CPPUNITTRACE)),)
|
|
CPPUNITTRACE := gdb --args
|
|
endif
|
|
ifeq ($(filter gdb,$(CPPUNITTRACE)),)
|
|
$(error For DEBUGCPPUNIT=TRUE, CPPUNITTRACE must be a command that runs gdb)
|
|
endif
|
|
gb_CppunitTest_DEBUGCPPUNIT := -nx --batch --command=$(SRCDIR)/solenv/bin/gdbtrycatchtrace-stdout
|
|
endif
|
|
|
|
# ExternalProject class
|
|
|
|
gb_ExternalProject_use_autoconf :=
|
|
gb_ExternalProject_use_nmake :=
|
|
|
|
# StaticLibrary class
|
|
|
|
gb_StaticLibrary_get_filename = lib$(1).a
|
|
gb_StaticLibrary_PLAINEXT := .a
|
|
gb_StaticLibrary_StaticLibrary_platform :=
|
|
|
|
gb_LinkTarget_get_linksearchpath_for_layer = \
|
|
-L$(gb_StaticLibrary_WORKDIR) \
|
|
-L$(call gb_Library_get_sdk_link_dir) \
|
|
$(foreach layer,\
|
|
$(subst +, ,$(patsubst $(1):%.,%,\
|
|
$(filter $(1):%.,$(gb_LinkTarget_LAYER_LINKPATHS)))),\
|
|
$(patsubst $(layer):%,-L%,\
|
|
$(filter $(layer):%,$(gb_Library_LAYER_DIRS))))
|
|
|
|
|
|
gb_ICU_PRECOMMAND := $(call gb_Helper_extend_ld_path,$(WORKDIR_FOR_BUILD)/UnpackedTarball/icu/source/lib)
|
|
|
|
# UIConfig class
|
|
|
|
# macOS sort(1) cannot read a response file
|
|
define gb_UIConfig__command
|
|
$(call gb_Helper_abbreviate_dirs,\
|
|
$(SORT) -u $(UI_IMAGELISTS) /dev/null > $@ \
|
|
)
|
|
|
|
endef
|
|
|
|
define gb_UIConfig__gla11y_command
|
|
$(call gb_Helper_abbreviate_dirs,\
|
|
$(gb_UIConfig_LXML_PATH) $(if $(SYSTEM_LIBXML)$(SYSTEM_LIBXSLT),,$(gb_Helper_set_ld_path)) \
|
|
$(call gb_ExternalExecutable_get_command,python) \
|
|
$(gb_UIConfig_gla11y_SCRIPT) $(gb_UIConfig_gla11y_PARAMETERS) -o $@ $(UIFILES)
|
|
)
|
|
|
|
endef
|
|
|
|
# vim: set noet sw=4 ts=4:
|