#
# (C) Copyright 2002
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
#
# See file CREDITS for list of people who contributed to this
# project.
#
# This program 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 2 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; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
# MA 02111-1307 USA
#
ifneq ("$(CONFIG_MODEL)", "PROJECT_CAP2150")
TOPDIR=../
ifneq ("$(CONFIG_PRODUCT)","MT7621")
include $(TOPDIR)Rules.mak
endif

CFLAGS+=$(SSP_ALL_CFLAGS) -DUSE_HOSTCC
CFLAGS+=-I$(TOPDIR)zlib

ifneq ("$(CONFIG_PRODUCT)","MT7621")
CFLAGS+=-I$(ROOTDIR)/$(LINUXDIR)/include
else
CFLAGS+=-fPIC -I$(ROOTDIR)/$(KERNEL_HEADERS)/include
LDFLAGS=-shared --warn-common --warn-once -z combreloc -z defs -s -z relro -z now
MAJOR_VERSION = 0
MINOR_VERSION = 9
SUBLEVEL = 28
endif

else
#DIRS
LINUXDIR = $(ROOTDIR)/linux-3.14.43.x
STAGING_DIR := $(ROOTDIR)/qca/toolchain
#TOOLCHAIN := $(STAGING_DIR)/toolchain-arm_cortex-a7_gcc-4.8-linaro_uClibc-1.0.14_eabi
CROSS := $(TOOLCHAIN)/bin
USERLIB_DIR = $(TOOLCHAIN)/lib
INCLUDES = $(TOOLCHAIN)/include
GCC_INCLUDE = $(TOOLCHAIN)/lib/gcc/arm-openwrt-linux-uclibcgnueabi/4.8.3/include
TOOLCHAIN_USRLIB = $(TOOLCHAIN)/usr/lib
TOPDIR = ../
FS_LIB_DIR=$(ROOTDIR)/qca/tmp/root-ipq806x/usr/lib

#GCC
CC = $(CROSS)/arm-openwrt-linux-uclibcgnueabi-gcc
STRIPTOOL = $(CROSS)/arm-openwrt-linux-uclibcgnueabi-strip
AR = $(CROSS)/arm-openwrt-linux-uclibcgnueabi-ar
LD = $(CROSS)/arm-openwrt-linux-uclibcgnueabi-ld
LDSHARE = $(CC) -shared 

RM = rm -f
INSTALL = install
LN = ln

CFLAGS =-O0 -g3 -nostdinc
CFLAGS += -fPIC -fno-builtin -fno-strict-aliasing -funit-at-a-time
CFLAGS += -I$(INCLUDES) -I$(TOOLCHAIN)/include
CFLAGS += -I$(ROOTDIR)/lib/include -I$(ROOTDIR) -I$(ROOTDIR)/lib/zlib
CFLAGS += -I$(LINUXDIR)/user_headers/include
CFLAGS += -DUSE_HOSTCC -DNDEBUG -D_DL_FINI_CRT_COMPAT -D_LIBC -DZ_SOLO
CFLAGS += -Wall -Wno-trigraphs -Wstrict-prototypes
CFLAGS += -mtune=cortex-a7 -march=armv7-a
CFLAGS += -isystem $(GCC_INCLUDE)

LDFLAGS = -shared --warn-common --warn-once -z combreloc -z defs -s -z relro -z now
LIBGCC = $(TOOLCHAIN)/lib/gcc/arm-openwrt-linux-uclibcgnueabi/4.8.3/libgcc.a
LDSHAREFLAGS = -fpic -fPIC -march=armv7-a -mtune=cortex-a7 -Wl,-z,relro,-z,now 

MAJOR_VERSION = 0
MINOR_VERSION = 9
SUBLEVEL = 28
endif

LIBNVRAM=libnvram.a
LIBNVRAM_SHARED=libnvram.so
LIBNVRAM_SHARED_FULLNAME=libnvram-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so

OBJS	:= crc32.o nvram_env.o flash_api.o

ifneq ("$(CONFIG_MODEL)", "PROJECT_CAP2150")
HEADERS := nvram_env.h nvram.h flash_api.h  $(ROOTDIR)/$(LINUXDIR)/include/linux/autoconf.h
else
HEADERS := nvram_env.h nvram.h flash_api.h
endif

all:	$(LIBNVRAM)

$(OBJS): %.o : %.c
	$(CC) $(CFLAGS) -c $< -o $@
	$(STRIPTOOL) -x -R .note -R .comment $*.o

shared: all
ifneq ("$(CONFIG_MODEL)", "PROJECT_CAP2150")
	$(LD) $(LDFLAGS) -soname=$(LIBNVRAM_SHARED).$(MAJOR_VERSION) \
		-o $(LIBNVRAM_SHARED_FULLNAME) --whole-archive $(LIBNVRAM) \
		--no-whole-archive \
		-L$(TOPDIR)lib -lc $(LDADD_LIBFLOAT) $(LIBGCC);
	$(INSTALL) -d $(TOPDIR)lib
	$(RM) $(TOPDIR)lib/$(LIBNVRAM_SHARED_FULLNAME) $(TOPDIR)lib/$(LIBNVRAM_SHARED).$(MAJOR_VERSION)
	$(INSTALL) -m 644 $(LIBNVRAM_SHARED_FULLNAME) $(TOPDIR)lib
	$(LN) -sf $(LIBNVRAM_SHARED_FULLNAME) $(TOPDIR)lib/$(LIBNVRAM_SHARED)
	$(LN) -sf $(LIBNVRAM_SHARED_FULLNAME) $(TOPDIR)lib/$(LIBNVRAM_SHARED).$(MAJOR_VERSION)
else
	$(LDSHARE) -Wl,-soname,$(LIBNVRAM_SHARED).$(MAJOR_VERSION) $(LDSHAREFLAGS) -o $(LIBNVRAM_SHARED_FULLNAME) $(OBJS) -lc
	#$(INSTALL) -d $(FS_LIB_DIR)
	$(RM) $(FS_LIB_DIR)/$(LIBNVRAM_SHARED_FULLNAME) $(FS_LIB_DIR)/$(LIBNVRAM_SHARED) $(FS_LIB_DIR)/$(LIBNVRAM_SHARED).$(MAJOR_VERSION)
	$(INSTALL) -m 644 $(LIBNVRAM_SHARED_FULLNAME) $(FS_LIB_DIR)/
	-mkdir -p $(TOPDIR)lib/
	$(INSTALL) -m 644 $(LIBNVRAM_SHARED_FULLNAME) $(TOPDIR)lib/
	$(LN) -sf $(LIBNVRAM_SHARED_FULLNAME) $(LIBNVRAM_SHARED)
	$(LN) -sf $(LIBNVRAM_SHARED_FULLNAME) $(LIBNVRAM_SHARED).$(MAJOR_VERSION)
	cp $(LIBNVRAM_SHARED) $(TOPDIR)lib/$(LIBNVRAM_SHARED)
	cp $(LIBNVRAM_SHARED).$(MAJOR_VERSION) $(TOPDIR)lib/$(LIBNVRAM_SHARED).$(MAJOR_VERSION)
	$(LN) -sf $(LIBNVRAM_SHARED_FULLNAME) $(FS_LIB_DIR)/$(LIBNVRAM_SHARED)
	$(LN) -sf $(LIBNVRAM_SHARED_FULLNAME) $(FS_LIB_DIR)/$(LIBNVRAM_SHARED).$(MAJOR_VERSION)
endif

$(LIBNVRAM) ar-target: $(OBJS)
	$(AR) $(ARFLAGS) $(LIBNVRAM) $(OBJS)
ifneq ("$(CONFIG_MODEL)", "PROJECT_CAP2150")
	$(INSTALL) -d $(TOPDIR)lib
	$(RM) $(TOPDIR)lib/$(LIBNVRAM)
	$(INSTALL) -m 644 $(LIBNVRAM) $(TOPDIR)lib
endif

$(OBJS): $(HEADERS) Makefile

clean:
	$(RM) *.[oa] $(LIBNVRAM_SHARED)* $(LIBNVRAM_SHARED_FULLNAME)*

