2012-11-22 18:54:21 +04:00
|
|
|
#
|
|
|
|
# Common definitions
|
|
|
|
#
|
|
|
|
|
|
|
|
ifeq ($(strip $(V)),)
|
|
|
|
E = @echo
|
|
|
|
Q = @
|
|
|
|
else
|
|
|
|
E = @\#
|
|
|
|
Q =
|
|
|
|
endif
|
|
|
|
|
|
|
|
FIND := find
|
|
|
|
CSCOPE := cscope
|
|
|
|
TAGS := ctags
|
2013-02-07 02:12:23 +04:00
|
|
|
RM := rm -f
|
2012-11-22 18:54:21 +04:00
|
|
|
LD := ld
|
|
|
|
CC := gcc
|
|
|
|
ECHO := echo
|
|
|
|
NM := nm
|
|
|
|
AWK := awk
|
2013-01-10 20:12:44 +04:00
|
|
|
SH := bash
|
2012-11-22 18:54:21 +04:00
|
|
|
MAKE := make
|
2013-01-09 17:08:17 +04:00
|
|
|
OBJCOPY := objcopy
|
2012-11-22 18:54:21 +04:00
|
|
|
|
2013-01-24 13:20:57 +04:00
|
|
|
#
|
|
|
|
# Fetch ARCH from the uname if not yet set
|
|
|
|
#
|
|
|
|
ARCH ?= $(shell uname -m | sed \
|
|
|
|
-e s/i.86/i386/ \
|
|
|
|
-e s/sun4u/sparc64/ \
|
|
|
|
-e s/arm.*/arm/ \
|
|
|
|
-e s/sa110/arm/ \
|
|
|
|
-e s/s390x/s390/ \
|
|
|
|
-e s/parisc64/parisc/ \
|
|
|
|
-e s/ppc.*/powerpc/ \
|
|
|
|
-e s/mips.*/mips/ \
|
|
|
|
-e s/sh[234].*/sh/)
|
2012-11-22 18:54:21 +04:00
|
|
|
|
2013-01-24 13:20:57 +04:00
|
|
|
ifeq ($(ARCH),i386)
|
2013-01-23 00:37:02 +04:00
|
|
|
ARCH := x86-32
|
2012-11-22 18:54:21 +04:00
|
|
|
DEFINES := -DCONFIG_X86_32
|
|
|
|
endif
|
2013-01-24 13:20:57 +04:00
|
|
|
ifeq ($(ARCH),x86_64)
|
2012-11-22 18:54:21 +04:00
|
|
|
ARCH := x86
|
|
|
|
DEFINES := -DCONFIG_X86_64
|
2013-01-09 17:08:17 +04:00
|
|
|
LDARCH := i386:x86-64
|
2012-11-22 18:54:21 +04:00
|
|
|
endif
|
|
|
|
|
2013-01-24 13:20:57 +04:00
|
|
|
ifeq ($(ARCH),arm)
|
2013-01-22 22:53:24 +04:00
|
|
|
ARCH := arm
|
|
|
|
ARCH_DEFINES := -DCONFIG_ARM
|
|
|
|
LDARCH := arm
|
|
|
|
CFLAGS += -march=armv7-a
|
|
|
|
endif
|
|
|
|
|
2012-11-22 18:54:21 +04:00
|
|
|
SRC_DIR ?= $(shell pwd)
|
2013-01-09 17:02:47 +04:00
|
|
|
ARCH_DIR := $(SRC_DIR)/arch/$(ARCH)
|
2012-11-22 18:54:21 +04:00
|
|
|
|
2013-01-14 11:25:43 +04:00
|
|
|
$(if $(wildcard $(ARCH_DIR)),,$(error "The architecture $(ARCH) isn't supported"))
|
|
|
|
|
2013-02-15 17:33:06 +04:00
|
|
|
CFLAGS += -I$(SRC_DIR)/include -I$(SRC_DIR)/pie -I$(ARCH_DIR) -I$(SRC_DIR)
|
2013-01-23 00:37:00 +04:00
|
|
|
CFLAGS += -iquote $(ARCH_DIR)/include -fno-strict-aliasing
|
2012-11-22 18:54:21 +04:00
|
|
|
|
|
|
|
LIBS := -lrt -lpthread -lprotobuf-c
|
|
|
|
|
|
|
|
DEFINES += -D_FILE_OFFSET_BITS=64
|
|
|
|
DEFINES += -D_GNU_SOURCE
|
|
|
|
|
|
|
|
WARNINGS := -Wall
|
|
|
|
|
|
|
|
ifneq ($(WERROR),0)
|
|
|
|
WARNINGS += -Werror
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(DEBUG),1)
|
|
|
|
DEFINES += -DCR_DEBUG
|
|
|
|
CFLAGS += -O0 -ggdb3
|
|
|
|
else
|
|
|
|
CFLAGS += -O2
|
|
|
|
endif
|
|
|
|
|
|
|
|
CFLAGS += $(WARNINGS) $(DEFINES)
|
|
|
|
PROTOBUF-LIB = $(SRC_DIR)/protobuf/protobuf-lib.o
|
2013-02-15 23:40:28 +04:00
|
|
|
SYSCALL-LIB := arch/$(ARCH)/syscalls.built-in.o
|
|
|
|
ARCH-LIB := arch/$(ARCH)/crtools.built-in.o
|
2012-11-22 18:54:21 +04:00
|
|
|
|
2013-01-23 00:37:00 +04:00
|
|
|
export E Q CC ECHO MAKE CFLAGS LIBS ARCH DEFINES MAKEFLAGS
|
2013-02-15 23:40:28 +04:00
|
|
|
export SRC_DIR SYSCALL-LIB SH RM ARCH_DIR OBJCOPY LDARCH LD
|
2011-09-23 12:00:45 +04:00
|
|
|
|
2013-02-11 19:24:06 +04:00
|
|
|
include scripts/Makefile.version
|
2013-02-15 23:40:28 +04:00
|
|
|
include scripts/Makefile.rules
|
|
|
|
#
|
|
|
|
# shorthand
|
|
|
|
build := -s -r -R --no-print-directory -f scripts/Makefile.build makefile=Makefile obj
|
2013-02-11 19:24:06 +04:00
|
|
|
|
2011-09-23 12:00:45 +04:00
|
|
|
PROGRAM := crtools
|
|
|
|
|
2012-04-18 15:44:00 +04:00
|
|
|
OBJS += parasite-syscall.o
|
|
|
|
OBJS += cr-restore.o
|
2011-09-23 12:00:45 +04:00
|
|
|
OBJS += crtools.o
|
2012-06-28 03:12:08 +04:00
|
|
|
OBJS += image.o
|
2012-08-02 08:06:29 +04:00
|
|
|
OBJS += net.o
|
2012-01-13 20:52:35 +04:00
|
|
|
OBJS += proc_parse.o
|
2011-09-23 12:00:45 +04:00
|
|
|
OBJS += cr-dump.o
|
|
|
|
OBJS += cr-show.o
|
2012-03-02 14:01:08 +04:00
|
|
|
OBJS += cr-check.o
|
2011-09-23 12:00:45 +04:00
|
|
|
OBJS += util.o
|
2012-02-01 13:00:49 +03:00
|
|
|
OBJS += util-net.o
|
2012-02-02 19:55:48 +04:00
|
|
|
OBJS += sysctl.o
|
2011-12-19 21:57:59 +04:00
|
|
|
OBJS += ptrace.o
|
2012-04-09 18:01:18 +04:00
|
|
|
OBJS += kcmp-ids.o
|
2012-02-24 23:11:08 +04:00
|
|
|
OBJS += rbtree.o
|
2011-12-19 18:52:50 +04:00
|
|
|
OBJS += log.o
|
2011-12-26 22:12:03 +04:00
|
|
|
OBJS += libnetlink.o
|
|
|
|
OBJS += sockets.o
|
2012-04-26 14:30:42 +04:00
|
|
|
OBJS += sk-inet.o
|
2012-04-28 17:29:14 +04:00
|
|
|
OBJS += sk-tcp.o
|
2012-04-26 15:04:40 +04:00
|
|
|
OBJS += sk-unix.o
|
2012-08-09 16:17:41 +04:00
|
|
|
OBJS += sk-packet.o
|
2012-04-23 14:12:00 +04:00
|
|
|
OBJS += sk-queue.o
|
2012-01-10 18:03:00 +04:00
|
|
|
OBJS += files.o
|
2012-06-20 20:00:30 +04:00
|
|
|
OBJS += files-reg.o
|
2012-04-05 20:02:00 +04:00
|
|
|
OBJS += pipes.o
|
2012-06-26 02:36:13 +04:00
|
|
|
OBJS += fifo.o
|
2012-02-28 18:27:28 +04:00
|
|
|
OBJS += file-ids.o
|
2012-01-26 15:27:00 +04:00
|
|
|
OBJS += namespaces.o
|
2012-01-31 11:29:23 +03:00
|
|
|
OBJS += uts_ns.o
|
2012-01-31 22:28:55 +04:00
|
|
|
OBJS += ipc_ns.o
|
2012-04-28 17:21:32 +04:00
|
|
|
OBJS += netfilter.o
|
2012-05-03 18:01:05 +04:00
|
|
|
OBJS += shmem.o
|
2012-05-04 13:38:00 +04:00
|
|
|
OBJS += eventfd.o
|
2012-05-04 13:38:00 +04:00
|
|
|
OBJS += eventpoll.o
|
2012-05-04 13:38:00 +04:00
|
|
|
OBJS += mount.o
|
2013-01-14 20:47:51 +04:00
|
|
|
OBJS += fsnotify.o
|
2012-08-02 12:26:35 +04:00
|
|
|
OBJS += signalfd.o
|
2012-06-26 14:51:00 +04:00
|
|
|
OBJS += pstree.o
|
2012-07-17 07:00:18 +04:00
|
|
|
OBJS += protobuf.o
|
2012-09-12 20:00:54 +04:00
|
|
|
OBJS += tty.o
|
2012-12-17 22:56:06 +03:00
|
|
|
OBJS += cr-exec.o
|
2012-12-21 17:35:34 +04:00
|
|
|
OBJS += cpu.o
|
2013-01-17 16:09:32 +08:00
|
|
|
OBJS += file-lock.o
|
2011-09-23 12:00:45 +04:00
|
|
|
|
2012-04-18 15:44:00 +04:00
|
|
|
DEPS := $(patsubst %.o,%.d,$(OBJS))
|
2012-01-23 11:26:00 +04:00
|
|
|
|
2012-07-28 09:08:16 +04:00
|
|
|
.PHONY: all zdtm test rebuild clean distclean tags cscope \
|
2013-02-15 23:40:28 +04:00
|
|
|
docs help pie protobuf arch/$(ARCH)
|
2012-05-29 18:33:00 +04:00
|
|
|
|
2012-12-25 22:43:14 +04:00
|
|
|
ifeq ($(GCOV),1)
|
|
|
|
%.o $(PROGRAM): override CFLAGS += --coverage
|
|
|
|
endif
|
|
|
|
|
2013-02-11 19:24:06 +04:00
|
|
|
all: pie $(VERSION_HEADER)
|
2012-05-31 15:39:00 +04:00
|
|
|
$(Q) $(MAKE) $(PROGRAM)
|
2012-05-29 18:33:00 +04:00
|
|
|
|
2013-02-15 23:40:28 +04:00
|
|
|
arch/$(ARCH)/%:: protobuf
|
|
|
|
$(Q) $(MAKE) $(build)=arch/$(ARCH) $@
|
|
|
|
arch/$(ARCH): protobuf
|
|
|
|
$(Q) $(MAKE) $(build)=arch/$(ARCH) all
|
|
|
|
|
|
|
|
pie: arch/$(ARCH) protobuf
|
2012-11-22 18:53:29 +04:00
|
|
|
$(Q) $(MAKE) -C pie/
|
2012-01-17 16:08:08 +03:00
|
|
|
|
2012-07-12 13:06:00 +04:00
|
|
|
protobuf:
|
2012-07-19 14:55:08 +04:00
|
|
|
$(Q) $(MAKE) -C protobuf/
|
2012-07-12 13:06:00 +04:00
|
|
|
|
2011-09-23 12:00:45 +04:00
|
|
|
%.o: %.c
|
|
|
|
$(E) " CC " $@
|
|
|
|
$(Q) $(CC) -c $(CFLAGS) $< -o $@
|
|
|
|
|
2012-01-26 14:00:40 +04:00
|
|
|
%.i: %.c
|
|
|
|
$(E) " CC " $@
|
|
|
|
$(Q) $(CC) -E $(CFLAGS) $< -o $@
|
|
|
|
|
2012-02-12 19:45:45 +04:00
|
|
|
%.s: %.c
|
|
|
|
$(E) " CC " $@
|
|
|
|
$(Q) $(CC) -S $(CFLAGS) -fverbose-asm $< -o $@
|
|
|
|
|
2012-05-29 18:33:00 +04:00
|
|
|
%.d: %.c
|
|
|
|
$(E) " DEP " $@
|
|
|
|
$(Q) $(CC) -M -MT $@ -MT $(patsubst %.d,%.o,$@) $(CFLAGS) $< -o $@
|
|
|
|
|
2013-02-15 23:40:28 +04:00
|
|
|
$(PROGRAM): $(OBJS) $(SYSCALL-LIB) $(ARCH-LIB) $(PROTOBUF-LIB)
|
2011-09-23 12:00:45 +04:00
|
|
|
$(E) " LINK " $@
|
2012-06-05 18:36:00 +04:00
|
|
|
$(Q) $(CC) $(CFLAGS) $^ $(LIBS) -o $@
|
2011-09-23 12:00:45 +04:00
|
|
|
|
2012-05-29 18:33:00 +04:00
|
|
|
zdtm: all
|
2012-01-24 19:37:44 +04:00
|
|
|
$(Q) $(MAKE) -C test/zdtm all
|
|
|
|
|
|
|
|
test: zdtm
|
2012-01-25 16:56:57 +04:00
|
|
|
$(Q) $(SH) test/zdtm.sh
|
2011-09-29 16:03:36 +04:00
|
|
|
|
2011-11-03 11:58:45 +04:00
|
|
|
rebuild:
|
|
|
|
$(E) " FORCE-REBUILD"
|
2013-02-15 17:37:20 +04:00
|
|
|
$(Q) $(RM) ./*.o
|
|
|
|
$(Q) $(RM) ./*.d
|
|
|
|
$(Q) $(RM) ./protobuf/*.pb-c.c
|
|
|
|
$(Q) $(RM) ./protobuf/*.pb-c.h
|
2011-11-03 11:58:45 +04:00
|
|
|
$(Q) $(MAKE)
|
|
|
|
|
2012-11-22 18:53:29 +04:00
|
|
|
clean:
|
2011-09-23 12:00:45 +04:00
|
|
|
$(E) " CLEAN"
|
2013-02-11 19:24:06 +04:00
|
|
|
$(Q) $(RM) $(VERSION_HEADER)
|
2013-02-15 23:40:28 +04:00
|
|
|
$(Q) $(MAKE) $(build)=arch/$(ARCH) clean
|
2013-02-15 17:37:20 +04:00
|
|
|
$(Q) $(RM) ./*.o
|
|
|
|
$(Q) $(RM) ./*.d
|
|
|
|
$(Q) $(RM) ./*.i
|
|
|
|
$(Q) $(RM) ./*.img
|
|
|
|
$(Q) $(RM) ./*.out
|
|
|
|
$(Q) $(RM) ./*.bin
|
|
|
|
$(Q) $(RM) ./$(PROGRAM)
|
|
|
|
$(Q) $(RM) -r ./test/dump/
|
|
|
|
$(Q) $(RM) ./*.gcov ./*.gcda ./*.gcno
|
|
|
|
$(Q) $(RM) -r ./gcov
|
|
|
|
$(Q) $(RM) -r ./test/lib/
|
|
|
|
$(Q) $(RM) -r ./test/lib64/
|
2012-07-12 13:06:00 +04:00
|
|
|
$(Q) $(MAKE) -C protobuf/ clean
|
2012-11-22 18:53:29 +04:00
|
|
|
$(Q) $(MAKE) -C pie/ clean
|
2012-01-25 17:40:09 +04:00
|
|
|
$(Q) $(MAKE) -C test/zdtm cleandep
|
2012-01-24 19:37:44 +04:00
|
|
|
$(Q) $(MAKE) -C test/zdtm clean
|
2012-01-25 17:45:49 +04:00
|
|
|
$(Q) $(MAKE) -C test/zdtm cleanout
|
2012-02-01 15:10:55 +04:00
|
|
|
$(Q) $(MAKE) -C Documentation clean
|
2011-09-23 12:00:45 +04:00
|
|
|
|
2012-02-14 03:10:29 +04:00
|
|
|
distclean: clean
|
|
|
|
$(E) " DISTCLEAN"
|
2013-02-15 17:37:20 +04:00
|
|
|
$(Q) $(RM) ./tags
|
|
|
|
$(Q) $(RM) ./cscope*
|
2012-02-14 03:10:29 +04:00
|
|
|
|
2011-09-23 12:00:45 +04:00
|
|
|
tags:
|
|
|
|
$(E) " GEN" $@
|
2013-02-15 17:37:20 +04:00
|
|
|
$(Q) $(RM) tags
|
2012-02-23 23:21:27 +04:00
|
|
|
$(Q) $(FIND) . -name '*.[hcS]' ! -path './.*' -print | xargs ctags -a
|
2011-09-23 12:00:45 +04:00
|
|
|
|
|
|
|
cscope:
|
|
|
|
$(E) " GEN" $@
|
2012-02-23 23:21:27 +04:00
|
|
|
$(Q) $(FIND) . -name '*.[hcS]' ! -path './.*' -print > cscope.files
|
2011-09-23 12:00:45 +04:00
|
|
|
$(Q) $(CSCOPE) -bkqu
|
2012-01-17 16:08:22 +03:00
|
|
|
|
2012-01-28 18:45:28 +04:00
|
|
|
docs:
|
|
|
|
$(Q) $(MAKE) -s -C Documentation all
|
|
|
|
|
2012-01-27 18:41:09 +04:00
|
|
|
help:
|
|
|
|
$(E) ' Targets:'
|
|
|
|
$(E) ' all - Build all [*] targets'
|
|
|
|
$(E) ' * crtools - Build crtools'
|
|
|
|
$(E) ' zdtm - Build zdtm test-suite'
|
2012-01-28 18:45:28 +04:00
|
|
|
$(E) ' docs - Build documentation'
|
2012-01-27 18:41:09 +04:00
|
|
|
$(E) ' clean - Clean everything'
|
|
|
|
$(E) ' tags - Generate tags file (ctags)'
|
|
|
|
$(E) ' cscope - Generate cscope database'
|
|
|
|
$(E) ' rebuild - Force-rebuild of [*] targets'
|
|
|
|
$(E) ' test - Run zdtm test-suite'
|
|
|
|
|
2012-12-25 22:43:14 +04:00
|
|
|
gcov:
|
|
|
|
$(E) " GCOV"
|
|
|
|
$(Q) mkdir gcov && \
|
|
|
|
cd gcov && \
|
|
|
|
cp ../*.gcno ../*.c ../test/root/crtools/ && \
|
2012-12-26 13:03:43 +04:00
|
|
|
geninfo --no-checksum --output-filename crtools.l.info --no-recursion .. && \
|
|
|
|
geninfo --no-checksum --output-filename crtools.ns.info --no-recursion ../test/root/crtools && \
|
|
|
|
sed -i 's#/test/root/crtools##' crtools.ns.info && \
|
|
|
|
lcov -a crtools.l.info -a crtools.ns.info -o crtools.info && \
|
|
|
|
genhtml -o html crtools.info
|
2012-12-25 22:43:14 +04:00
|
|
|
|
2012-05-31 15:39:00 +04:00
|
|
|
deps-targets := $(OBJS) $(patsubst %.o,%.s,$(OBJS)) $(patsubst %.o,%.i,$(OBJS)) $(PROGRAM)
|
2012-03-31 13:35:00 +04:00
|
|
|
|
2012-05-29 18:33:00 +04:00
|
|
|
.DEFAULT_GOAL := all
|
2012-04-18 15:44:00 +04:00
|
|
|
|
2012-04-05 16:49:12 +04:00
|
|
|
ifneq ($(filter $(deps-targets), $(MAKECMDGOALS)),)
|
|
|
|
INCDEPS := 1
|
|
|
|
endif
|
|
|
|
|
|
|
|
ifeq ($(INCDEPS),1)
|
2012-01-17 16:08:22 +03:00
|
|
|
-include $(DEPS)
|
2012-01-20 17:53:19 +03:00
|
|
|
endif
|