#
# Makefile for bfd library under openVMS 
#
# For use with gnu-make for vms
#
# Created by Klaus K"ampf, kkaempf@rmi.de
#
#   Copyright 2012 Free Software Foundation
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.
#

ifeq ($(ARCH),IA64)
HOSTFILE=alphavms.h
OBJS:=cpu-ia64.obj,elfxx-ia64.obj,elf64-ia64-vms.obj,\
  vms-misc.obj,vms-lib.obj,elf-strtab.obj,corefile.obj,stabs.obj,\
  merge.obj,elf-eh-frame.obj,elflink.obj,elf-attrs.obj,dwarf1.obj,elf64.obj
DEFS=SELECT_VECS="&bfd_elf64_ia64_vms_vec",\
 SELECT_ARCHITECTURES="&bfd_ia64_arch","HAVE_bfd_elf64_ia64_vms_vec"=1
endif
ifeq ($(ARCH),ALPHA)
HOSTFILE=alphavms.h
OBJS:=vms-alpha.obj,vms-lib.obj,vms-misc.obj,cpu-alpha.obj
DEFS=SELECT_VECS="&vms_alpha_vec",SELECT_ARCHITECTURES="&bfd_alpha_arch"
endif

OBJS:=$(OBJS),archive.obj,archive64.obj,archures.obj,bfd.obj,bfdio.obj,\
  binary.obj,cache.obj,coffgen.obj,compress.obj,corefile.obj,dwarf2.obj,\
  elf.obj,format.obj,hash.obj,ihex.obj,init.obj,libbfd.obj,linker.obj,\
  opncls.obj,reloc.obj,section.obj,simple.obj,srec.obj,stab-syms.obj,\
  syms.obj,targets.obj,tekhex.obj,verilog.obj

ifeq ($(CC),gcc)
CFLAGS=/include=([],[-.include])$(DEFS)
else
OPT=/noopt/debug
CFLAGS=/name=(as_is,shortened)/include=([],"../include")\
 /define=("unlink=remove",DEBUGDIR="""GNU$$DEBUGDIR:""",$(DEFS))\
 /warns=(infor=(missingreturn,badansialias))$(OPT)
endif

libbfd.olb: $(OBJS)
	purge
	lib/create libbfd $(OBJS)

targmatch.h: bfd.h
config.h: bfd.h
vms-misc.c: vms.h
targets.c: targmatch.h

clean:
	$$ purge
	$(RM) libbfd.olb;
	$(RM) *.obj;
