#
# Makefile for the linux memory manager.
#
# Note! Dependencies are done automagically by 'make dep', which also
# removes any old dependencies. DON'T put your own dependencies here
# unless it's something special (ie not a .c file).
#
# Note 2! The CFLAGS definition is now in the main makefile...

O_TARGET := mm.o

export-objs := shmem.o filemap.o memory.o page_alloc.o oom_notifier.o \
	       vmscan.o

obj-y	 := memory.o mmap.o filemap.o mprotect.o mlock.o mremap.o \
	    vmalloc.o slab.o bootmem.o swap.o vmscan.o page_alloc.o \
	    numa.o shmem.o rmap.o oom_notifier.o

obj-$(CONFIG_HIGHMEM) += highmem.o
obj-$(CONFIG_SWAP) += page_io.o swap_state.o swapfile.o
obj-$(CONFIG_OOM_KILL)  += oom_kill.o
obj-$(CONFIG_OOM_KPPID) += oom_kill_parent.o
obj-$(CONFIG_OOM_PANIC) += oom_panic.o

obj-$(CONFIG_BIGPHYS_AREA) += bigphysarea.o
obj-y += wtd.o

obj-$(CONFIG_PROC_MM) += proc_mm.o

ifeq ($(CONFIG_MEMORYPOOL),y)
obj-y += mempool.o
export-objs += mempool.o
endif

ifeq ($(CONFIG_BADMEM),y)
 ifeq ($(CONFIG_BADMEM_PROCFS),y)
  ifeq ($(CONFIG_PROC_FS),y)
   obj-y += badmem_proc.o kernel_badmemlib.o
  endif
 endif
 
 ifeq ($(CONFIG_BADMEM_MODSYSTEM),y)
  obj-y += badmem_modules.o
 endif

endif
ifeq ($(CONFIG_PROC_MEMMAP),y)
 ifeq ($(CONFIG_PROC_FS),y)
  obj-y += proc_memmap.o
 endif
endif

include $(TOPDIR)/Rules.make

ifeq ($(CONFIG_BADMEM),y)
 ifeq ($(CONFIG_BADMEM_MODSYSTEM),y)

   CONFIG_BADMEM_CONFIGFILENAME = $(subst ",,$(CONFIG_BADMEM_CONFIGFILENAME_WITH_QUOTES))

   ifeq ("$(CONFIG_BADMEM_CONFIGFILENAME)","")
    CONFIG_BADMEM_CONFIGFILENAME = /etc/badmem.conf
   endif

modparse: modparse.c
	$(CC) -o modparse modparse.c -lbadmem -lm
 
badmemlib_version: badmemlib_version.c
	$(CC) -DLIB_TEST -o badmemlib_version badmemlib_version.c -lbadmem -lm

runversiontest: badmemlib_version
	@./badmemlib_version; if [ $? == 1 ]; then echo "Sorry, the version\
of your installed BadMEMlib is too old. Please update from\
http://badmem.sourceforge.net"; fi
	rm -f ./badmemlib_version  # This file is not used any more, so we can delete it
 
badmem_modules.o: runversiontest modparse $(CONFIG_BADMEM_CONFIGFILENAME)
	./modparse $(CONFIG_BADMEM_CONFIGFILENAME) > badmem_modules.c
	$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c -o badmem_modules.o badmem_modules.c

 endif

 ifeq ($(CONFIG_BADMEM_PROCFS),y)
  ifneq ("$(CONFIG_BADMEM_UTILPATH_WITH_QUOTES)","")
   CONFIG_BADMEM_UTILPATH:=$(strip $(subst ",,$(CONFIG_BADMEM_UTILPATH_WITH_QUOTES)))
  else
   CONFIG_BADMEM_UTILPATH:=/usr/src/badmem
  endif
  override CFLAGS+= -I$(CONFIG_BADMEM_UTILPATH)/badmemlib/include


badmemkernellib_version: badmemlib_version.c
	$(CC) -DKERNELLIB_TEST -o badmemkernellib_version -I $(CONFIG_BADMEM_UTILPATH)/badmemlib/include badmemlib_version.c -lbadmem -lm

runversiontest_kernel: badmemkernellib_version
	@./badmemkernellib_version; if [ $? == 1 ]; then echo "Sorry, the version\
of your in the kernel configuration specified BadMEMlib is too old. Please update from\
http://badmem.sourceforge.net"; fi
	rm -f ./badmemkernellib_version   # This file is not used any more, so we can delete it
 
kernel_badmemlib.o: runversiontest_kernel
	@if [ ! -e $(CONFIG_BADMEM_UTILPATH) ]; then echo "$(CONFIG_BADMEM_UTILPATH) does not exists!"; exit 1; fi
	@if [ ! -e $(CONFIG_BADMEM_UTILPATH)/badmemlib -o ! -e $(CONFIG_BADMEM_UTILPATH)/badmemlib/Makefile.in ]; then echo "Could not find util package in $(CONFIG_BADMEM_UTILPATH)!"; exit 1; fi
	if [ -e $(CONFIG_BADMEM_UTILPATH)/configure -a ! -e $(CONFIG_BADMEM_UTILPATH)/Makefile ]; then cd $(CONFIG_BADMEM_UTILPATH); ./configure ; fi
	$(MAKE) -C $(CONFIG_BADMEM_UTILPATH)/badmemlib IN_KERNEL_MODE=1 clean kernel_badmemlib.o
	@if [ -L kernel_badmemlib.o ]; then ln -sf $(CONFIG_BADMEM_UTILPATH)/badmemlib/kernel_badmemlib.o kernel_badmemlib.o; fi
	@if [ ! -e kernel_badmemlib.o ]; then ln -s $(CONFIG_BADMEM_UTILPATH)/badmemlib/kernel_badmemlib.o kernel_badmemlib.o; fi
	@if [ ! -L kernel_badmemlib.o ]; then echo "Could not create link for 'kernel_badmemlib.o'"; exit 1; fi
 endif

endif
