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 !! 034 myprog13 myprog14 banner fstest devtest shell
035 035
036 # Build dependencies of the programs 036 # Build dependencies of the programs
>> 037 init: fstest_utils.o
037 fstest: fstest_utils.o 038 fstest: fstest_utils.o
>> 039 devtest: fstest_utils.o
>> 040 shell: fstest_utils.o
038 $(PROGS) : % : %.o crt.o libc.a 041 $(PROGS) : % : %.o crt.o libc.a
039 042
040 PWD := $(shell pwd) !! 043 PWD := $(shell pwd | sed 's/"/\\\"/g;s/\$$/\\\$$/g')
041 044
042 045
043 $(PROGS): 046 $(PROGS):
044 $(CC) -static $(LDFLAGS) -o $@ $^ $(LI 047 $(CC) -static $(LDFLAGS) -o $@ $^ $(LIBGCC)
045 048
046 049
047 libc.a: libc.o string.o stdarg.o debug.o 050 libc.a: libc.o string.o stdarg.o debug.o
048 051
049 052
050 userprogs.kimg: $(PROGS) 053 userprogs.kimg: $(PROGS)
051 @echo "# Generating ELF images for inc 054 @echo "# Generating ELF images for inclusion into the kernel image: $@"
052 @echo "SECTIONS { .userprogs . : { " > 055 @echo "SECTIONS { .userprogs . : { " > .userprogs.lds
053 @i=0 ; 056 @i=0 ; \
054 for f in $^ ; do 057 for f in $^ ; do \
055 i=`expr $$i + 1` ; 058 i=`expr $$i + 1` ; \
056 echo "extern char _begin_userprog$$ 059 echo "extern char _begin_userprog$$i, _end_userprog$$i;" \
057 > .userprog$$i.c ; 060 > .userprog$$i.c ; \
058 echo "char *_userprog"$$i"_entry[]" 061 echo "char *_userprog"$$i"_entry[]" >> .userprog$$i.c ; \
059 echo " __attribute__((section(\".u 062 echo " __attribute__((section(\".userprogs_table\")))" \
060 >> .userprog$$i.c ; 063 >> .userprog$$i.c ; \
061 echo " = { \"$$f\", &_begin_userpr 064 echo " = { \"$$f\", &_begin_userprog$$i, &_end_userprog$$i };" \
062 >> .userprog$$i.c ; 065 >> .userprog$$i.c ; \
063 $(CC) $(CFLAGS) -c .userprog$$i.c - 066 $(CC) $(CFLAGS) -c .userprog$$i.c -o .userprog$$i.o ; \
064 $(CP) $$f $$f.strip && $(STRIP) -sx 067 $(CP) $$f $$f.strip && $(STRIP) -sx $$f.strip ; \
065 $(OBJCOPY) --add-section .userprog$ 068 $(OBJCOPY) --add-section .userprog$$i=$$f.strip .userprog$$i.o \
066 .userprog$$i.kimg ; 069 .userprog$$i.kimg ; \
067 echo " . = ALIGN(4096);" >> .userp 070 echo " . = ALIGN(4096);" >> .userprogs.lds ; \
068 echo " _begin_userprog$$i = .;" >> 071 echo " _begin_userprog$$i = .;" >> .userprogs.lds ; \
069 echo " .userprog$$i.kimg(.userprog 072 echo " .userprog$$i.kimg(.userprog$$i);" >> .userprogs.lds ; \
070 echo " _end_userprog$$i = .;" >> . 073 echo " _end_userprog$$i = .;" >> .userprogs.lds ; \
071 echo " .userprog$$i.kimg(.rodata); 074 echo " .userprog$$i.kimg(.rodata); .userprog$$i.kimg(.data);" \
072 >> .userprogs.lds ; 075 >> .userprogs.lds ; \
073 done 076 done
074 @echo " _userprogs_table = .; *(.user 077 @echo " _userprogs_table = .; *(.userprogs_table) ; LONG(0);" \
075 >> .userprogs.lds 078 >> .userprogs.lds
076 @echo "} /DISCARD/ : { *(.text) *(.dat 079 @echo "} /DISCARD/ : { *(.text) *(.data) *(.bss) } }" \
077 >> .userprogs.lds 080 >> .userprogs.lds
078 @$(LD) -r -o $@ -T.userprogs.lds 081 @$(LD) -r -o $@ -T.userprogs.lds
079 082
080 083
081 %.a: 084 %.a:
082 $(AR) rcv $@ $^ 085 $(AR) rcv $@ $^
083 086
084 087
085 %.o: %.c 088 %.o: %.c
086 $(CC) -I$(PWD) -c $< $(CFLAGS) -o $@ !! 089 $(CC) "-I$(PWD)" -c "$<" $(CFLAGS) -o "$@"
087 090
088 091
089 %.o: %.S 092 %.o: %.S
090 $(CC) -I$(PWD) -c $< $(CFLAGS) -DASM_S !! 093 $(CC) "-I$(PWD)" -c "$<" $(CFLAGS) -DASM_SOURCE=1 -o "$@"
091 094
092 095
093 clean: 096 clean:
094 $(RM) *.o *.a *~ $(PROGS) *.kimg *.str 097 $(RM) *.o *.a *~ $(PROGS) *.kimg *.strip
095 $(RM) .userprog* 098 $(RM) .userprog*