18ac5aef8SEnji CooperOS:=$(shell uname) 28ac5aef8SEnji Cooper 38ac5aef8SEnji Cooper# Set ARCH to 32 or x32 for i386/x32 ABIs 48ac5aef8SEnji CooperARCH?=64 58ac5aef8SEnji CooperARCHFLAG=-m$(ARCH) 68ac5aef8SEnji Cooper 7*955a3f9aSAlex Richardsonifeq ($(OS),FreeBSD) 8*955a3f9aSAlex RichardsonEXTRA_LIBS=-lprocstat 9*955a3f9aSAlex Richardsonendif 10*955a3f9aSAlex Richardson 118ac5aef8SEnji Cooperifeq ($(OS),Linux) 128ac5aef8SEnji CooperPROCESSOR:=$(shell uname -p) 138ac5aef8SEnji Cooper 148ac5aef8SEnji Cooperifneq ($(wildcard /usr/lib/$(PROCESSOR)-linux-gnu),) 158ac5aef8SEnji Cooper# Can use standard Debian location for static libraries. 168ac5aef8SEnji CooperPLATFORM_LIBDIR=/usr/lib/$(PROCESSOR)-linux-gnu 178ac5aef8SEnji Cooperelse 188ac5aef8SEnji Cooper# Attempt to determine library location from gcc configuration. 198ac5aef8SEnji CooperPLATFORM_LIBDIR=$(shell gcc -v 2>&1 | grep "Configured with:" | sed 's/.*--libdir=\(\/usr\/[^ ]*\).*/\1/g') 208ac5aef8SEnji Cooperendif 218ac5aef8SEnji Cooper 228ac5aef8SEnji Cooper# Override for explicitly specified ARCHFLAG. 238ac5aef8SEnji Cooper# Use locally compiled libcaprights in this case, on the 248ac5aef8SEnji Cooper# assumption that any installed version is 64-bit. 258ac5aef8SEnji Cooperifeq ($(ARCHFLAG),-m32) 268ac5aef8SEnji CooperPROCESSOR=i386 278ac5aef8SEnji CooperPLATFORM_LIBDIR=/usr/lib32 288ac5aef8SEnji CooperLIBCAPRIGHTS=./libcaprights.a 298ac5aef8SEnji Cooperendif 308ac5aef8SEnji Cooperifeq ($(ARCHFLAG),-mx32) 318ac5aef8SEnji CooperPROCESSOR=x32 328ac5aef8SEnji CooperPLATFORM_LIBDIR=/usr/libx32 338ac5aef8SEnji CooperLIBCAPRIGHTS=./libcaprights.a 348ac5aef8SEnji Cooperendif 358ac5aef8SEnji Cooper 368ac5aef8SEnji Cooper# Detect presence of libsctp in normal Debian location 378ac5aef8SEnji Cooperifneq ($(wildcard $(PLATFORM_LIBDIR)/libsctp.a),) 388ac5aef8SEnji CooperLIBSCTP=-lsctp 398ac5aef8SEnji CooperCXXFLAGS=-DHAVE_SCTP 408ac5aef8SEnji Cooperendif 418ac5aef8SEnji Cooper 428ac5aef8SEnji Cooperifneq ($(LIBCAPRIGHTS),) 438ac5aef8SEnji Cooper# Build local libcaprights.a (assuming ./configure 448ac5aef8SEnji Cooper# has already been done in libcaprights/) 458ac5aef8SEnji CooperLOCAL_LIBS=$(LIBCAPRIGHTS) 468ac5aef8SEnji CooperLIBCAPRIGHTS_OBJS=libcaprights/capsicum.o libcaprights/linux-bpf-capmode.o libcaprights/procdesc.o libcaprights/signal.o 478ac5aef8SEnji CooperLOCAL_CLEAN=$(LOCAL_LIBS) $(LIBCAPRIGHTS_OBJS) 488ac5aef8SEnji Cooperelse 498ac5aef8SEnji Cooper# Detect installed libcaprights static library. 508ac5aef8SEnji Cooperifneq ($(wildcard $(PLATFORM_LIBDIR)/libcaprights.a),) 518ac5aef8SEnji CooperLIBCAPRIGHTS=$(PLATFORM_LIBDIR)/libcaprights.a 528ac5aef8SEnji Cooperelse 538ac5aef8SEnji Cooperifneq ($(wildcard /usr/lib/libcaprights.a),) 548ac5aef8SEnji CooperLIBCAPRIGHTS=/usr/lib/libcaprights.a 558ac5aef8SEnji Cooperendif 568ac5aef8SEnji Cooperendif 578ac5aef8SEnji Cooperendif 588ac5aef8SEnji Cooper 598ac5aef8SEnji Cooperendif 608ac5aef8SEnji Cooper 618ac5aef8SEnji Cooper# Extra test programs for arch-transition tests 628ac5aef8SEnji CooperEXTRA_PROGS = mini-me.32 mini-me.64 638ac5aef8SEnji Cooperifneq ($(wildcard /usr/include/gnu/stubs-x32.h),) 648ac5aef8SEnji CooperEXTRA_PROGS += mini-me.x32 658ac5aef8SEnji Cooperendif 668ac5aef8SEnji Cooper 678ac5aef8SEnji Cooper# Chain on to the master makefile 688ac5aef8SEnji Cooperinclude makefile 698ac5aef8SEnji Cooper 708ac5aef8SEnji Cooper./libcaprights.a: $(LIBCAPRIGHTS_OBJS) 718ac5aef8SEnji Cooper ar cr $@ $^ 728ac5aef8SEnji Cooper 738ac5aef8SEnji Cooper# Small static programs of known architectures 748ac5aef8SEnji Cooper# These may require additional packages to be installed; for example, for Debian: 758ac5aef8SEnji Cooper# - libc6-dev-i386 provides 32-bit headers for a 64-bit system 768ac5aef8SEnji Cooper# - libc6-dev-x32 provides headers for the x32 ABI. 778ac5aef8SEnji Coopermini-me.32: mini-me.c 788ac5aef8SEnji Cooper $(CC) $(CFLAGS) -m32 -static -o $@ $< 798ac5aef8SEnji Coopermini-me.x32: mini-me.c 808ac5aef8SEnji Cooper $(CC) $(CFLAGS) -mx32 -static -o $@ $< 818ac5aef8SEnji Coopermini-me.64: mini-me.c 828ac5aef8SEnji Cooper $(CC) $(CFLAGS) -m64 -static -o $@ $< 83