Annotation of prex-old/mk/Makefile.inc, Revision 1.1
1.1 ! nbrk 1: #
! 2: # Makefile.inc - common make rules to build Prex
! 3: #
! 4:
! 5: # Supported environment variables
! 6: #
! 7: # SRCDIR ... Root directory of source tree
! 8: # ARCH ... Architecture name
! 9: # PLATFORM ... Platform name
! 10: # NDEBUG ... 0 for debug, 1 for release (default: 0)
! 11: # LIBGCC_PATH ... Full path for libgcc.a
! 12: # CROSS_COMPILE ... Prefix of tools for cross compile
! 13: #
! 14: # Variables in local Makefile
! 15: #
! 16: # TARGET ... Target file name
! 17: # TYPE ... Traget type
! 18: # e.g. OBJECT,LIBRARY,KERNEL,BINARY,EXEC,DRIVER,OS_IMAGE
! 19: # SUBDIR ... List of subdirectories
! 20: # OBJS ... Object files
! 21: # OBJS-y ... Object files (for drivers)
! 22: # LIBS ... Libraries
! 23: # MAP ... Name of map file
! 24: # DISASM ... Disassemble list file
! 25: # SYMBOL ... Symbol files
! 26: #
! 27:
! 28: #
! 29: # Option for cross compile
! 30: #
! 31: #CROSS_COMPILE=
! 32: #CROSS_COMPILE= i386-elf-
! 33: #CROSS_COMPILE= arm-elf-
! 34: #CROSS_COMPILE= powerpc-eabi-
! 35: #CROSS_COMPILE= sh-elf-
! 36: #CROSS_COMPILE= mips-elf-
! 37:
! 38: #
! 39: # Tools
! 40: #
! 41: CC= $(CROSS_COMPILE)gcc
! 42: CPP= $(CROSS_COMPILE)cpp
! 43: AS= $(CROSS_COMPILE)as
! 44: LD= $(CROSS_COMPILE)ld
! 45: AR= $(CROSS_COMPILE)ar
! 46: OBJCOPY= $(CROSS_COMPILE)objcopy
! 47: OBJDUMP= $(CROSS_COMPILE)objdump
! 48: STRIP= $(CROSS_COMPILE)strip
! 49: LINT= splint
! 50: MAKE= make
! 51: #SHELL= /bin/sh
! 52: ifdef SHELL_PATH
! 53: SHELL= $(SHELL_PATH)
! 54: endif
! 55: ifdef DISASM
! 56: ASMGEN= $(OBJDUMP) $@ --disassemble-all > $(DISASM)
! 57: endif
! 58:
! 59: #
! 60: # System dependent options
! 61: #
! 62: include $(SRCDIR)/mk/own.mk
! 63:
! 64: #
! 65: # Flags
! 66: #
! 67: DEFS= -D__$(ARCH)__ -D__$(PLATFORM)__ \
! 68: -D__ARCH__=$(ARCH) -D__PLATFORM__=$(PLATFORM) \
! 69: -U$(ARCH) -U$(PLATFORM)
! 70:
! 71: CFLAGS+= -Os -ansi -pedantic -fno-strict-aliasing \
! 72: -Wall -Wundef -Wstrict-prototypes -Wpointer-arith \
! 73: $(CONFIG_CFLAGS) $(DEFS)
! 74:
! 75: ifeq ($(NDEBUG),1)
! 76: CFLAGS+= -fomit-frame-pointer
! 77: else
! 78: CFLAGS+= -fno-omit-frame-pointer -DDEBUG -g
! 79: endif
! 80:
! 81: CPPFLAGS+= $(DEFS)
! 82: ASFLAGS+= $(DEFS) -D__ASSEMBLY__
! 83: ifdef MAP
! 84: LDFLAGS+= -Map $(MAP)
! 85: endif
! 86: LDFLAGS+=
! 87: MAKEFLAGS+= -rR --no-print-directory
! 88: LINTFLAGS+= -D__lint__ $(DEFS) -nolib -weak -fcnuse -nestcomment \
! 89: -retvalother -fullinitblock
! 90:
! 91: #
! 92: # Specify path for libgcc.a
! 93: #
! 94: ifndef LIBGCC_PATH
! 95: LIBGCC_PATH := $(dir $(shell $(CC) $(GLOBAL_CFLAGS) -print-libgcc-file-name))
! 96: endif
! 97: LIBGCC = $(LIBGCC_PATH)libgcc.a
! 98:
! 99: #
! 100: # Inference rules
! 101: #
! 102: %.o: %.c
! 103: $(CC) $(CFLAGS) -c -o $@ $<
! 104:
! 105: %.o: %.s
! 106: $(AS) -o $@ $<
! 107:
! 108: %.o: %.S
! 109: $(CPP) $(ASFLAGS) $< $*.tmp
! 110: $(AS) -o $@ $*.tmp
! 111: rm -f $*.tmp
! 112:
! 113: #
! 114: # Target
! 115: #
! 116: all: $(SUBDIR) $(TARGET)
! 117:
! 118: #
! 119: # Check configuration
! 120: #
! 121: ifeq (0, ${MAKELEVEL})
! 122: # add dependency on config.h
! 123: $(SUBDIR):$(SRCDIR)/conf/config.h
! 124:
! 125: $(SRCDIR)/conf/config.h: dummy
! 126: @if [ ! -f $@ ]; then \
! 127: echo 'You must run `configure` before make.' ;\
! 128: exit 1 ;\
! 129: fi
! 130: endif
! 131:
! 132: #
! 133: # Rules to process sub-directory
! 134: #
! 135: ifdef SUBDIR
! 136: .PHONY: $(SUBDIR)
! 137: $(SUBDIR): dummy
! 138: $(MAKE) -C $@
! 139: endif
! 140:
! 141: #
! 142: # Rules to link a set of .o files into one .o file
! 143: #
! 144: ifeq ($(TYPE),OBJECT)
! 145: $(TARGET): $(OBJS) $(OBJS-y)
! 146: $(LD) $(LDFLAGS) -r -o $@ $^
! 147: endif
! 148:
! 149: #
! 150: # Rules to compile library
! 151: #
! 152: ifeq ($(TYPE),LIBRARY)
! 153: $(TARGET): $(OBJS) ar-target
! 154:
! 155: .PHONY: ar-target
! 156: ar-target: $(OBJS)
! 157: $(AR) rucs $(TARGET) $?
! 158: $(STRIP) -x -R .comment -R .note $(TARGET)
! 159: endif
! 160:
! 161: #
! 162: # Rules to compile kernel
! 163: #
! 164: ifeq ($(TYPE),KERNEL)
! 165: $(TARGET): $(OBJS) $(LIBS) $(LDS_SCRIPT)
! 166: $(LD) $(LDFLAGS) -T $(LD_SCRIPT) -o $@ $(OBJS) $(LIBS) $(LIBGCC)
! 167: $(ASMGEN)
! 168: ifdef SYMBOL
! 169: cp $@ $(SYMBOL)
! 170: endif
! 171: $(STRIP) -s $@
! 172: endif
! 173:
! 174: #
! 175: # Rules to compile device driver
! 176: #
! 177: ifeq ($(TYPE),DRIVER)
! 178: $(TARGET): $(OBJS) $(OBJS-y) $(LDS_SCRIPT)
! 179: $(LD) --error-unresolved-symbols $(LDFLAGS) -T $(LD_SCRIPT) -o $@.tmp $(OBJS) $(LIBS) $(LIBGCC)
! 180: rm -f $@.tmp
! 181: $(LD) -r $(LDFLAGS) -T $(LD_SCRIPT) -o $@ $(OBJS) $(LIBS) $(LIBGCC)
! 182: $(ASMGEN)
! 183: ifdef SYMBOL
! 184: cp $@ $(SYMBOL)
! 185: endif
! 186: $(STRIP) --strip-debug --strip-unneeded $@
! 187: endif
! 188:
! 189: #
! 190: # Rules to compile binary file
! 191: #
! 192: ifeq ($(TYPE),BINARY)
! 193: $(TARGET): $(OBJS) $(LDS_SCRIPT)
! 194: $(LD) $(LDFLAGS) -T $(LD_SCRIPT) -o $@ $(OBJS) $(LIBS) $(LIBGCC)
! 195: $(ASMGEN)
! 196: ifdef SYMBOL
! 197: cp $@ $(SYMBOL)
! 198: endif
! 199: $(OBJCOPY) $(OBJCOPYFLAGS) $@
! 200: endif
! 201:
! 202: #
! 203: # Rules to compile executable file
! 204: #
! 205: ifeq ($(TYPE),EXEC)
! 206: $(TARGET): $(OBJS) $(LIBS) $(LDS_SCRIPT)
! 207: $(LD) $(LDFLAGS) -T $(LD_SCRIPT) -o $@ \
! 208: $(CRT0) $(OBJS) $(LIBS) $(LIBC) $(LIBGCC)
! 209: $(ASMGEN)
! 210: ifdef SYMBOL
! 211: cp $@ $(SYMBOL)
! 212: endif
! 213: $(STRIP) --strip-debug --strip-unneeded $@
! 214: endif
! 215:
! 216: #
! 217: # Rules to create OS image
! 218: #
! 219: ifeq ($(TYPE),OS_IMAGE)
! 220: $(TARGET): dummy
! 221: ifdef BOOTFILES
! 222: $(AR) rcS ramdisk.a $(BOOTFILES)
! 223: $(AR) t ramdisk.a
! 224: $(AR) rcS tmp.a $(KERNEL) $(DRIVER) $(BOOTTASKS) ramdisk.a
! 225: rm ramdisk.a
! 226: else
! 227: $(AR) rcS tmp.a $(KERNEL) $(DRIVER) $(BOOTTASKS)
! 228: endif
! 229: $(AR) t tmp.a
! 230: cat $(LOADER) tmp.a > $@
! 231: rm tmp.a
! 232: endif
! 233:
! 234:
! 235: -include Makefile.dep
! 236:
! 237: C_SRCS = $(wildcard *.c) $(wildcard *.S)
! 238:
! 239: #
! 240: # Depend
! 241: #
! 242: .PHONY: depend dep
! 243: depend dep:
! 244: ifdef SUBDIR
! 245: @(for d in $(SUBDIR) _ ; do \
! 246: if [ "$$d" != "_" ] ; then $(MAKE) -C $$d depend; fi; \
! 247: done);
! 248: endif
! 249: rm -f Makefile.dep
! 250: @(for d in $(C_SRCS) _ ; do \
! 251: if [ "$$d" != "_" ] ; then \
! 252: $(CPP) -M $(CPPFLAGS) $$d >> Makefile.dep; fi; \
! 253: done);
! 254: #
! 255: # Lint
! 256: #
! 257: .PHONY: lint
! 258: lint:
! 259: @(for d in $(C_SRCS) _ ; do \
! 260: if [ "$$d" != "_" ] ; then \
! 261: $(LINT) $(LINTFLAGS) $(INCLUDE) $$d; fi; \
! 262: done);
! 263:
! 264: #
! 265: # Clean up
! 266: #
! 267: .PHONY: clean
! 268: clean:
! 269: ifdef SUBDIR
! 270: @(for d in $(SUBDIR) _ ; do \
! 271: if [ "$$d" != "_" ] ; then $(MAKE) -C $$d clean; fi; \
! 272: done);
! 273: endif
! 274: rm -f Makefile.dep $(TARGET) $(OBJS) $(OBJS-y) $(DISASM) $(MAP) $(SYMBOL) $(CLEANS)
! 275:
! 276: .PHONY: dummy
CVSweb