##DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
#
#                         D r . D e a m o n  6 4
#                        for INTEL64(R), AMD64(R)
#    
#   Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
#    this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
# OF THE POSSIBILITY OF SUCH DAMAGE.
#
##DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64

## File Info -----------------------------------------------------------
# File: Makefile
# Function: 
# Comment: 
##----------------------------------------------------------------------

# Section 1 : Setting Build Command ####################################
MAKE = make
CC = gcc


SUPER_HEADER =	../include/drd64_conf.h \
				../include/drd64_defines.h \
				../include/drd64_types.h \
				../include/drd64_error.h
CLIENT_HEADER =
USER_HEADER =

FLAGS_DEBUG = -g -Wall

LIBGOBLIN_TARGET = libgoblin.a
LIBGOBLIN_OBJS = drd64_libgoblin_system.o \
					drd64_libgoblin_binfo.o \
					drd64_libgoblin_checkbin.o \
					drd64_libgoblin_analyze.o \
					drd64_libgoblin_api_readbin.o \
					drd64_libgoblin_elf.o \
					drd64_libgoblin_elf64.o \
					drd64_libgoblin_elf32.o \
					drd64_libgoblin_dwarf.o \
					drd64_libgoblin_dwarf_abbrev.o \
					drd64_libgoblin_dwarf_info.o \
					drd64_libgoblin_dwarf_line.o \
					drd64_libgoblin_dwarf_common.o
LIBGOBLIN_HEADER = drd64_libgoblin.h \
					drd64_libgoblin_binfo.h \
					drd64_libgoblin_checkbin.h \
					drd64_libgoblin_analyze.h \
					drd64_libgoblin_api_readbin.h \
					drd64_libgoblin_elf.h \
					drd64_libgoblin_elf64.h \
					drd64_libgoblin_elf32.h \
					drd64_libgoblin_dwarf.h \
					drd64_libgoblin_dwarf_abbrev.h \
					drd64_libgoblin_dwarf_info.h \
					drd64_libgoblin_dwarf_line.h \
					drd64_libgoblin_dwarf_common.h \
					drd64_libgoblin_dwarf_str.h \
					../include/libgoblin.h \
					$(SUPER_HEADER)

TESTPG_TARGET = elftest


all:	$(LIBGOBLIN_TARGET) $(TESTPG_TARGET)

$(LIBGOBLIN_TARGET): $(LIBGOBLIN_OBJS)
	ar rv $(LIBGOBLIN_TARGET) $(LIBGOBLIN_OBJS)
	ranlib $(LIBGOBLIN_TARGET)
	cp $(LIBGOBLIN_TARGET) ..

drd64_libgoblin_system.o: drd64_libgoblin_system.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_system.o $(FLAGS_DEBUG) \
				drd64_libgoblin_system.c
drd64_libgoblin_binfo.o: drd64_libgoblin_binfo.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_binfo.o $(FLAGS_DEBUG) \
				drd64_libgoblin_binfo.c
drd64_libgoblin_checkbin.o: drd64_libgoblin_checkbin.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_checkbin.o $(FLAGS_DEBUG) \
				drd64_libgoblin_checkbin.c
drd64_libgoblin_analyze.o: drd64_libgoblin_analyze.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_analyze.o $(FLAGS_DEBUG) \
				drd64_libgoblin_analyze.c

drd64_libgoblin_api_readbin.o: drd64_libgoblin_api_readbin.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_api_readbin.o $(FLAGS_DEBUG) \
				drd64_libgoblin_api_readbin.c

drd64_libgoblin_elf.o: drd64_libgoblin_elf.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_elf.o $(FLAGS_DEBUG) \
				drd64_libgoblin_elf.c
drd64_libgoblin_elf64.o: drd64_libgoblin_elf64.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_elf64.o $(FLAGS_DEBUG) \
				drd64_libgoblin_elf64.c
drd64_libgoblin_elf32.o: drd64_libgoblin_elf32.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_elf32.o $(FLAGS_DEBUG) \
				drd64_libgoblin_elf32.c

drd64_libgoblin_dwarf.o: drd64_libgoblin_dwarf.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_dwarf.o $(FLAGS_DEBUG) \
				drd64_libgoblin_dwarf.c
drd64_libgoblin_dwarf_abbrev.o: drd64_libgoblin_dwarf_abbrev.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_dwarf_abbrev.o $(FLAGS_DEBUG) \
				drd64_libgoblin_dwarf_abbrev.c
drd64_libgoblin_dwarf_info.o: \
		drd64_libgoblin_dwarf_info.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_dwarf_info.o $(FLAGS_DEBUG) \
				drd64_libgoblin_dwarf_info.c
drd64_libgoblin_dwarf_line.o: \
		drd64_libgoblin_dwarf_line.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_dwarf_line.o $(FLAGS_DEBUG) \
				drd64_libgoblin_dwarf_line.c
drd64_libgoblin_dwarf_common.o: drd64_libgoblin_dwarf_common.c $(LIBBROWNIE_HEADER)
	gcc -c -o drd64_libgoblin_dwarf_common.o $(FLAGS_DEBUG) \
				drd64_libgoblin_dwarf_common.c

$(TESTPG_TARGET): elftest.c ../include/libgoblin.h $(LIBGOBLIN_TARGET)
	gcc -g -o $(TESTPG_TARGET) elftest.c $(LIBGOBLIN_TARGET)


clean:
	rm -f *.o
	rm -f $(LIBGOBLIN_TARGET)
	rm -f $(TESTPG_TARGET)
	rm -f *.core

