mirror of
https://github.com/netblue30/firejail.git
synced 2026-05-15 14:16:14 -06:00
build: automatically generate header dependencies
Instead of manually specifying which source files depend on which
headers, use compiler flags to automatically generate depfiles (.d),
which declare the correct header (make) dependencies for each source
file (.c).
Use `-MMD` (which ignores system headers) to generate the dependencies
and `-MP` to prevent make from complaining when a header file is removed
while it is listed as a dependency in a depfile.
If depfiles exist, just include them. If not, make each object file
(.o) unconditionally depend on all header files in its source directory
and in src/include, to ensure that rebuilds are done when needed. The
latter case applies to the first build after `make clean` (which would
build everything anyway) and when the compiler does not support
generating depfiles.
Note that both gcc and clang have supported these options for a long
time.
Misc: This depends on the changes from commit 5b1bd33c7 ("build: use
full paths on compile/link targets", 2023-07-02) / PR #6158 to avoid
issues with make dependency tracking.
This commit is contained in:
parent
54057e15f6
commit
e665769f52
24 changed files with 77 additions and 52 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -1,3 +1,4 @@
|
|||
*.d
|
||||
*.o
|
||||
*.so
|
||||
*~
|
||||
|
|
|
|||
|
|
@ -81,6 +81,7 @@ LDFLAGS=@LDFLAGS@
|
|||
|
||||
# Project variables
|
||||
EXTRA_CFLAGS =@EXTRA_CFLAGS@
|
||||
DEPS_CFLAGS =@DEPS_CFLAGS@
|
||||
COMMON_CFLAGS = \
|
||||
-ggdb -O2 -DVERSION='"$(VERSION)"' \
|
||||
-Wall -Wextra $(HAVE_FATAL_WARNINGS) \
|
||||
|
|
@ -88,16 +89,18 @@ COMMON_CFLAGS = \
|
|||
-fstack-protector-all -D_FORTIFY_SOURCE=2 \
|
||||
-DPREFIX='"$(prefix)"' -DSYSCONFDIR='"$(sysconfdir)/firejail"' \
|
||||
-DLIBDIR='"$(libdir)"' -DBINDIR='"$(bindir)"' \
|
||||
-DVARDIR='"/var/lib/firejail"' \
|
||||
-DVARDIR='"/var/lib/firejail"'
|
||||
|
||||
PROG_CFLAGS = \
|
||||
$(COMMON_CFLAGS) \
|
||||
$(HAVE_GCOV) $(MANFLAGS) \
|
||||
$(EXTRA_CFLAGS) \
|
||||
$(DEPS_CFLAGS) \
|
||||
-fPIE
|
||||
|
||||
SO_CFLAGS = \
|
||||
$(COMMON_CFLAGS) \
|
||||
$(DEPS_CFLAGS) \
|
||||
-fPIC
|
||||
|
||||
EXTRA_LDFLAGS =@EXTRA_LDFLAGS@
|
||||
|
|
@ -105,4 +108,4 @@ PROG_LDFLAGS = -Wl,-z,relro -Wl,-z,now -fPIE -pie $(EXTRA_LDFLAGS)
|
|||
SO_LDFLAGS = -Wl,-z,relro -Wl,-z,now -fPIC
|
||||
LIBS =@LIBS@
|
||||
|
||||
CLEANFILES = *.o *.gcov *.gcda *.gcno *.plist
|
||||
CLEANFILES = *.d *.o *.gcov *.gcda *.gcno *.plist
|
||||
|
|
|
|||
47
configure
vendored
47
configure
vendored
|
|
@ -682,6 +682,7 @@ PKG_CONFIG_PATH
|
|||
PKG_CONFIG
|
||||
HAVE_APPARMOR
|
||||
HAVE_IDS
|
||||
DEPS_CFLAGS
|
||||
OBJEXT
|
||||
EXEEXT
|
||||
ac_ct_CC
|
||||
|
|
@ -3270,8 +3271,51 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
|
|||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
HAVE_SPECTRE="no"
|
||||
DEPS_CFLAGS=""
|
||||
|
||||
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -MMD -MP" >&5
|
||||
printf %s "checking whether C compiler accepts -MMD -MP... " >&6; }
|
||||
if test ${ax_cv_check_cflags___MMD__MP+y}
|
||||
then :
|
||||
printf %s "(cached) " >&6
|
||||
else $as_nop
|
||||
|
||||
ax_check_save_flags=$CFLAGS
|
||||
CFLAGS="$CFLAGS -MMD -MP"
|
||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
/* end confdefs.h. */
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
if ac_fn_c_try_compile "$LINENO"
|
||||
then :
|
||||
ax_cv_check_cflags___MMD__MP=yes
|
||||
else $as_nop
|
||||
ax_cv_check_cflags___MMD__MP=no
|
||||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||
CFLAGS=$ax_check_save_flags
|
||||
fi
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___MMD__MP" >&5
|
||||
printf "%s\n" "$ax_cv_check_cflags___MMD__MP" >&6; }
|
||||
if test "x$ax_cv_check_cflags___MMD__MP" = xyes
|
||||
then :
|
||||
|
||||
DEPS_CFLAGS="$DEPS_CFLAGS -MMD -MP"
|
||||
|
||||
else $as_nop
|
||||
:
|
||||
fi
|
||||
|
||||
|
||||
HAVE_SPECTRE="no"
|
||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -mindirect-branch=thunk" >&5
|
||||
printf %s "checking whether C compiler accepts -mindirect-branch=thunk... " >&6; }
|
||||
if test ${ax_cv_check_cflags___mindirect_branch_thunk+y}
|
||||
|
|
@ -5311,6 +5355,7 @@ Compile options:
|
|||
CPPFLAGS: $CPPFLAGS
|
||||
LDFLAGS: $LDFLAGS
|
||||
EXTRA_CFLAGS: $EXTRA_CFLAGS
|
||||
DEPS_CFLAGS: $DEPS_CFLAGS
|
||||
EXTRA_LDFLAGS: $EXTRA_LDFLAGS
|
||||
LIBS: $LIBS
|
||||
fatal warnings: $HAVE_FATAL_WARNINGS
|
||||
|
|
|
|||
|
|
@ -20,6 +20,12 @@ AC_CONFIG_MACRO_DIR([m4])
|
|||
|
||||
AC_PROG_CC
|
||||
|
||||
DEPS_CFLAGS=""
|
||||
AC_SUBST([DEPS_CFLAGS])
|
||||
AX_CHECK_COMPILE_FLAG([-MMD -MP], [
|
||||
DEPS_CFLAGS="$DEPS_CFLAGS -MMD -MP"
|
||||
])
|
||||
|
||||
HAVE_SPECTRE="no"
|
||||
AX_CHECK_COMPILE_FLAG([-mindirect-branch=thunk], [
|
||||
HAVE_SPECTRE="yes"
|
||||
|
|
@ -279,6 +285,7 @@ Compile options:
|
|||
CPPFLAGS: $CPPFLAGS
|
||||
LDFLAGS: $LDFLAGS
|
||||
EXTRA_CFLAGS: $EXTRA_CFLAGS
|
||||
DEPS_CFLAGS: $DEPS_CFLAGS
|
||||
EXTRA_LDFLAGS: $EXTRA_LDFLAGS
|
||||
LIBS: $LIBS
|
||||
fatal warnings: $HAVE_FATAL_WARNINGS
|
||||
|
|
|
|||
|
|
@ -7,6 +7,4 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/etc_groups.h
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,6 +7,4 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h ../include/syscall.h
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h ../include/syscall.h
|
||||
EXTRA_OBJS = ../lib/common.o
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,6 +7,4 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,13 +7,6 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = \
|
||||
../include/common.h \
|
||||
../include/euid_common.h \
|
||||
../include/libnetlink.h \
|
||||
../include/firejail_user.h \
|
||||
../include/pid.h
|
||||
|
||||
EXTRA_OBJS = ../lib/common.o ../lib/firejail_user.o
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,19 +7,6 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = \
|
||||
../include/rundefs.h \
|
||||
../include/common.h \
|
||||
../include/ldd_utils.h \
|
||||
../include/euid_common.h \
|
||||
../include/pid.h \
|
||||
../include/seccomp.h \
|
||||
../include/syscall_i386.h \
|
||||
../include/syscall_x86_64.h \
|
||||
../include/firejail_user.h \
|
||||
../include/etc_groups.h
|
||||
|
||||
|
||||
EXTRA_OBJS = \
|
||||
../lib/common.o \
|
||||
../lib/ldd_utils.o \
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h ../include/pid.h
|
||||
EXTRA_OBJS = ../lib/common.o ../lib/pid.o
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h ../include/syscall.h ../include/ldd_utils.h
|
||||
EXTRA_OBJS = ../lib/common.o ../lib/ldd_utils.o
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h ../include/libnetlink.h
|
||||
EXTRA_OBJS = ../lib/common.o ../lib/libnetlink.o
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h ../include/syscall.h
|
||||
EXTRA_OBJS = ../lib/common.o
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h ../include/seccomp.h ../include/syscall.h
|
||||
EXTRA_OBJS = ../lib/common.o ../lib/errno.o
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h ../include/seccomp.h ../include/syscall.h
|
||||
EXTRA_OBJS = ../lib/common.o ../lib/errno.o ../lib/syscall.o
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h ../include/syscall.h
|
||||
EXTRA_OBJS = ../lib/common.o ../lib/errno.o ../lib/syscall.o
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,6 +7,4 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h ../include/pid.h
|
||||
EXTRA_OBJS = ../lib/common.o ../lib/pid.o
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
|
|
@ -7,6 +7,4 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
SO = $(MOD_DIR)/$(MOD).so
|
||||
TARGET = $(SO)
|
||||
|
||||
EXTRA_HDRS = ../include/seccomp.h ../include/rundefs.h
|
||||
|
||||
include $(ROOT)/src/so.mk
|
||||
|
|
|
|||
|
|
@ -7,6 +7,4 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
SO = $(MOD_DIR)/$(MOD).so
|
||||
TARGET = $(SO)
|
||||
|
||||
EXTRA_HDRS = ../include/rundefs.h
|
||||
|
||||
include $(ROOT)/src/so.mk
|
||||
|
|
|
|||
|
|
@ -7,6 +7,4 @@ MOD_DIR = $(ROOT)/src/$(MOD)
|
|||
PROG = $(MOD_DIR)/$(MOD)
|
||||
TARGET = $(PROG)
|
||||
|
||||
EXTRA_HDRS = ../include/common.h
|
||||
|
||||
include $(ROOT)/src/prog.mk
|
||||
|
|
|
|||
12
src/prog.mk
12
src/prog.mk
|
|
@ -3,16 +3,22 @@
|
|||
# Note: $(ROOT)/config.mk must be included before this file.
|
||||
#
|
||||
# The includer should probably define PROG and TARGET and may also want to
|
||||
# define EXTRA_HDRS and EXTRA_OBJS and extend CLEANFILES.
|
||||
# define EXTRA_OBJS and extend CLEANFILES.
|
||||
|
||||
HDRS := $(sort $(wildcard $(MOD_DIR)/*.h))
|
||||
HDRS :=
|
||||
SRCS := $(sort $(wildcard $(MOD_DIR)/*.c))
|
||||
OBJS := $(SRCS:.c=.o)
|
||||
DEPS := $(sort $(wildcard $(OBJS:.o=.d)))
|
||||
|
||||
ifeq ($(DEPS),)
|
||||
HDRS := $(sort $(wildcard $(MOD_DIR)/*.h $(ROOT)/src/include/*.h))
|
||||
endif
|
||||
|
||||
.PHONY: all
|
||||
all: $(TARGET)
|
||||
-include $(DEPS)
|
||||
|
||||
%.o : %.c $(HDRS) $(EXTRA_HDRS) $(ROOT)/config.mk
|
||||
%.o : %.c $(HDRS) $(ROOT)/config.mk
|
||||
$(CC) $(PROG_CFLAGS) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
|
||||
|
||||
$(PROG): $(OBJS) $(EXTRA_OBJS) $(ROOT)/config.mk
|
||||
|
|
|
|||
12
src/so.mk
12
src/so.mk
|
|
@ -3,16 +3,22 @@
|
|||
# Note: $(ROOT)/config.mk must be included before this file.
|
||||
#
|
||||
# The includer should probably define SO and TARGET and may also want to define
|
||||
# EXTRA_HDRS and EXTRA_OBJS and extend CLEANFILES.
|
||||
# EXTRA_OBJS and extend CLEANFILES.
|
||||
|
||||
HDRS := $(sort $(wildcard $(MOD_DIR)/*.h))
|
||||
HDRS :=
|
||||
SRCS := $(sort $(wildcard $(MOD_DIR)/*.c))
|
||||
OBJS := $(SRCS:.c=.o)
|
||||
DEPS := $(sort $(wildcard $(OBJS:.o=.d)))
|
||||
|
||||
ifeq ($(DEPS),)
|
||||
HDRS := $(sort $(wildcard $(MOD_DIR)/*.h $(ROOT)/src/include/*.h))
|
||||
endif
|
||||
|
||||
.PHONY: all
|
||||
all: $(TARGET)
|
||||
-include $(DEPS)
|
||||
|
||||
%.o : %.c $(HDRS) $(EXTRA_HDRS) $(ROOT)/config.mk
|
||||
%.o : %.c $(HDRS) $(ROOT)/config.mk
|
||||
$(CC) $(SO_CFLAGS) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
|
||||
|
||||
$(SO): $(OBJS) $(EXTRA_OBJS) $(ROOT)/config.mk
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue