1## Common automake fragments for elfutils subdirectory makefiles. 2## 3## Copyright (C) 2010, 2014, 2016 Red Hat, Inc. 4## Copyright (C) 2023, Mark J. Wielaard <[email protected]> 5## 6## This file is part of elfutils. 7## 8## This file is free software; you can redistribute it and/or modify 9## it under the terms of either 10## 11## * the GNU Lesser General Public License as published by the Free 12## Software Foundation; either version 3 of the License, or (at 13## your option) any later version 14## 15## or 16## 17## * the GNU General Public License as published by the Free 18## Software Foundation; either version 2 of the License, or (at 19## your option) any later version 20## 21## or both in parallel, as here. 22## 23## elfutils is distributed in the hope that it will be useful, but 24## WITHOUT ANY WARRANTY; without even the implied warranty of 25## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 26## General Public License for more details. 27## 28## You should have received copies of the GNU General Public License and 29## the GNU Lesser General Public License along with this program. If 30## not, see <http://www.gnu.org/licenses/>. 31## 32 33DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' 34AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I.. 35 36# Drop the 'u' flag that automake adds by default. It is incompatible 37# with deterministic archives. 38ARFLAGS = cr 39 40# Warn about stack usage of more than 256K = 262144 bytes. 41if ADD_STACK_USAGE_WARNING 42STACK_USAGE_WARNING=-Wstack-usage=262144 43STACK_USAGE_NO_ERROR=-Wno-error=stack-usage= 44else 45STACK_USAGE_WARNING= 46STACK_USAGE_NO_ERROR= 47endif 48 49if SANE_LOGICAL_OP_WARNING 50LOGICAL_OP_WARNING=-Wlogical-op 51else 52LOGICAL_OP_WARNING= 53endif 54 55if HAVE_DUPLICATED_COND_WARNING 56DUPLICATED_COND_WARNING=-Wduplicated-cond 57else 58DUPLICATED_COND_WARNING= 59endif 60 61if HAVE_NULL_DEREFERENCE_WARNING 62NULL_DEREFERENCE_WARNING=-Wnull-dereference 63else 64NULL_DEREFERENCE_WARNING= 65endif 66 67if HAVE_IMPLICIT_FALLTHROUGH_WARNING 68# Use strict fallthrough. Only __attribute__((fallthrough)) will prevent the 69# warning 70if HAVE_IMPLICIT_FALLTHROUGH_5_WARNING 71IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough=5 72else 73IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough 74endif 75else 76IMPLICIT_FALLTHROUGH_WARNING= 77endif 78 79if HAVE_TRAMPOLINES_WARNING 80TRAMPOLINES_WARNING=-Wtrampolines 81else 82TRAMPOLINES_WARNING= 83endif 84 85if HAVE_NO_PACKED_NOT_ALIGNED_WARNING 86NO_PACKED_NOT_ALIGNED_WARNING=-Wno-packed-not-aligned 87else 88NO_PACKED_NOT_ALIGNED_WARNING= 89endif 90 91if HAVE_USE_AFTER_FREE3_WARNING 92USE_AFTER_FREE3_WARNING=-Wuse-after-free=3 93else 94USE_AFTER_FREE3_WARNING= 95endif 96 97AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \ 98 -Wold-style-definition -Wstrict-prototypes $(TRAMPOLINES_WARNING) \ 99 $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ 100 $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ 101 $(USE_AFTER_FREE3_WARNING) \ 102 $(if $($(*F)_no_Werror),,-Werror) \ 103 $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ 104 $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ 105 $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ 106 $($(*F)_CFLAGS) 107 108AM_CXXFLAGS = -std=c++11 -Wall -Wshadow \ 109 $(TRAMPOLINES_WARNING) \ 110 $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ 111 $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ 112 $(if $($(*F)_no_Werror),,-Werror) \ 113 $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \ 114 $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \ 115 $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \ 116 $($(*F)_CXXFLAGS) 117 118COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE)) 119 120DEFS.os = -DPIC -DSHARED 121if SYMBOL_VERSIONING 122DEFS.os += -DSYMBOL_VERSIONING 123else 124endif 125 126%.os: %.c %.o 127if AMDEP 128 $(AM_V_CC)if $(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) -MT $@ -MD -MP \ 129 -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \ 130 then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \ 131 rm -f "$(DEPDIR)/$*.Tpo"; \ 132 else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ 133 fi 134else 135 $(AM_V_CC)$(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) $< 136endif 137 138CLEANFILES = *.gcno *.gcda 139 140textrel_msg = echo "WARNING: TEXTREL found in '$@'" 141if FATAL_TEXTREL 142textrel_found = $(textrel_msg); exit 1 143else 144textrel_found = $(textrel_msg) 145endif 146textrel_check = if $(READELF) -d $@ | grep -F -q TEXTREL; then $(textrel_found); fi 147 148print-%: 149 @echo $*=$($*) 150