blob: 5983e3a25d06b16ff10c09fb4555f1a91d71d0c4 [file] [log] [blame]
Jorge Lucangeli Obesfc8ab532012-03-20 10:14:31 -07001# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Elly Jonescd7a9042011-07-22 13:56:51 -04002# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
Sonny Raob5d537d2011-10-21 22:17:13 +00005LIBDIR = lib
6PRELOADPATH = \"/$(LIBDIR)/libminijailpreload.so\"
Elly Jonescd7a9042011-07-22 13:56:51 -04007CFLAGS += -fPIC -Wall -Wextra -Werror -DPRELOADPATH="$(PRELOADPATH)"
Will Drewry6ac91122011-10-21 16:38:58 -05008CFLAGS += -fvisibility=internal
Elly Jonescd7a9042011-07-22 13:56:51 -04009
Ben Chan45397012011-08-23 08:15:03 -070010all : minijail0 libminijail.so libminijailpreload.so
Elly Jonescd7a9042011-07-22 13:56:51 -040011
Jorge Lucangeli Obesfc8ab532012-03-20 10:14:31 -070012tests : libminijail_unittest.wrapper syscall_filter_unittest
Will Drewry6ac91122011-10-21 16:38:58 -050013
Jorge Lucangeli Obesbda833c2012-07-31 16:25:56 -070014minijail0 : libsyscalls.gen.o libminijail.o syscall_filter.o \
15 signal.o bpf.o util.o minijail0.c
Elly Jonescd7a9042011-07-22 13:56:51 -040016 $(CC) $(CFLAGS) -o $@ $^ -lcap
17
Jorge Lucangeli Obesbda833c2012-07-31 16:25:56 -070018libminijail.so : libminijail.o syscall_filter.o signal.o bpf.o util.o \
19 libsyscalls.gen.o
Ben Chan45397012011-08-23 08:15:03 -070020 $(CC) $(CFLAGS) -shared -o $@ $^ -lcap
21
Will Drewry6ac91122011-10-21 16:38:58 -050022# Allow unittests to access what are normally internal symbols.
23libminijail_unittest.wrapper :
24 $(MAKE) $(MAKEARGS) test-clean
25 $(MAKE) $(MAKEARGS) libminijail_unittest
26 $(MAKE) $(MAKEARGS) test-clean
27
28libminijail_unittest : CFLAGS := $(filter-out -fvisibility=%,$(CFLAGS))
Jorge Lucangeli Obes524c0402012-01-17 11:30:23 -080029libminijail_unittest : libminijail_unittest.o libminijail.o \
Jorge Lucangeli Obesbda833c2012-07-31 16:25:56 -070030 syscall_filter.o signal.o bpf.o util.o libsyscalls.gen.o
Will Drewry6ac91122011-10-21 16:38:58 -050031 $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(filter-out $(CFLAGS_FILE),$^) -lcap
Will Drewrydecdfdc2011-09-27 15:13:54 -050032
Jorge Lucangeli Obes524c0402012-01-17 11:30:23 -080033libminijailpreload.so : libminijailpreload.c libminijail.o libsyscalls.gen.o \
Jorge Lucangeli Obesbda833c2012-07-31 16:25:56 -070034 syscall_filter.o signal.o bpf.o util.o
Elly Jonescd7a9042011-07-22 13:56:51 -040035 $(CC) $(CFLAGS) -shared -o $@ $^ -ldl -lcap
36
Thieu Lef0ef52e2011-09-14 14:03:09 -070037libminijail.o : libminijail.c libminijail.h
Will Drewry32ac9f52011-08-18 21:36:27 -050038
Will Drewrydecdfdc2011-09-27 15:13:54 -050039libminijail_unittest.o : libminijail_unittest.c test_harness.h
40 $(CC) $(CFLAGS) -c -o $@ $<
41
Will Drewry32ac9f52011-08-18 21:36:27 -050042libsyscalls.gen.o : libsyscalls.gen.c libsyscalls.h
43
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070044syscall_filter_unittest : syscall_filter_unittest.o syscall_filter.o \
45 bpf.o util.o libsyscalls.gen.o test_harness.h
Jorge Lucangeli Obesfc8ab532012-03-20 10:14:31 -070046 $(CC) $(CFLAGS) -o $@ $^
47
48syscall_filter_unittest.o : syscall_filter_unittest.c test_harness.h
49 $(CC) $(CFLAGS) -c -o $@ $<
50
Jorge Lucangeli Obes524c0402012-01-17 11:30:23 -080051syscall_filter.o : syscall_filter.c syscall_filter.h
Jorge Lucangeli Obesfc8ab532012-03-20 10:14:31 -070052
Jorge Lucangeli Obesbda833c2012-07-31 16:25:56 -070053signal.o : signal.c signal.h
54
Jorge Lucangeli Obes524c0402012-01-17 11:30:23 -080055bpf.o : bpf.c bpf.h
Jorge Lucangeli Obesfc8ab532012-03-20 10:14:31 -070056
Jorge Lucangeli Obesa6b034d2012-08-07 15:29:20 -070057util.o : util.c util.h
58
Will Drewry32ac9f52011-08-18 21:36:27 -050059# sed expression which extracts system calls that are
60# defined via asm/unistd.h. It converts them from:
61# #define __NR_read
62# to:
63# #ifdef __NR_read
64# { "read", __NR_read },
65# #endif
66# All other lines will not be emitted. The sed expression lives in its
67# own macro to allow clean line wrapping.
68define sed-multiline
Ben Chan6a824372012-07-21 16:30:52 -070069 's/#define __\(ARM_\)\?\(NR_\)\([a-z0-9_]*\)$$/#ifdef __\1\2\3\n\
70 { "\1\3", __\1\2\3 },\n#endif/g p;'
Will Drewry32ac9f52011-08-18 21:36:27 -050071endef
72
73# Generates a header file with a system call table made up of "name",
74# syscall_nr entries by including the build target <asm/unistd.h> and
75# emitting the list of defines. Use of the compiler is needed to
76# dereference the actual provider of syscall definitions.
77# E.g., asm/unistd_32.h or asm/unistd_64.h, etc.
78define gen_syscalls
79 (set -e; \
80 echo '/* GENERATED BY MAKEFILE */'; \
81 echo '#include <stddef.h>'; \
82 echo '#include <asm/unistd.h>'; \
83 echo '#include "libsyscalls.h"'; \
84 echo "const struct syscall_entry syscall_table[] = {"; \
85 echo "#include <asm/unistd.h>" | \
86 $(CC) $(CFLAGS) -dN - -E | sed -ne $(sed-multiline); \
87 echo " { NULL, -1 },"; \
88 echo "};" ) > $1
89endef
90
91# Only regenerate libsyscalls.gen.c if the Makefile or header changes.
92# NOTE! This will not detect if the file is not appropriate for the target.
93libsyscalls.gen.c : Makefile libsyscalls.h
94 @printf "Generating target-arch specific $@ . . . "
95 @$(call gen_syscalls,$@)
96 @printf "done.\n"
97
Will Drewry6ac91122011-10-21 16:38:58 -050098# Only clean up files affected by the CFLAGS change for testing.
99test-clean :
Jorge Lucangeli Obesaff8fae2012-08-31 09:53:55 -0700100 @rm -f libminijail.o libminijail_unittest.o
Will Drewry6ac91122011-10-21 16:38:58 -0500101
102clean : test-clean
Will Drewry32ac9f52011-08-18 21:36:27 -0500103 @rm -f libminijail.o libminijailpreload.so minijail0
Will Drewry6ac91122011-10-21 16:38:58 -0500104 @rm -f libminijail.so
105 @rm -f libminijail_unittest
Jorge Lucangeli Obesaff8fae2012-08-31 09:53:55 -0700106 @rm -f libsyscalls.gen.o libsyscalls.gen.c
Jorge Lucangeli Obesbda833c2012-07-31 16:25:56 -0700107 @rm -f syscall_filter.o signal.o bpf.o util.o
Jorge Lucangeli Obesfc8ab532012-03-20 10:14:31 -0700108 @rm -f syscall_filter_unittest syscall_filter_unittest.o