# # Copyright (c) 1995-2000 The University of Utah and the Flux Group. # # This file is part of the OSKit Linux Glue Libraries, which are free # software, also known as "open source;" you can redistribute them and/or # modify them under the terms of the GNU General Public License (GPL), # version 2, as published by the Free Software Foundation (FSF). # # The OSKit is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GPL for more details. You should have # received a copy of the GPL along with the OSKit; see the file COPYING. If # not, write to the FSF, 59 Temple Place #330, Boston, MA 02111-1307, USA. # ifndef _oskit_linux_fs_makerules_ _oskit_linux_fs_makerules_ = yes TARGET = liboskit_linux_fs.a all: $(TARGET) SRCDIRS += $(OSKIT_SRCDIR)/linux/fs \ $(OSKIT_SRCDIR)/linux/src/fs \ $(OSKIT_SRCDIR)/linux/src/fs/nls DEFINES += -DOSKIT_FS # Generate the list of the per-filesystem obj files from the `filesystems' # file we generate below. # The hairy genobjs "function" is to take a dir name, e.g., ext2, and generate # scoped .o names for all of the .c files in that dir's src directory, e.g., # ext2_inode.o, ext2_namei.o, ... -include filesystems genobjs = $(patsubst %.c,%.o, \ $(addprefix $(dir)_, \ $(notdir \ $(wildcard $(OSKIT_SRCDIR)/linux/src/fs/$(dir)/*.c)))) OBJFILES += $(foreach dir,$(FILESYSTEMS),$(genobjs)) # Implicitly include the fs global.h header file at the top of _all_ sources. # This header #defines a bunch of global Linux symbols # to ensure linker namespace cleanliness and avoid conflicts. OSKIT_CPPFLAGS += -include $(OSKIT_SRCDIR)/linux/fs/global.h $(OBJFILES): $(OSKIT_SRCDIR)/linux/fs/global.h # This rule generates a file called `filesystems' which we include to # define the FILESYSTEMS variable and some rules. # The FILESYSTEMS var will contain a list of the names of the filesystems # included according to the file. # The rules we define are to allow us to build all the filesytem files # in one directory. # The problem is that Linux keeps the per-filesytem code in their # own directories and file names aren't scoped. # Additionally, the source files do stuff like #include "../fat/tables.h". # Here, we make rules that scopify the names by making symbolic links # to the source files, # and that compile the source files with an additional -I path. # We link the files to CWD instead of doing `cc -o foo_inode.o foo/inode.c' # because the -MD gcc flag would make inode.d instead of foo_inode.d. filesystems: $(OSKIT_SRCDIR)/oskit/fs/linux_filesystems.h $(OSKIT_QUIET_MAKE_INFORM) "Generating makefile fragment $@" sed -e 's/[(),]/ /g' < $< | $(AWK) -f $(OSKIT_SRCDIR)/linux/fs/filesystems.awk >$@ CLEAN_FILES += filesystems ### Include shared make stuff ### include $(OSKIT_SRCDIR)/linux/shared/GNUmakerules # XXX - for debugging # OSKIT_CFLAGS := $(filter-out -O2, $(OSKIT_CFLAGS)) # OSKIT_CFLAGS += -O endif