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

LIBIPROUTE_AR:=libiproute.a
ifndef $(LIBIPROUTE_DIR)
LIBIPROUTE_DIR:=$(top_builddir)/networking/libiproute
endif
srcdir=$(top_srcdir)/networking/libiproute

LIBIPROUTE-y:=
LIBIPROUTE-$(CONFIG_IP) += \
	ip_parse_common_args.o \
	ipaddress.o \
	iplink.o \
	iproute.o \
	iptunnel.o \
	libnetlink.o \
	ll_addr.o \
	ll_map.o \
	ll_proto.o \
	ll_types.o \
	rt_names.o \
	rtm_map.o \
	utils.o

LIBIPROUTE-$(CONFIG_IPADDR) += \
	ip_parse_common_args.o \
	ipaddress.o \
	libnetlink.o \
	ll_addr.o \
	ll_map.o \
	ll_types.o \
	rt_names.o \
	utils.o

LIBIPROUTE-$(CONFIG_IPLINK) += \
	ip_parse_common_args.o \
	ipaddress.o \
	iplink.o \
	libnetlink.o \
	ll_addr.o \
	ll_map.o \
	ll_types.o \
	rt_names.o \
	utils.o

LIBIPROUTE-$(CONFIG_IPROUTE) += \
	ip_parse_common_args.o \
	iproute.o \
	libnetlink.o \
	ll_map.o \
	rt_names.o \
	rtm_map.o \
	utils.o

LIBIPROUTE-$(CONFIG_IPTUNNEL) += \
	ip_parse_common_args.o \
	iptunnel.o \
	rt_names.o \
	utils.o

LIBIPROUTE-y:=$(sort $(LIBIPROUTE-y))

LIBIPROUTE_SRC-y:=$(patsubst %,$(srcdir)/%,$(subst .o,.c,$(LIBIPROUTE-y)))
LIBIPROUTE_SRC-a:=$(wildcard $(srcdir)/*.c)
LIBRARY_SRC-y+=$(LIBIPROUTE_SRC-y)
LIBRARY_SRC-a+=$(LIBIPROUTE_SRC-a)

LIBIPROUTE-obj:=$(LIBIPROUTE_DIR)/$(LIBIPROUTE_AR)

# We do not need to build an empty non-pic object/archive
ifneq ($(strip $(LIBIPROUTE-y)),)
libraries-y+=$(LIBIPROUTE_DIR)/$(LIBIPROUTE_AR)
endif

# If we are building libbusybox.so _and_ we will use it ourselves then we
# keep it as small as possible
ifeq ($(strip $(CONFIG_FEATURE_SHARED_BUSYBOX)),y)
ifneq ($(strip $(LIBIPROUTE-y)),)
libraries-m+=$(LIBIPROUTE-multi-pic)
endif
endif

$(LIBIPROUTE_DIR)/$(LIBIPROUTE_AR): $(patsubst %,$(LIBIPROUTE_DIR)/%,$(LIBIPROUTE-y))
	$(AR) $(ARFLAGS) $@ $(^)

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

