Re: Kbuild trick

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, May 21, 2005 at 07:12:17AM +0200, Sam Ravnborg wrote:
> > svn cat -r 2205 http://oss.oracle.com/projects/ocfs2/src/trunk/Kbuild-24.make
> 
> Care to post a copy?

	That would be too logical.  Here you go.  The first file is a
sample Makefile for both 2.6 and 2.4, stripped out of our history.  Any
mistakes are mine.  The second is Kbuild-24.make.  The files expect
KERNELDIR and KERNELINC to be set, and a 2.4 build needs to set GCCINC
as well.  Use your favorite autoconf/anti-autoconf system.

Joel

-- 

"Well-timed silence hath more eloquence than speech."  
         - Martin Fraquhar Tupper

Joel Becker
Senior Member of Technical Staff
Oracle
E-mail: [email protected]
Phone: (650) 506-8127
obj-m	+= myfs.o
myfs-objs := inode.o super.o

EXTRA_CFLAGS += -DSOMETHING

ifeq ($(KERNELRELEASE),)
# Called as "make" part of makefile.  This executes kbuild

all: build-myfs

clean: clean-myfs

install: install-myfs

ifneq ($(KERNEL_26),)
# This is a 2.6 kenrel, forward to kbuild

build-myfs:
	$(MAKE) -C $(KERNELDIR) M=`pwd` modules

clean-myfs:
	$(MAKE) -C $(KERNELDIR) M=`pwd` clean

install-myfs:
	$(MAKE) -C $(KERNELDIR) M=`pwd` modules_install
else
# This is a 2.4 kernel, use our own

include Kbuild-24.make

endif

else
# Called from 2.6 kbuild

STAMP_DIR = `pwd`

endif
#
# This is a Makefile for 2.4 external module builds.  Red Hat
# Enterprise Linux does not support the usual:
#
#     make -C /lib/modules/`uname -r`/build SUBDIRS=`pwd` modules
#
# So we must hand-roll our compile lines.  This is in a seperate
# file to keep the regular Makefile readable.
#
# This uses the Makebo schema.  So, the compile parts are filled in.
# All Makefiles using this code should set MODULE_CFLAGS and
# MODULE_DEFINES for any extra cflags/defines needed.
#

WARNINGS = -Wall -Wstrict-prototypes
OPTIMIZE = -O2

KERNEL_DEFINES = -D__KERNEL__ -DMODULE -DLINUX -DEXPORT_SYMTAB
KERNEL_CFLAGS = -pipe -nostdinc -fno-strict-aliasing -fno-common \
	-fomit-frame-pointer
KERNEL_LDADD = -nostdlib

#
# These arch-specific flags would normally be provided by the
# kbuild system.  Hope we got them right.
#

ifeq ($(PROCESSOR),ppc64)
  MACH_CFLAGS += -m64 -fsigned-char -fno-builtin -msoft-float \
	-mminimal-toc
  MACH_LDADD += -m elf64ppc
endif
ifeq ($(PROCESSOR),x86_64)
  MACH_CFLAGS += -m64 -mcmodel=kernel
endif
ifeq ($(PROCESSOR),s390x)
  MACH_CFLAGS += -fno-strength-reduce -fpic
  MACH_LDADD += -m elf64_s390
endif



INCLUDES = -I. -I$(KERNELINC) -I$(GCCINC)
DEFINES = $(KERNEL_DEFINES)
CFLAGS = $(OPTIMIZE) $(KERNEL_CFLAGS) $(MACH_CFLAGS) $(MODVERSIONS) \
	$(WARNINGS) $(EXTRA_CFLAGS) $(CFLAGS_$(*F).o)
LDADD = $(KERNEL_LDADD) $(MACH_LDADD)

#
# Ripping off some kbuild 2.6 tricks
#

# Modules that have multiple parts.
multi-used-m := $(sort $(foreach m, $(obj-m), $(if $(strip $($(m:.o=-objs))), $(m))))
multi-objs-m := $(foreach m, $(multi-used-m), $($(m:.o=-objs)))

# Modules that don't.
single-used-m := $(sort $(filter-out $(multi-used-m), $(obj-m)))
link_multi_deps = $($(@:.o=-objs))

#
# It's impossible, AFAICT, to generate the dependancies for each
# individual object:parts set.  In fact, kbuild 2.6 doesn't try either.
# They use a simpler trick...they force the rebuild like this, but
# call if_changed on each target to avoid the useless rebuilds.
# This is a 2.4 hack, so I don't care that much :-)
#
$(multi-used-m): $(multi-objs-m)
	$(CC) -Wl,-r -o $@ $(LDADD) $(link_multi_deps)

build-modules: $(single-used-m) $(multi-used-m)


# Kbuild uses INSTALL_MOD_PATH for rooted installs.  Makebo uses
# DESTDIR.  Folks really should set INSTALL_MOD_PATH, but in case they
# don't...
INSTALL_MOD_PATH ?= $(DESTDIR)
MODLIB = $(INSTALL_MOD_PATH)$(MODULEDIR)

install-modules: $(obj-m)
	$(TOPDIR)/mkinstalldirs $(MODLIB)/$(INSTALL_MOD_DIR)
	for file in $(obj-m); do \
	  $(INSTALL_DATA) $$file $(MODLIB)/$(INSTALL_MOD_DIR)/$$file; \
	done

clean-modules:
	rm -f *.o *.p *.s


[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux