All of lore.kernel.org
 help / color / mirror / Atom feed
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


  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.