#
# Makefile for lcrash
#
# Copyright 1999, 2004 Silicon Graphics, Inc. All rights reserved.
#
DEPTH  = .
-include ../.config
include $(DEPTH)/commondefs
EXTRA_CFLAGS += -DARCH=$(ARCH) -I./include $(INCDIRS)

ifeq ($(ARCH),ppc64)
EXTRA_CFLAGS += -Dppc64=1 
endif

TARGET     = lcrash
LIBS 	= -Wl,-Bstatic -lklib -lbfd -lopcodes -liberty \
	  -llkcd_alloc -lcmds -llkcd_rl -lsial \
	  -llkcd_hwconfig -llkcd_config -llkcd_util\
	  -Wl,-Bdynamic -lncurses -ldl -lz -ldwarf -lelf
EXTRA_LFLAGS += $(LFLAGS) -L. -L$(LIBDIR)/libklib -L$(LIBDIR)/liballoc \
               -L$(LIBDIR)/librl -L$(LIBDIR)/libsial -L$(LIBDIR)/libutil \
	       -L$(LIBDIR)/libhwconfig -L$(LIBDIR)/libconfig -rdynamic

# common lcrash code
COMMON     = main.c util.c eval.c stabs.c struct.c dump.c sial.c \
	     module.c dis.c arch.c trace.c report.c pci.c

# dump architecture specific lcrash code
DUMP_ALPHA = arch_alpha.c dis_alpha.c trace_alpha.c
DUMP_ARM   = arch_arm.c dis_arm.c trace_arm.c
DUMP_I386  = arch_i386.c dis_i386.c trace_i386.c
DUMP_IA64  = arch_ia64.c dis_ia64.c trace_ia64.c unwind.c hwgraph.c
DUMP_S390  = arch_s390.c trace_s390.c
DUMP_S390X = arch_s390x.c trace_s390x.c
DUMP_S390_COMMON = dis_s390.c util_s390.c report_s390.c
DUMP_PPC64 = arch_ppc64.c dis_ppc64.c trace_ppc64.c
DUMP_X86_64 = arch_x86_64.c trace_x86_64.c

SUB_DIRS  = man cmds 

ifeq ($(TARGET_ARCH_ALPHA),y)
DUMP_ARCH += $(DUMP_ALPHA)
EXTRA_CFLAGS += -DDUMP_ARCH_ALPHA
endif
ifeq ($(TARGET_ARCH_ARM),y)
DUMP_ARCH += $(DUMP_ARM)
EXTRA_CFLAGS += -DDUMP_ARCH_ARM
endif
ifeq ($(TARGET_ARCH_I386),y)
DUMP_ARCH += $(DUMP_I386)
EXTRA_CFLAGS += -DDUMP_ARCH_I386
endif
ifeq ($(TARGET_ARCH_IA64),y)
DUMP_ARCH += $(DUMP_IA64)
EXTRA_CFLAGS += -DDUMP_ARCH_IA64
endif
# DUMP_S390_COMMON should be added only once
ifeq ($(TARGET_ARCH_S390),y)
DUMP_ARCH += $(DUMP_S390) $(DUMP_S390_COMMON)
EXTRA_CFLAGS += -DDUMP_ARCH_S390
else
ifeq ($(TARGET_ARCH_S390X),y)
DUMP_ARCH += $(DUMP_S390_COMMON)
endif
endif
ifeq ($(TARGET_ARCH_S390X),y)
DUMP_ARCH += $(DUMP_S390X)
EXTRA_CFLAGS += -DDUMP_ARCH_S390X
endif
ifeq ($(TARGET_ARCH_XSCALE),y)
DUMP_ARCH += $(DUMP_ARM)
EXTRA_CFLAGS += -DDUMP_ARCH_ARM -DCONFIG_CPU_XSCALE
endif
ifeq ($(TARGET_ARCH_PPC64),y)
DUMP_ARCH += $(DUMP_PPC64)
EXTRA_CFLAGS += -DDUMP_ARCH_PPC64
endif
ifeq ($(TARGET_ARCH_X86_64),y)
DUMP_ARCH += $(DUMP_X86_64)
EXTRA_CFLAGS += -DDUMP_ARCH_X86_64
endif

CFILES    = $(COMMON) $(DUMP_ARCH)

OFILES    = $(CFILES:.c=.o)

all: default

default: $(TARGET)

$(TARGET): subdirs_make
	$(CC) -o $@ $(LDFLAGS) $(LFLAGS) $(EXTRA_LFLAGS) $(OFILES) $(LIBS)

subdirs_make: $(OFILES)
	for dir in $(SUB_DIRS) ; do\
		( cd $$dir && \
			$(MAKE) ARCH=$(ARCH) ) || exit $$? ; \
	done

clean:
	/bin/rm -f *.o *.a
	/bin/rm -f $(DEPTH)/include/arch
	/usr/bin/find . -name ".[A-z]*.flags" -print | xargs /bin/rm -f
	/usr/bin/find . -name ".depend" -print | xargs /bin/rm -f
	for dir in $(SUB_DIRS) ; do\
		( cd $$dir && \
			$(MAKE) ARCH=$(ARCH) clean ) || exit $$? ; \
	done

mrproper clobber: clean
	for dir in $(SUB_DIRS) include ; do\
		( cd $$dir && \
			$(MAKE) ARCH=$(ARCH) clobber ) || exit $$? ; \
	done
	/bin/rm -f $(TARGET)

$(OFILES): $(HEADERS)

depend dep fastdep: symlinks

$(HEADERS): symlinks

symlinks:
	(cd $(LIBDIR)/libklib && $(MAKE) ARCH=$(ARCH) symlinks)

headers:
	(cd include && $(MAKE) ARCH=$(ARCH) headers )

exports: 

install: headers $(TARGET)
	mkdir -p $(ROOT)/sbin
	mkdir -p $(ROOT)$(mandir)/man1
	install -m 755 lcrash $(ROOT)/sbin/lcrash
	install -m 644 man/lcrash.1 $(ROOT)$(mandir)/man1
