# Makefile for msrtool
#
# This file is part of msrtool.
#
# Copyright (c) 2008 Peter Stuge <peter@stuge.se>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# 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; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#

PROGRAM = msrtool

CC      = @CC@
INSTALL = @INSTALL@
PREFIX  = @PREFIX@
CFLAGS  = @CFLAGS@ -fno-pic
LDFLAGS = @LDFLAGS@

TARGETS = geodegx2.o geodelx.o cs5536.o k8.o intel_pentium3_early.o intel_pentium3.o intel_pentium4_early.o intel_pentium4_later.o intel_core1.o intel_core2_early.o intel_core2_later.o intel_nehalem.o
SYSTEMS = linux.o darwin.o freebsd.o
OBJS    = $(PROGRAM).o msrutils.o sys.o $(SYSTEMS) $(TARGETS)

all: $(PROGRAM)

$(PROGRAM): $(OBJS) Makefile.deps
	$(CC) -o $@ $(OBJS) $(LDFLAGS)

$(PROGRAM).o: $(PROGRAM).c
	$(CC) $(CFLAGS) -DVERSION='"@VERSION@"' -c $< -o $@

install: $(PROGRAM)
	mkdir -p $(DESTDIR)$(PREFIX)/sbin
	$(INSTALL) $(PROGRAM) $(DESTDIR)$(PREFIX)/sbin

distprep: distclean Makefile.deps

clean:
	rm -f $(PROGRAM) $(OBJS)

distclean: clean
	rm -f Makefile

mrproper: distclean
	rm -f Makefile.deps

dep:
	rm -f Makefile.deps
	$(MAKE) Makefile.deps

Makefile.deps: $(patsubst %.o,%.c,$(OBJS))
	$(CC) -MM $^ > $@

.PHONY: all distprep clean distclean mrproper dep

-include Makefile.deps
