#
# Makefile for binutils under openVMS (Alpha and Vax)
#
# For use with gnu-make for vms
#
# Created by Klaus K"ampf, kkaempf@rmi.de
#
#

ifeq ($(CC),gcc)
DEFS=
CFLAGS=/include=([],[-.include],[-.bfd])$(DEFS)
LIBS=,gnu_cc_library:libgcc/lib,sys$$library:vaxcrtl.olb/lib,gnu_cc_library:crt0.obj
else
DEFS=
OPT=/noopt/debug
CFLAGS=$(OPT)/include=([],"../include",[-.bfd])$(DEFS)\
 /name=(as_is,shortened)\
 /prefix=(all,except=("getopt","optarg","optopt","optind","opterr"))
endif

LIBBFD = [-.bfd]libbfd.olb/lib
LIBBFD_DEP = [-.bfd]libbfd.olb
LIBIBERTY_DEP = [-.libiberty]libiberty.olb
LIBIBERTY = [-.libiberty]libiberty.olb/lib
OPCODES_DEP = [-.opcodes]libopcodes.olb
OPCODES = [-.opcodes]libopcodes.olb/lib

DEBUG_OBJS = rddbg.obj,debug.obj,stabs.obj,ieee.obj,rdcoff.obj,dwarf.obj

WRITE_DEBUG_OBJS = $(DEBUG_OBJS),wrstabs.obj

BULIBS = bucomm.obj,version.obj,filemode.obj

ADDL_DEPS = $(BULIBS),$(LIBBFD_DEP),$(LIBIBERTY_DEP)
ADDL_LIBS = $(BULIBS),$(LIBBFD),$(LIBIBERTY)

SIZEOBJS = $(ADDL_DEPS),size.obj

STRINGSOBJS = $(ADDL_DEPS),strings.obj

NMOBJS = $(ADDL_DEPS),nm.obj

ADDR2LINEOBJS = $(ADDL_DEPS),addr2line.obj

OBJDUMPOBJS = $(ADDL_DEPS),objdump.obj,prdbg.obj,$(DEBUG_OBJS),$(OPCODES_DEP)

all: config.h size.exe strings.exe objdump.exe nm.exe addr2line.exe

size.exe: $(SIZEOBJS)
	link/exe=$@ size.obj,$(ADDL_LIBS)

strings.exe: $(STRINGSOBJS)
	link/exe=$@ strings.obj,$(ADDL_LIBS)

nm.exe: $(NMOBJS)
	link/exe=$@ nm.obj,$(ADDL_LIBS)

addr2line.exe: $(ADDR2LINEOBJS)
	link/exe=$@ addr2line.obj,$(ADDL_LIBS)

objdump.exe: $(OBJDUMPOBJS)
	link/exe=$@ objdump.obj,prdbg.obj,$(DEBUG_OBJS),$(LIBBFD),$(OPCODES),$(ADDL_LIBS)

config.h:
	$$ @configure
	$(MAKE) -f makefile.vms "CC=$(CC)"

clean:
	$$ purge
	$(RM) *.obj;
	$(RM) *.exe;

distclean: clean
	$(RM) config.h;
	$(RM) makefile.vms;
