Diff markup
001 001
002 002
003 003
004 004
005 005
006 006
007 007
008 008
009 009
010 010
011 011
012 012
013 013
014 014
015 015
016 016
017 017
018 CC=gcc 018 CC=gcc
019 AR=ar 019 AR=ar
020 CP=cp 020 CP=cp
021 STRIP=strip 021 STRIP=strip
022 OBJCOPY=objcopy 022 OBJCOPY=objcopy
023 CFLAGS = -Wall -nostdinc -ffreestanding -I. - 023 CFLAGS = -Wall -nostdinc -ffreestanding -I. -I.. -O
024 LIBGCC = $(shell $(CC) -print-libgcc-file-nam 024 LIBGCC = $(shell $(CC) -print-libgcc-file-name)
025 LDFLAGS = -Wl,--warn-common -nostdlib -Wl,-Tld 025 LDFLAGS = -Wl,--warn-common -nostdlib -Wl,-Tldscript.lds
026 026
027 027
028 all: userprogs.kimg 028 all: userprogs.kimg
029 029
030 -include .mkvars 030 -include .mkvars
031 031
032 PROGS := init myprog1 myprog2 myprog3 myprog4 032 PROGS := init myprog1 myprog2 myprog3 myprog4 myprog5 myprog6 \
033 myprog7 myprog8 myprog9 myprog10 mypr 033 myprog7 myprog8 myprog9 myprog10 myprog11 myprog12 \
034 myprog13 myprog14 banner fstest chart 034 myprog13 myprog14 banner fstest chartest blktest shell
035 035
036 # Build dependencies of the programs 036 # Build dependencies of the programs
037 init: fstest_utils.o 037 init: fstest_utils.o
038 fstest: fstest_utils.o 038 fstest: fstest_utils.o
039 chartest: fstest_utils.o 039 chartest: fstest_utils.o
040 blktest: fstest_utils.o 040 blktest: fstest_utils.o
041 shell: fstest_utils.o 041 shell: fstest_utils.o
042 $(PROGS) : % : %.o crt.o libc.a 042 $(PROGS) : % : %.o crt.o libc.a
043 043
044 PWD := $(shell pwd | sed 's/"/\\\"/g;s/\$$/\\\ 044 PWD := $(shell pwd | sed 's/"/\\\"/g;s/\$$/\\\$$/g')
045 045
046 046
047 $(PROGS): 047 $(PROGS):
048 $(CC) -static $(LDFLAGS) -o $@ $^ $(LI 048 $(CC) -static $(LDFLAGS) -o $@ $^ $(LIBGCC)
049 049
050 050
051 libc.a: libc.o string.o stdarg.o debug.o 051 libc.a: libc.o string.o stdarg.o debug.o
052 052
053 053
054 userprogs.kimg: $(PROGS) 054 userprogs.kimg: $(PROGS)
055 @echo "# Generating ELF images for inc 055 @echo "# Generating ELF images for inclusion into the kernel image: $@"
056 @echo "SECTIONS { .userprogs . : { " > 056 @echo "SECTIONS { .userprogs . : { " > .userprogs.lds
057 @i=0 ; 057 @i=0 ; \
058 for f in $^ ; do 058 for f in $^ ; do \
059 i=`expr $$i + 1` ; 059 i=`expr $$i + 1` ; \
060 echo "extern char _begin_userprog$$ 060 echo "extern char _begin_userprog$$i, _end_userprog$$i;" \
061 > .userprog$$i.c ; 061 > .userprog$$i.c ; \
062 echo "char *_userprog"$$i"_entry[]" 062 echo "char *_userprog"$$i"_entry[]" >> .userprog$$i.c ; \
063 echo " __attribute__((section(\".u 063 echo " __attribute__((section(\".userprogs_table\")))" \
064 >> .userprog$$i.c ; 064 >> .userprog$$i.c ; \
065 echo " = { \"$$f\", &_begin_userpr 065 echo " = { \"$$f\", &_begin_userprog$$i, &_end_userprog$$i };" \
066 >> .userprog$$i.c ; 066 >> .userprog$$i.c ; \
067 $(CC) $(CFLAGS) -c .userprog$$i.c - 067 $(CC) $(CFLAGS) -c .userprog$$i.c -o .userprog$$i.o ; \
068 $(CP) $$f $$f.strip && $(STRIP) -sx 068 $(CP) $$f $$f.strip && $(STRIP) -sx $$f.strip ; \
069 $(OBJCOPY) --add-section .userprog$ 069 $(OBJCOPY) --add-section .userprog$$i=$$f.strip .userprog$$i.o \
070 .userprog$$i.kimg ; 070 .userprog$$i.kimg ; \
071 echo " . = ALIGN(4096);" >> .userp 071 echo " . = ALIGN(4096);" >> .userprogs.lds ; \
072 echo " _begin_userprog$$i = .;" >> 072 echo " _begin_userprog$$i = .;" >> .userprogs.lds ; \
073 echo " .userprog$$i.kimg(.userprog 073 echo " .userprog$$i.kimg(.userprog$$i);" >> .userprogs.lds ; \
074 echo " _end_userprog$$i = .;" >> . 074 echo " _end_userprog$$i = .;" >> .userprogs.lds ; \
075 echo " .userprog$$i.kimg(.rodata); 075 echo " .userprog$$i.kimg(.rodata); .userprog$$i.kimg(.data);" \
076 >> .userprogs.lds ; 076 >> .userprogs.lds ; \
077 done 077 done
078 @echo " _userprogs_table = .; *(.user 078 @echo " _userprogs_table = .; *(.userprogs_table) ; LONG(0);" \
079 >> .userprogs.lds 079 >> .userprogs.lds
080 @echo "} /DISCARD/ : { *(.text) *(.dat 080 @echo "} /DISCARD/ : { *(.text) *(.data) *(.bss) } }" \
081 >> .userprogs.lds 081 >> .userprogs.lds
082 @$(LD) -r -o $@ -T.userprogs.lds 082 @$(LD) -r -o $@ -T.userprogs.lds
083 083
084 084
085 %.a: 085 %.a:
086 $(AR) rcv $@ $^ 086 $(AR) rcv $@ $^
087 087
088 088
089 %.o: %.c 089 %.o: %.c
090 $(CC) "-I$(PWD)" -c "$<" $(CFLAGS) -o 090 $(CC) "-I$(PWD)" -c "$<" $(CFLAGS) -o "$@"
091 091
092 092
093 %.o: %.S 093 %.o: %.S
094 $(CC) "-I$(PWD)" -c "$<" $(CFLAGS) -DA 094 $(CC) "-I$(PWD)" -c "$<" $(CFLAGS) -DASM_SOURCE=1 -o "$@"
095 095
096 096
097 clean: 097 clean:
098 $(RM) *.o *.a *~ $(PROGS) *.kimg *.str 098 $(RM) *.o *.a *~ $(PROGS) *.kimg *.strip
099 $(RM) .userprog* 099 $(RM) .userprog*