Messages in this thread |  | | Subject | Re: kbuild-2.5 | Date | Thu, 01 Nov 2001 11:19:02 +0000 | From | David Howells <> |
| |
> David Howells <dhowells@redhat.com> wrote: > >Will kbuild get Makefiles in each subdirectory that allow > >it to build just the things in that subdirectory tree? > > Documentation/kbuild/kbuild-2.5.txt, KBUILD TARGETS.
Okay... for users of emacs, here's an elisp function that looks to see if it's in a subdirectory of a kernel tree (and if so whether it's kbuild or traditional), and if so invents an appropriate command line for compiling just in that subdir:-) Otherwise it just falls back to the usual compile function.
This can be put in a .emacs file, and can bound to a key:
(global-set-key [f5] 'kernel-compile)
David
(defun kernel-compile () "Attempt to compile the current directory as if it's part of a kernel tree, otherwise default to normal compile." (interactive) (let ((buffile (buffer-file-name)) (bufbits) (curdir) (topdir) (subdir) (slasher) (cmdline) (pos)) (if (not buffile) ;; no buffer file name (progn (setq cmdline (read-from-minibuffer "Compile command: " compile-command nil nil '(compile-history . 1))) (compile cmdline) ) ;; got a buffer filename, split into directory name chunks (progn (setq bufbits (split-string (buffer-file-name) "/"))
;; create a function to interpose slash characters between all the ;; elements of a string list, but not to add leading of trailing ;; slashes (setq slasher (lambda (lst slasher) (if (not (cdr lst)) lst (append (list (concat (car lst) "/")) (apply slasher (list (cdr lst) slasher)) ))))
;; iteratively work up the directory tree from the current directory ;; looking for various marker files (setq topdir nil) (setq pos (length bufbits)) (while (and (> pos 1) (not topdir)) (setq pos (- pos 1)) (setq curdir (subseq bufbits 0 pos)) (setq curdir (apply slasher (list curdir slasher))) (setq curdir (eval (append '(concat) (list "/") curdir))) (if (and (file-readable-p (concat curdir "/COPYING")) (file-readable-p (concat curdir "/CREDITS")) (file-readable-p (concat curdir "/README")) (file-readable-p (concat curdir "/MAINTAINERS")) (file-readable-p (concat curdir "/Makefile")) (file-readable-p (concat curdir "/kernel/sched.c")) ) (setq topdir curdir) ) )
(if topdir ;; deal with the markers being found (progn (if (not (file-symlink-p (concat curdir "/include/asm"))) (error "The %s/include/asm symlink appears to be missing" topdir))
(setq subdir (subseq bufbits pos(- (length bufbits) 1))) (setq subdir (apply slasher (list subdir slasher))) (setq subdir (eval (append '(concat) subdir)))
;; determine whether using kbuild or not (if (file-readable-p (concat curdir "/scripts/shadow.pl")) ;; kbuild (setq cmdline (concat "make -C " topdir " " subdir)) ;; traditional (setq cmdline (concat "make -C " topdir " SUBDIRS=" subdir)) ) (setq cmdline (read-from-minibuffer "Kernel compile: " cmdline nil nil '(compile-history . 1))) (compile cmdline) )
;; deal with the markers not being found (setq cmdline (read-from-minibuffer "Compile command: " compile-command nil nil '(compile-history . 1))) (compile cmdline) )
)) ) ) - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |