4 # Makefile for Open Hack'Ware.
6 # Copyright (C) 2004-2005 Jocelyn Mayer (l_indien@magic.fr)
8 # This program is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU General Public License V2
10 # as published by the Free Software Foundation
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 CROSS_COMPILE?
=powerpc-linux-
25 CC
:= $(CROSS_COMPILE
)gcc
-m32
26 LD
:= $(CROSS_COMPILE
)ld -m elf32ppc
27 OBJCOPY
:= $(CROSS_COMPILE
)objcopy
33 ifeq ("$(DEBUG)", "1")
39 BUILD_DATE
:= $(shell date
-u
+%F
)
40 BUILD_TIME
:= $(shell date
-u
+%T
)
46 CC_BASE
:= $(shell $(CC
) -print-search-dirs | grep
install | sed
-e
's/.*\ //')
47 CFLAGS
= -Wall
-W
-Werror
-O2
-g
-fno-builtin
-fno-common
-nostdinc
-mregnames
48 CFLAGS
+= -DBUILD_DATE
=$(BUILD_DATE
) -DBUILD_TIME
=$(BUILD_TIME
)
49 CFLAGS
+= -I
$(SRCDIR
)/ -I
$(SRCDIR
)/libc
/include -I
$(CC_BASE
)/include
50 CFLAGS
+= -I
$(SRCDIR
)/dev
-I
$(SRCDIR
)/dev
/block
-I
$(SRCDIR
)/dev
/char
51 CFLAGS
+= -I
$(SRCDIR
)/dev
/bus
52 LDFLAGS
= -O2
-g
-nostdlib
55 BIOS_IMAGE_SIZE
:= $(shell echo
$$(( 1 << $(BIOS_IMAGE_BITS
) )) )
57 BOOT_SIZE
:= 0x00000200
58 VECTORS_BASE
:= 0x00000000
59 VECTORS_SIZE
:= $(shell echo
$$(( 0x00004000 - $(BOOT_SIZE
) )) )
60 VECTORS_END
:= $(shell echo
$$(( $(VECTORS_BASE
) + $(VECTORS_SIZE
) )) )
61 BIOS_BASE
:= 0x05800000
62 BIOS_SIZE
:= $(shell echo
$$(( $(BIOS_IMAGE_SIZE
) - $(BOOT_SIZE
) - $(VECTORS_SIZE
) )) )
63 BIOS_END
:= $(shell echo
$$(( $(BIOS_BASE
) + $(BIOS_SIZE
) )) )
65 LOAD_IMAGE_BASE
:= 0x04000000
67 # boot.bin build options
68 boot.o_CFLAGS
:= -DBOOT_SIZE
=$(BOOT_SIZE
)
69 boot.o_CFLAGS
+= -DVECTORS_BASE
=$(VECTORS_BASE
) -DVECTORS_SIZE
=$(VECTORS_SIZE
)
70 boot.o_CFLAGS
+= -DBIOS_IMAGE_BITS
=$(BIOS_IMAGE_BITS
)
71 boot.out_LDFLAGS
+= -T
$(SRCDIR
)/boot.
ld
72 # vectors.bin build options
73 vectors.o_CFLAGS
:= -DBIOS_BASE
=$(BIOS_BASE
) -DBIOS_SIZE
=$(BIOS_SIZE
)
74 vectors.out_LDFLAGS
+= -T
$(SRCDIR
)/vectors.
ld
75 vectors.bin_OPTIONS
:= --pad-to
$(VECTORS_END
)
76 # main.bin build options
77 main.o_CFLAGS
:= -DLOAD_IMAGE_BASE
=$(LOAD_IMAGE_BASE
)
78 main.out_LDFLAGS
:= -T
$(SRCDIR
)/main.
ld
79 main.out_OBJS
:= main.o bootinfos.o bloc.o pci.o of.o start.o nvram.o vga.o mm.o char.o
80 main.out_OBJS
:= $(addprefix $(OBJDIR
)/, $(main.out_OBJS
))
82 FORMAT_FUNCS
:= _vprintf printf sprintf snprintf vprintf vsprintf vsnprintf
83 FORMAT_FUNCS
+= dprintf vdprintf
84 MEM_FUNCS
:= memcpy memccpy mempcpy memmove memcmove mempmove
85 MEM_FUNCS
+= memset memcmp memchr rawmemchr memrchr memmem
86 STR_FUNCS
:= strcpy strdup strndup stpcpy stpncpy strcat strncat
87 STR_FUNCS
+= strcmp strcasecmp strncmp strncasecmp strchr strchrnul strrchr
88 STR_FUNCS
+= basename dirname
89 STR_FUNCS
+= strlen strnlen
90 MODULES
:= format mem str
91 format_OBJS
:=$(addsuffix .o
, $(FORMAT_FUNCS
))
92 mem_OBJS
:=$(addsuffix .o
, $(MEM_FUNCS
))
93 str_OBJS
:=$(addsuffix .o
, $(STR_FUNCS
))
94 pseudo_libc_OBJS
:= malloc.o errno.o
$(format_OBJS
) $(mem_OBJS
) $(str_OBJS
)
95 #pseudo_libc_OBJS:= errno.o $(format_OBJS) $(mem_OBJS) $(str_OBJS)
96 main.out_OBJS
+= $(addprefix $(OBJDIR
)/, $(pseudo_libc_OBJS
))
98 libexec_OBJS
:= core.o elf.o xcoff.o macho.o chrp.o prep.o pef.o
99 main.out_OBJS
+= $(addprefix $(OBJDIR
)/exec_
, $(libexec_OBJS
))
101 libfs_OBJS
:= core.o raw.o ext2.o isofs.o hfs.o
102 main.out_OBJS
+= $(addprefix $(OBJDIR
)/fs_
, $(libfs_OBJS
))
104 libpart_OBJS
:= core.o apple.o isofs.o prep.o
105 main.out_OBJS
+= $(addprefix $(OBJDIR
)/part_
, $(libpart_OBJS
))
106 # char devices drivers
107 chardev_OBJS
:= pckbd.o kbdadb.o kbd.o
108 # bloc devices drivers
111 dev_OBJS
:= $(addprefix bloc_
, $(blocdev_OBJS
))
112 dev_OBJS
+= $(addprefix char_
, $(chardev_OBJS
))
113 main.out_OBJS
+= $(addprefix $(OBJDIR
)/dev_
, $(dev_OBJS
))
116 CFLAGS
+= $($(CUR
)_CFLAGS
)
117 LDFLAGS
+= $($(CUR
)_LDFLAGS
)
119 BIN_TARGETS
:= $(OBJDIR
)/vectors.bin
$(OBJDIR
)/main.bin
$(OBJDIR
)/boot.bin
121 main.bin_OPTIONS
:= --gap-fill
0xFF --pad-to
$(BIOS_END
)
123 CURDIR
:= $(shell basename `pwd`)
124 SOURCES
:= boot.S vectors.S start.S main.c of.c
125 SOURCES
+= vga.c vgafont.h bootinfos.c nvram.c file.c fs.c part.c bloc.c pci.c bios.h
126 LD_SCRIPTS
:= boot.
ld vectors.
ld main.
ld
127 MISC_FILES
:= Makefile COPYING README Changelog Timestamp
128 SVN_DIRS
:= $(shell find .
-type d
-name .svn
)
129 TARBALL
:= OpenHackWare.
tar.bz2
130 TARFILES
:= $(addprefix $(SRCDIR
)/, $(SOURCES
) $(LD_SCRIPTS
)) $(MISC_FILES
)
131 SVN_TARBALL
:= OpenHackWare_svn.
tar.bz2
132 DISTFILE
:= OpenHackWare_bin.
tar.bz2
135 all: $(OBJDIR
) $(DISTDIR
) $(addprefix $(DISTDIR
)/, $(TARGET
))
137 dist: all $(CURDIR
)/Timestamp
138 cd
$(DISTDIR
) && $(TAR
) -cjf
$(DISTFILE
) $(DISTDIR
)/$(TARGET
) Timestamp
141 @
$(DEBUG
) "BOOT_SIZE = $(BOOT_SIZE)"
142 @
$(DEBUG
) "VECTORS_BASE = $(VECTORS_BASE)"
143 @
$(DEBUG
) "VECTORS_SIZE = $(VECTORS_SIZE)"
144 @
$(DEBUG
) "VECTORS_END = $(VECTORS_END)"
145 @
$(DEBUG
) "BIOS_BASE = $(BIOS_BASE)"
146 @
$(DEBUG
) "BIOS_SIZE = $(BIOS_SIZE)"
147 @
$(DEBUG
) "BIOS_END = $(BIOS_END)"
149 $(OBJDIR
) $(DISTDIR
):
152 $(DISTDIR
)/$(TARGET
): $(BIN_TARGETS
)
155 $(OBJDIR
)/%.bin
: $(OBJDIR
)/%.out
156 $(OBJCOPY
) -O binary
$($(notdir $@
)_OPTIONS
) $< $@
158 $(OBJDIR
)/%.out
: $(OBJDIR
)/%.o
$(SRCDIR
)/%.
ld
159 $(LD
) $(LDFLAGS
) -o
$@
$<
161 $(OBJDIR
)/main.out
: $(main.out_OBJS
) $(SRCDIR
)/main.
ld
162 $(LD
) $(LDFLAGS
) -o
$@
$(main.out_OBJS
)
164 $(OBJDIR
)/%.o
: $(SRCDIR
)/%.c
$(SRCDIR
)/bios.h
165 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
166 $(CC
) -c
$(CFLAGS
) -o
$@
$<
168 $(OBJDIR
)/%.o
: $(SRCDIR
)/%.S
$(SRCDIR
)/bios.h
169 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
170 $(CC
) -c
$(CFLAGS
) -Wa
,-mregnames
-o
$@
$<
172 $(CC
) $(CFLAGS
) -D__USE_
$(subst .o
,,$(@F
))__
-c
-o
$@
$<
174 # Pseudo libc objects
175 $(OBJDIR
)/%.o
: $(SRCDIR
)/libc
/src
/%.c
176 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
177 $(CC
) -c
$(CFLAGS
) -o
$@
$<
179 $(OBJDIR
)/mem
%.o
: $(SRCDIR
)/libc
/src
/mem.c
180 $(CC
) $(CFLAGS
) -D__USE_
$(subst .o
,,$(@F
))__
-c
-o
$@
$<
182 $(OBJDIR
)/rawmemchr.o
: $(SRCDIR
)/libc
/src
/mem.c
183 $(CC
) $(CFLAGS
) -D__USE_
$(subst .o
,,$(@F
))__
-c
-o
$@
$<
185 $(OBJDIR
)/str
%.o
: $(SRCDIR
)/libc
/src
/str.c
186 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
187 $(CC
) $(CFLAGS
) -D__USE_
$(subst .o
,,$(@F
))__
-c
-o
$@
$<
189 $(OBJDIR
)/stp
%.o
: $(SRCDIR
)/libc
/src
/str.c
190 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
191 $(CC
) $(CFLAGS
) -D__USE_
$(subst .o
,,$(@F
))__
-c
-o
$@
$<
193 $(OBJDIR
)/basename.o
: $(SRCDIR
)/libc
/src
/str.c
194 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
195 $(CC
) $(CFLAGS
) -D__USE_
$(subst .o
,,$(@F
))__
-c
-o
$@
$<
197 $(OBJDIR
)/dirname.o
: $(SRCDIR
)/libc
/src
/str.c
198 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
199 $(CC
) $(CFLAGS
) -D__USE_
$(subst .o
,,$(@F
))__
-c
-o
$@
$<
201 $(OBJDIR
)/%rintf.o
: $(SRCDIR
)/libc
/src
/format.c
202 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
203 $(CC
) $(CFLAGS
) -D__USE_
$(subst .o
,,$(@F
))__
-c
-o
$@
$<
206 $(OBJDIR
)/exec_
%.o
: $(SRCDIR
)/libexec
/%.c
207 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
208 $(CC
) -c
$(CFLAGS
) -o
$@
$<
211 $(OBJDIR
)/fs_
%.o
: $(SRCDIR
)/libfs
/%.c
212 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
213 $(CC
) -c
$(CFLAGS
) -o
$@
$<
216 $(OBJDIR
)/part_
%.o
: $(SRCDIR
)/libpart
/%.c
217 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
218 $(CC
) -c
$(CFLAGS
) -o
$@
$<
221 $(OBJDIR
)/dev_
%.o
: $(SRCDIR
)/dev
/%.c
222 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
223 $(CC
) -c
$(CFLAGS
) -o
$@
$<
224 # Char devices drivers
225 $(OBJDIR
)/dev_char_
%.o
: $(SRCDIR
)/dev
/char
/%.c
226 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
227 $(CC
) -c
$(CFLAGS
) -o
$@
$<
228 # Bloc devices drivers
229 $(OBJDIR
)/dev_bloc_
%.o
: $(SRCDIR
)/dev
/bloc
/%.c
230 @
$(DEBUG
) "CFLAGS = $(CFLAGS)"
231 $(CC
) -c
$(CFLAGS
) -o
$@
$<
234 tarball
: $(CURDIR
)/Timestamp
235 cd ..
&& $(TAR
) -cjf
$(CURDIR
)/$(TARBALL
) \
236 $(addprefix $(CURDIR
)/, $(TARFILES
))
238 svntarball
: $(CURDIR
)/Timestamp
239 cd ..
&& $(TAR
) -cjf
$(CURDIR
)/$(SVN_TARBALL
) \
240 $(addprefix $(CURDIR
)/, $(TARFILES
) $(SVN_DIRS
))
242 $(CURDIR
)/Timestamp
: force
243 @cd ..
&& echo
"$(BUILD_DATE) at $(BUILD_TIME)" > $@
246 $(RM
) $(OBJDIR
) $(addprefix $(DISTDIR
)/, $(TARGETS
))
247 $(RM
) $(DISTFILE
) $(CURDIR
)/$(TARBALL
)
250 $(RM
) *~ src
/*~ .
*~ src
/.
*~
252 # Keep all intermediary files
253 .PRECIOUS
: $(OBJDIR
)/%.o
$(OBJDIR
)/%.out
255 .PHONY
: all dist print tarball
clean cleansrc