I think I need your help. Today I cleaned up the mess in my kernel source directory, creating more subdirectories in which my source files are now categorized. For now, I have a subdirectory for:
"the core" (core)
memory management (mm)
and last but not least, windows.
Therefore, I made a makefile for each subdirectory, so that each subdirectory will deliver one object file.
All object files are linked together in the final step. Before I post the makefiles, I give you the errormessage I get
in the final linking phase:
Code: Select all
ld -Tc:\os\script\hailos.ls -Map kernel.map -s -output-format=coff-i386 -o kerne
l.img start.o main.o core/core.o mm/mm.o windows/win.o tail.o
mm/mm.o:buddysys.c:(.data+0x0): multiple definition of `_environ'
core/core.o:binmath.asm:(.data+0x0): first defined here
windows/win.o:user_io.c:(.data+0x0): multiple definition of `_environ'
core/core.o:binmath.asm:(.data+0x0): first defined here
make.exe: *** [kernel.img] Error 1
Main makefile:
Code: Select all
CC=gcc
AS=nasmw
CFLAGS=-Ic:\os\include -c -O2 -fomit-frame-pointer -Wall
AFLAGS=-f coff
LINKER_FILES = \
start.o \
main.o \
core/core.o \
mm/mm.o \
windows/win.o \
tail.o
kernel.img: $(LINKER_FILES)
ld -Tc:\os\script\hailos.ls -Map kernel.map -s -output-format=coff-i386 -o kernel.img $(LINKER_FILES)
start.o: start.asm
$(AS) $(AFLAGS) $^
main.o: main.c
$(CC) -o $@ $(CFLAGS) $^
tail.o: tail.asm
$(AS) $(AFLAGS) $^
core/core.o:
cd core; make; cd ..
mm/mm.o:
cd mm; make; cd ..
windows/win.o:
cd windows; make; cd ..
clean:
cd core; make clean
cd ..\mm; make clean
cd ..\windows; make clean
Code: Select all
CC=gcc
AS=nasmw
LD=ld
CFLAGS=-Ic:\os\include -c -O2 -fomit-frame-pointer -Wall
AFLAGS=-f coff
COMPILER_FILES = \
binmath.o \
console.o \
crt.o \
memlib.o \
strlib.o \
io.o \
exceptions.o \
context.o \
x86.o \
idt.o \
gdt.o \
cmos.o \
kbd.o \
cpu_ints.o \
hard_int.o \
proc.o \
pic.o \
pit.o \
irq.o \
dma.o \
sem.o \
time.o \
timer.o
core.o: $(COMPILER_FILES)
$(LD) -r -output-format=coff-i386 -o core.o $(COMPILER_FILES)
%.o : %.c
$(CC) $(CFLAGS) -c $< -o $@
%.o : %.asm
$(AS) $(AFLAGS) -o $@ $<
clean:
del *.o
Code: Select all
CC=gcc
AS=nasmw
LD=ld
CFLAGS=-Ic:\os\include -c -O2 -fomit-frame-pointer -Wall
AFLAGS=-f coff
COMPILER_FILES = \
buddysys.o \
paging.o \
kcache.o
mm.o: $(COMPILER_FILES)
$(LD) -r -output-format=coff-i386 -o mm.o $(COMPILER_FILES)
%.o : %.c
$(CC) $(CFLAGS) \
-c -o $*.o $<
%.o : %.asm
$(AS) $(AFLAGS) -o $*.o $<
clean:
del *.o
Code: Select all
CC=gcc
AS=nasmw
CFLAGS=-Ic:\os\include -c -O2 -fomit-frame-pointer -Wall
LD=ld
AFLAGS=-f coff
COMPILER_FILES = \
user_io.o \
window.o \
win_ll.o
win.o: $(COMPILER_FILES)
$(LD) -r -output-format=coff-i386 -o win.o $(COMPILER_FILES)
%.o : %.c
$(CC) $(CFLAGS) \
-c -o $*.o $<
%.o : %.asm
$(AS) $(AFLAGS) -o $*.o $<
clean:
del *.o
help is appreciated.
Greetz!