159 lines
3.4 KiB
Makefile
Raw Normal View History

CC = gcc
CFLAGS = -O2 -Wall
# MAC_BUILD - set this to "universal" to build a 2-way fat library
MAC_BUILD = universal
# if ARCH set, disable universal build on the mac
ifdef ARCH
MAC_BUILD =
else
ARCH = $(shell uname -m)
endif
UNAME = $(shell uname -s)
ifeq ($(UNAME), Linux)
RANLIB=ranlib
CFLAGS+=-D_GNU_SOURCE -fPIC
endif
ifeq ($(UNAME), SunOS)
RANLIB=/bin/true
PATH +=:/usr/perl5/5.10.0/bin:/usr/perl5/5.12/bin
CFLAGS += -fPIC
ifeq ($(ARCH), i86pc)
ARCH = $(shell isainfo -k)
ifeq ($(ARCH), amd64)
ARCH = x86_64
else
ARCH = i386
endif
endif
ifeq ($(ARCH), x86_64)
CFLAGS += -m64
else
CFLAGS += -m32
endif
endif
ifeq ($(UNAME), FreeBSD)
RANLIB=ranlib
CFLAGS += -Wno-error=unknown-pragmas -I/usr/src/sys/cddl/compat/opensolaris -I/usr/src/sys/cddl/contrib/opensolaris/uts/common
CFLAGS += -fPIC
ifeq ($(ARCH), i386)
CFLAGS += -m32
endif
ifeq ($(ARCH), amd64)
ARCH = x86_64
endif
endif
ifeq ($(UNAME), Darwin)
RANLIB=ranlib
ifeq ($(MAC_BUILD), universal)
CFLAGS += -arch i386 -arch x86_64
else
CFLAGS += -arch $(ARCH)
endif
endif
# main library build
objects = usdt.o usdt_dof_file.o usdt_tracepoints.o usdt_probe.o usdt_dof.o usdt_dof_sections.o
headers = usdt.h usdt_internal.h
.c.o: $(headers)
all: libusdt.a
libusdt.a: $(objects) $(headers)
rm -f libusdt.a
$(AR) cru libusdt.a $(objects)
$(RANLIB) libusdt.a
# Tracepoints build.
#
# If on Darwin and building a universal library, manually assemble a
# two-way fat object file from both the 32 and 64 bit tracepoint asm
# files.
#
# Otherwise, just choose the appropriate asm file based on the build
# architecture.
ifeq ($(UNAME), Darwin)
ifeq ($(MAC_BUILD), universal)
usdt_tracepoints_i386.o: usdt_tracepoints_i386.s
$(CC) -arch i386 -o usdt_tracepoints_i386.o -c usdt_tracepoints_i386.s
usdt_tracepoints_x86_64.o: usdt_tracepoints_x86_64.s
$(CC) -arch x86_64 -o usdt_tracepoints_x86_64.o -c usdt_tracepoints_x86_64.s
usdt_tracepoints.o: usdt_tracepoints_i386.o usdt_tracepoints_x86_64.o
lipo -create -output usdt_tracepoints.o usdt_tracepoints_i386.o \
usdt_tracepoints_x86_64.o
else # Darwin, not universal
usdt_tracepoints.o: usdt_tracepoints_$(ARCH).s
$(CC) -arch $(ARCH) -o usdt_tracepoints.o -c usdt_tracepoints_$(ARCH).s
endif
else # not Darwin; FreeBSD and Illumos
ifeq ($(ARCH), x86_64)
usdt_tracepoints.o: usdt_tracepoints_x86_64.s
$(CC) $(CFLAGS) -o usdt_tracepoints.o -c usdt_tracepoints_x86_64.s
endif
ifeq ($(ARCH), i386)
usdt_tracepoints.o: usdt_tracepoints_i386.s
$(CC) $(CFLAGS) -o usdt_tracepoints.o -c usdt_tracepoints_i386.s
endif
endif
clean:
rm -f *.gch
rm -f *.o
rm -f libusdt.a
rm -f test_usdt
rm -f test_usdt32
rm -f test_usdt64
rm -f test_mem_usage
.PHONY: clean test
# testing
test_mem_usage: libusdt.a test_mem_usage.o
$(CC) $(CFLAGS) -o test_mem_usage test_mem_usage.o libusdt.a
ifeq ($(UNAME), Darwin)
ifeq ($(MAC_BUILD), universal)
test_usdt64: libusdt.a test_usdt.o
$(CC) -arch x86_64 -o test_usdt64 test_usdt.o libusdt.a
test_usdt32: libusdt.a test_usdt.o
$(CC) -arch i386 -o test_usdt32 test_usdt.o libusdt.a
else
test_usdt: libusdt.a test_usdt.o
$(CC) $(CFLAGS) -o test_usdt test_usdt.o libusdt.a
endif
else
test_usdt: libusdt.a test_usdt.o
$(CC) $(CFLAGS) -o test_usdt test_usdt.o libusdt.a
endif
ifeq ($(UNAME), Darwin)
ifeq ($(MAC_BUILD), universal)
test: test_usdt32 test_usdt64
sudo prove test.pl :: 64
sudo prove test.pl :: 32
else
test: test_usdt
sudo prove test.pl
endif
else
test: test_usdt
sudo prove test.pl
endif