# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# Redefine this to something that makes sense for you.
MOZ_SRC=/usr/src/seamonkey-clean/mozilla
MKLINKSCRIPT=$(MOZ_SRC)/config/mklinkscript.pl

ifdef DEBUG
CFLAGS=-g -Wall
CXXFLAGS=-g -Wall
else
CFLAGS=-O2
CXXFLAGS=-O2
endif

ifdef PROFILE
CFLAGS += -pg -g
CXXFLAGS += -pg -g
endif

TARGETS=\
	libmcount.so	\
	libcygprof.so	\
	addrs2text	\
	garope		\
	grope		\
	histogram	\
	mapaddrs	\
	rseed		\
	test		\
	$(NULL)

all: $(TARGETS)

libmcount.so: mcount.c
	$(CC) -shared $(CFLAGS) -o $@ $<

libcygprof.so: cygprof.c
	$(CC) -shared $(CFLAGS) -o $@ $<

addrs2text: addrs2text.o

garope: garope.cpp elf_symbol_table.o elf_utils.o
grope: grope.cpp elf_symbol_table.o elf_utils.o
histogram: histogram.cpp elf_symbol_table.o elf_utils.o
mapaddrs: mapaddrs.cpp elf_symbol_table.o elf_utils.o
rseed: rseed.c
elf_symbol_table.o: elf_symbol_table.cpp elf_symbol_table.h elf_utils.h interval_map.h
elf_utils.o: elf_utils.cpp elf_utils.h

# Build these with -pg so we get profiling info
TEST_CFLAGS=-ffunction-sections -finstrument-functions -O2

test: test.o mult.o test.ldscript
	$(CXX) -Wl,-T,test.ldscript -O2 -o $@ $^

test.ldscript: test.order $(MKLINKSCRIPT)
	perl $(MKLINKSCRIPT) -o $@ $<

# This should really be generated by one of the fine tools, above. If
# it hasn't been, create an empty ordering file.
test.order:
	touch $@

mult.o: mult.c
	$(CC) $(TEST_CFLAGS) -c -o $@ $<

test.o: test.cpp
	$(CXX) $(TEST_CFLAGS) -c -o $@ $<

clean:
	rm -f $(TARGETS) test.ldscript *.o *~ core

