# Makefile for busybox
#
# Copyright (C) 1999-2005 by Erik Andersen <andersen@codepoet.org>
#
# Licensed under the GPL v2, see the file LICENSE in this tarball.

CONSOLETOOLS_AR:=console-tools.a
ifndef $(CONSOLETOOLS_DIR)
CONSOLETOOLS_DIR:=$(top_builddir)/console-tools/
endif
srcdir=$(top_srcdir)/console-tools

CONSOLETOOLS_DIR-y:=
CONSOLETOOLS_DIR-$(CONFIG_CHVT)		+= chvt.o
CONSOLETOOLS_DIR-$(CONFIG_CLEAR)	+= clear.o
CONSOLETOOLS_DIR-$(CONFIG_DEALLOCVT)	+= deallocvt.o
CONSOLETOOLS_DIR-$(CONFIG_DUMPKMAP)	+= dumpkmap.o
CONSOLETOOLS_DIR-$(CONFIG_SETCONSOLE)	+= setconsole.o
CONSOLETOOLS_DIR-$(CONFIG_LOADFONT)	+= loadfont.o
CONSOLETOOLS_DIR-$(CONFIG_LOADKMAP)	+= loadkmap.o
CONSOLETOOLS_DIR-$(CONFIG_OPENVT)	+= openvt.o
CONSOLETOOLS_DIR-$(CONFIG_RESET)	+= reset.o
CONSOLETOOLS_DIR-$(CONFIG_SETKEYCODES)	+= setkeycodes.o

libraries-y+=$(CONSOLETOOLS_DIR)$(CONSOLETOOLS_AR)

$(CONSOLETOOLS_DIR)$(CONSOLETOOLS_AR): $(patsubst %,$(CONSOLETOOLS_DIR)%, $(CONSOLETOOLS_DIR-y))
	$(AR) $(ARFLAGS) $@ $(patsubst %,$(CONSOLETOOLS_DIR)%, $(CONSOLETOOLS_DIR-y))

$(CONSOLETOOLS_DIR)%.o: $(srcdir)/%.c
	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o $@ $<

