From: Joel Becker <Joel.Becker@oracle.com>
To: Sam Ravnborg <sam@ravnborg.org>
Cc: Timur Tabi <timur.tabi@ammasso.com>,
Christopher Li <lkml@chrisli.org>,
linux-kernel@vger.kernel.org
Subject: Re: Kbuild trick
Date: Sat, 21 May 2005 13:41:29 -0700 [thread overview]
Message-ID: <20050521204129.GP22946@ca-server1.us.oracle.com> (raw)
In-Reply-To: <20050521051217.GA8191@mars.ravnborg.org>
[-- Attachment #1: Type: text/plain, Size: 712 bytes --]
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: joel.becker@oracle.com
Phone: (650) 506-8127
[-- Attachment #2: Makefile --]
[-- Type: text/plain, Size: 583 bytes --]
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
[-- Attachment #3: Kbuild-24.make --]
[-- Type: text/plain, Size: 2610 bytes --]
#
# 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
next prev parent reply other threads:[~2005-05-21 20:41 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-17 21:46 sparse error: unable to open 'stdarg.h' Timur Tabi
2005-05-17 20:11 ` Christopher Li
2005-05-18 14:08 ` Timur Tabi
2005-05-18 12:38 ` Christopher Li
2005-05-18 15:51 ` Timur Tabi
2005-05-18 13:24 ` Christopher Li
2005-05-18 16:45 ` Timur Tabi
2005-05-18 18:22 ` Sam Ravnborg
2005-05-18 18:23 ` Timur Tabi
2005-05-20 19:37 ` Kbuild trick Sam Ravnborg
2005-05-20 23:43 ` Joel Becker
2005-05-21 5:12 ` Sam Ravnborg
2005-05-21 5:48 ` randy_dunlap
2005-05-21 20:41 ` Joel Becker [this message]
2005-05-21 10:59 ` Kedar Sovani
2005-05-22 7:28 ` Sam Ravnborg
2005-05-17 22:39 ` sparse error: unable to open 'stdarg.h' Timur Tabi
2005-05-18 18:22 ` Sam Ravnborg
2005-05-18 22:14 ` Timur Tabi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050521204129.GP22946@ca-server1.us.oracle.com \
--to=joel.becker@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lkml@chrisli.org \
--cc=sam@ravnborg.org \
--cc=timur.tabi@ammasso.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.