aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: c86a6476c4a9a1371db859e3e91a194be96274ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

LIBDIR = lib
PRELOADNAME = libminijailpreload.so
PRELOADPATH = \"/$(LIBDIR)/$(PRELOADNAME)\"
CFLAGS += -fPIC -Wall -Wextra -Werror -DPRELOADPATH="$(PRELOADPATH)"
CFLAGS += -fvisibility=internal

ifneq ($(HAVE_SECUREBITS_H),no)
CFLAGS += -DHAVE_SECUREBITS_H
endif

all : minijail0 libminijail.so libminijailpreload.so

tests : libminijail_unittest.wrapper syscall_filter_unittest

minijail0 : libsyscalls.gen.o libminijail.o syscall_filter.o \
		signal.o bpf.o util.o minijail0.c
	$(CC) $(CFLAGS) -o $@ $^ -lcap

libminijail.so : libminijail.o syscall_filter.o signal.o bpf.o util.o \
		libsyscalls.gen.o
	$(CC) $(CFLAGS) -shared -o $@ $^ -lcap

# Allow unittests to access what are normally internal symbols.
libminijail_unittest.wrapper :
	$(MAKE) $(MAKEARGS) test-clean
	$(MAKE) $(MAKEARGS) libminijail_unittest
	$(MAKE) $(MAKEARGS) test-clean

libminijail_unittest : CFLAGS := $(filter-out -fvisibility=%,$(CFLAGS))
libminijail_unittest : CFLAGS := $(filter-out -DPRELOADPATH=%,$(CFLAGS))
libminijail_unittest : CFLAGS := $(CFLAGS) -DPRELOADPATH=\"./$(PRELOADNAME)\"
libminijail_unittest : libminijail_unittest.o libminijail.o \
		syscall_filter.o signal.o bpf.o util.o libsyscalls.gen.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(filter-out $(CFLAGS_FILE),$^) -lcap

libminijailpreload.so : libminijailpreload.c libminijail.o libsyscalls.gen.o \
		syscall_filter.o signal.o bpf.o util.o
	$(CC) $(CFLAGS) -shared -o $@ $^ -ldl -lcap

libminijail.o : libminijail.c libminijail.h

libminijail_unittest.o : libminijail_unittest.c test_harness.h
	$(CC) $(CFLAGS) -c -o $@ $<

libsyscalls.gen.o : libsyscalls.gen.c libsyscalls.h

syscall_filter_unittest : syscall_filter_unittest.o syscall_filter.o \
		bpf.o util.o libsyscalls.gen.o
	$(CC) $(CFLAGS) -o $@ $^

syscall_filter_unittest.o : syscall_filter_unittest.c test_harness.h
	$(CC) $(CFLAGS) -c -o $@ $<

syscall_filter.o : syscall_filter.c syscall_filter.h

signal.o : signal.c signal.h

bpf.o : bpf.c bpf.h

util.o : util.c util.h

# Only regenerate libsyscalls.gen.c if the Makefile or header changes.
# NOTE! This will not detect if the file is not appropriate for the target.
libsyscalls.gen.c : Makefile libsyscalls.h
	@printf "Generating target-arch specific $@ . . . "
	@./gen_syscalls.sh $@
	@printf "done.\n"

# Only clean up files affected by the CFLAGS change for testing.
test-clean :
	@rm -f libminijail.o libminijail_unittest.o

clean : test-clean
	@rm -f libminijail.o libminijailpreload.so minijail0
	@rm -f libminijail.so
	@rm -f libminijail_unittest
	@rm -f libsyscalls.gen.o libsyscalls.gen.c
	@rm -f syscall_filter.o signal.o bpf.o util.o
	@rm -f syscall_filter_unittest syscall_filter_unittest.o