Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Projekt: OS-Development  ::  Compilieren/Linken von PrettyOS  
Gehen Sie zu Seite 1, 2, 3, 4, 5  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:15:31 08.11.2009   Titel:              Zitieren

Damit man es unter MS Windows möglichst "bequem" hat, haben wir in den einzelnen Unterverzeichnissen BUILD.bat erstellt und zusätzlich eine übergeordnete Batch-Datei BUILD_ALL_WITH_FLOPPY.bat mit folgendem Inhalt:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    cls
    @echo off
   
    cd _stage1_bootloader
    call BUILD.bat
    cd ..

    cd _stage2_bootloader
    call BUILD.bat
    cd ..

    cd user\user_program_c
    call BUILD.bat
    copy program.elf ..\init_rd_img\program.elf
    cd ..
   
    cd init_rd_img
    call BUILD.bat
    copy initrd.dat ..\..\kernel\initrd.dat
   
    cd ..\..\kernel
    call BUILD.bat
    cd ..
   
    pause
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
cls
@echo off

cd _stage1_bootloader
call BUILD.bat
cd ..

cd _stage2_bootloader
call BUILD.bat
cd ..

cd user\user_program_c
call BUILD.bat
copy program.elf ..\init_rd_img\program.elf
cd ..

cd init_rd_img
call BUILD.bat
copy initrd.dat ..\..\kernel\initrd.dat

cd ..\..\kernel
call BUILD.bat
cd ..

pause
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    cls
    @echo off
   
    cd _stage1_bootloader
    call BUILD.bat
    cd ..

    cd _stage2_bootloader
    call BUILD.bat
    cd ..

    cd user\user_program_c
    call BUILD.bat
    copy program.elf ..\init_rd_img\program.elf
    cd ..
   
    cd init_rd_img
    call BUILD.bat
    copy initrd.dat ..\..\kernel\initrd.dat
   
    cd ..\..\kernel
    call BUILD.bat
    cd ..
   
    pause


Wir haben bewusst Batch-Dateien zur Steuerung des übergeordneten Build-Prozesses auf MS Windows als Hostsystem gewählt und den Namen Windows_makefile (mingw32-make --makefile=Windows_makefile) in den Verzeichnissen verwendet. Damit bleibt der gewohnt reservierte Dateiname 'makefile' für Linux reserviert.

abc.w hat für Linux bereits einen Vorschlag für die makefiles entwickelt:
http://www.c-plusplus.de/forum/viewtopic-var-t-is-252274.html

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:27:42 08.11.2009   Titel:              Zitieren

Cuervo hat im IRC folgenden Vorschlag für ein BASIC-Programm entwickelt:
(siehe unten)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 10:08:06 16.11.2009, insgesamt 2-mal bearbeitet
Schablone
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.05.2009
Beiträge: 25
Beitrag Schablone Mitglied 17:47:53 08.11.2009   Titel:              Zitieren

Hi,

warum sind im SVN .exe-Dateien? Das ist ja erstens für die Quelltext-Verwaltung, zweitens bringen die unter Linux nichts, drittens hast du dich eben im IRC selbst dagegen gesträubt eine fremde .exe-Datei auszuführen, und viertens schafft das eine uneinheitliche Umgebung, und deswegen musst du überhaupt erst verschiedene Umgebungen für Linux/Windows (und da sogar nochmal Untervarianten, wie man hier sieht, und Mischumgebungen Batch/Makefile) verwalten. Und dann soll das ganze noch jemand verstehen?

_________________
Für mehr Kühlschränke!
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 17:52:23 08.11.2009   Titel:              Zitieren

Zitat:
drittens hast du dich eben im IRC selbst dagegen gesträubt eine fremde .exe-Datei auszuführen
Ja, das ist richtig und ein gewichtiges Argument.

Wir können das gerne ändern, aber Einsteiger müssen wissen, woher sie das richtige Tool erhalten. Das ist nicht trivial.

Bisher muss man eine direkte Floppy-Anbindung haben und ...
a)Cross-Tools installieren / Pfade einrichten (Cuervo hat dazu eine Anleitung geschrieben)
b)SVN-tarball downloaden
c)auf BUILD_ALL_WITH_FLOPPY.bat doppelklicken

That's it. :)

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm


Zuletzt bearbeitet von Erhard Henkes am 17:55:42 08.11.2009, insgesamt 2-mal bearbeitet
Schablone
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.05.2009
Beiträge: 25
Beitrag Schablone Mitglied 17:56:07 08.11.2009   Titel:              Zitieren

Konkreter Vorschlag:

Makefile ins Wurzelverzeichnis. Inhalt wäre sowas:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
all: image

# erstellt ein image
image: boot1 boot2 kernel programs
    # image erstellen/zusammenkopieren mit dd etc

boot1: _stage1_bootloader/boot.bin (+korrekte abhängigkeiten ggf. in weiteren regeln)

boot2: _stage2_bootloader/boot.bin (+korrekte abhängigkeiten ggf. in weiteren regeln)

kernel: kernel.bin (+korrekte abhängigkeiten in weiteren regeln)

programs: ähnlich wie kernel

# weitere regeln für asm -> o, c -> o und natürlich die binärdateien
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
all: image

# erstellt ein image
image: boot1 boot2 kernel programs
# image erstellen/zusammenkopieren mit dd etc

boot1: _stage1_bootloader/boot.bin (+korrekte abhängigkeiten ggf. in weiteren regeln)

boot2: _stage2_bootloader/boot.bin (+korrekte abhängigkeiten ggf. in weiteren regeln)

kernel: kernel.bin (+korrekte abhängigkeiten in weiteren regeln)

programs: ähnlich wie kernel

# weitere regeln für asm -> o, c -> o und natürlich die binärdateien
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
all: image

# erstellt ein image
image: boot1 boot2 kernel programs
    # image erstellen/zusammenkopieren mit dd etc

boot1: _stage1_bootloader/boot.bin (+korrekte abhängigkeiten ggf. in weiteren regeln)

boot2: _stage2_bootloader/boot.bin (+korrekte abhängigkeiten ggf. in weiteren regeln)

kernel: kernel.bin (+korrekte abhängigkeiten in weiteren regeln)

programs: ähnlich wie kernel

# weitere regeln für asm -> o, c -> o und natürlich die binärdateien


Vorteile:
* funktioniert unter Windows und Linux ohne Anpassungen (außer vielleicht eine Variable weil der Compiler mal gcc und mal i586-elf-gcc heißt)
* einheitlich für alle Komponenten (bootloader, programme, shell) -> erweiterbar
* es werden nur die notwendigen Dateien gebaut
* unabhängig von shell/cmd
* aus den letzten beiden Punkten folgt: schnell

_________________
Für mehr Kühlschränke!


Zuletzt bearbeitet von Schablone am 17:56:59 08.11.2009, insgesamt 1-mal bearbeitet
Tobiking2
Mitglied

Benutzerprofil
Anmeldungsdatum: 12.04.2009
Beiträge: 705
Beitrag Tobiking2 Mitglied 17:59:25 08.11.2009   Titel:              Zitieren

Wie im IRC gerade erwähnt finde ich diese Batch Datei, die in jeden Unterordner geht und dort Batchdateien aufruft, unschön und überflüssig. Immerhin kann make das auch und wir brauchen für Linux eh ein Makefile das genau das gleiche tut. Im jetztigen Standpunkt müsste man bei Änderungen das Makefile und die Batchdateien anpassen.

Daher wäre mein Vorschlag am anfang 2 Makefiles zu erstellen, eine für Linux und eine für Windows. In diesen Makefiles werden nur Variablen gesetzt, unter anderem sämtliche Befehle wie Compileraufrufe, Kopierbefehle etc.

Danach können beide Makefiles ein Makefile aufrufen oder includieren das nicht mehr Betriebsystemspezifisch ist. Dieses Makefile kann dann in die Unterordner gehen und dort wiederrum Makefiles aufrufen. Wenn sich nun etwas ändert braucht man nur noch die Betriebsystemunabhängigen Makefiles abändern.
Cuervo
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.10.2009
Beiträge: 112
Beitrag Cuervo Mitglied 19:28:59 08.11.2009   Titel:              Zitieren

Diesers Programm funktioniert mit den aktuellen PrettyOS Versionen nicht mehr, es war nur ale Test gedacht und ist hiermit als "obsolete" und unbrauchbar markiert.

Cuervo schrieb:
So, ich stelle nochmal den aktuellen Code und eine EXE-Datei rein, Code ist in BlitzPlus geschrieben (http://www.blitzbasic.com).
Programm läuft auf EIGENE GEFAHR.

Download: LINK ENTFERNT
Dieses Archiv bitte in den Source Ordner exrtrahieren, so dass die build.exe darin liegt.

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Global win
AppTitle "Compiler"
win=CreateWindow("Kompilieren...",100,100,640,480,0,1+32)
Global e,es,ed
Global tarea=CreateTextArea(10,10,620,460,win)
SetTextAreaColor tarea,0,0,0,1
SetTextAreaColor tarea,0,255,0,0
Global font=LoadFont("Arial",30)
SetTextAreaFont tarea,font

Global d$=CurrentDir()

ChangeDir "_stage1_bootloader"
RunCommand "Build.bat"
ChangeDir d$
ChangeDir "_stage2_bootloader"
RunCommand "Build.bat"
ChangeDir d$
ChangeDir "user"
ChangeDir "user_program_c"
CopyFile d$+"_nasm\nasmw.exe","nasmw.exe"
RunCommand d$+"_mingw32-make\mingw32-make.exe --makefile=Windows_makefile"
ChangeDir d$+"user"
CopyFile "user_program_c\program.elf","init_rd_img\program.elf"
ChangeDir "init_rd_img"
RunCommand d$+"_mingw32-make\mingw32-make.exe --makefile=Windows_makefile"
ChangeDir d$
ChangeDir "kernel"
RunCommand d$+"_mingw32-make\mingw32-make.exe --makefile=Windows_makefile"
ChangeDir d$

Notify "BUILDVORGANG ABGESCHLOSSEN!",1
AddTextAreaText tarea,Chr(13)+Chr(10)+Chr(13)+Chr(10)+"FERTIG!!!"
Repeat
    e=WaitEvent()
    If e=$803 Then
        Exit
    EndIf
    es=EventSource()
    ed=EventData()
   
Forever



FreeGadget win
End

Function RunCommand(s$)
    Local p=CreateProcess(s$)
    If p=0 Then
        AddTextAreaText tarea,"BEFEHL "+s$+" nicht gefunden!"+Chr(13)+Chr(10)
        Return 0
    EndIf
   
    While Not Eof(p)
        AddTextAreaText tarea,ReadLine(p)+Chr(13)+Chr(10)
        WaitEvent(1)
    Wend
   
   
End Function
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Global win
AppTitle "Compiler"
win=CreateWindow("Kompilieren...",100,100,640,480,0,1+32)
Global e,es,ed
Global tarea=CreateTextArea(10,10,620,460,win)
SetTextAreaColor tarea,0,0,0,1
SetTextAreaColor tarea,0,255,0,0
Global font=LoadFont("Arial",30)
SetTextAreaFont tarea,font

Global d$=CurrentDir()

ChangeDir "_stage1_bootloader"
RunCommand "Build.bat"
ChangeDir d$
ChangeDir "_stage2_bootloader"
RunCommand "Build.bat"
ChangeDir d$
ChangeDir "user"
ChangeDir "user_program_c"
CopyFile d$+"_nasm\nasmw.exe","nasmw.exe"
RunCommand d$+"_mingw32-make\mingw32-make.exe --makefile=Windows_makefile"
ChangeDir d$+"user"
CopyFile "user_program_c\program.elf","init_rd_img\program.elf"
ChangeDir "init_rd_img"
RunCommand d$+"_mingw32-make\mingw32-make.exe --makefile=Windows_makefile"
ChangeDir d$
ChangeDir "kernel"
RunCommand d$+"_mingw32-make\mingw32-make.exe --makefile=Windows_makefile"
ChangeDir d$

Notify "BUILDVORGANG ABGESCHLOSSEN!",1
AddTextAreaText tarea,Chr(13)+Chr(10)+Chr(13)+Chr(10)+"FERTIG!!!"
Repeat
e=WaitEvent()
If e=$803 Then
Exit
EndIf
es=EventSource()
ed=EventData()

Forever



FreeGadget win
End

Function RunCommand(s$)
Local p=CreateProcess(s$)
If p=0 Then
AddTextAreaText tarea,"BEFEHL "+s$+" nicht gefunden!"+Chr(13)+Chr(10)
Return 0
EndIf

While Not Eof(p)
AddTextAreaText tarea,ReadLine(p)+Chr(13)+Chr(10)
WaitEvent(1)
Wend


End Function
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Global win
AppTitle "Compiler"
win=CreateWindow("Kompilieren...",100,100,640,480,0,1+32)
Global e,es,ed
Global tarea=CreateTextArea(10,10,620,460,win)
SetTextAreaColor tarea,0,0,0,1
SetTextAreaColor tarea,0,255,0,0
Global font=LoadFont("Arial",30)
SetTextAreaFont tarea,font

Global d$=CurrentDir()

ChangeDir "_stage1_bootloader"
RunCommand "Build.bat"
ChangeDir d$
ChangeDir "_stage2_bootloader"
RunCommand "Build.bat"
ChangeDir d$
ChangeDir "user"
ChangeDir "user_program_c"
CopyFile d$+"_nasm\nasmw.exe","nasmw.exe"
RunCommand d$+"_mingw32-make\mingw32-make.exe --makefile=Windows_makefile"
ChangeDir d$+"user"
CopyFile "user_program_c\program.elf","init_rd_img\program.elf"
ChangeDir "init_rd_img"
RunCommand d$+"_mingw32-make\mingw32-make.exe --makefile=Windows_makefile"
ChangeDir d$
ChangeDir "kernel"
RunCommand d$+"_mingw32-make\mingw32-make.exe --makefile=Windows_makefile"
ChangeDir d$

Notify "BUILDVORGANG ABGESCHLOSSEN!",1
AddTextAreaText tarea,Chr(13)+Chr(10)+Chr(13)+Chr(10)+"FERTIG!!!"
Repeat
    e=WaitEvent()
    If e=$803 Then
        Exit
    EndIf
    es=EventSource()
    ed=EventData()
   
Forever



FreeGadget win
End

Function RunCommand(s$)
    Local p=CreateProcess(s$)
    If p=0 Then
        AddTextAreaText tarea,"BEFEHL "+s$+" nicht gefunden!"+Chr(13)+Chr(10)
        Return 0
    EndIf
   
    While Not Eof(p)
        AddTextAreaText tarea,ReadLine(p)+Chr(13)+Chr(10)
        WaitEvent(1)
    Wend
   
   
End Function


Zuletzt bearbeitet von Cuervo am 14:25:39 21.02.2010, insgesamt 1-mal bearbeitet
Erhard Henkes
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.04.2000
Beiträge: 11924
Beitrag Erhard Henkes Mitglied 10:09:34 16.11.2009   Titel:              Zitieren

Badestrand hat in der neuesten Version (auf SVN) einen FloppyImage-Generator, in C++ geschrieben, mitgeliefert.

_________________
OS-Development-, C++, Win32-API-, MFC-, Chemie-, Robotik- und Flugsimulator-Tutorials
http://www.henkessoft.de/index.htm
DerHartmut
Mitglied

Benutzerprofil
Anmeldungsdatum: 13.10.2009
Beiträge: 27
Beitrag DerHartmut Mitglied 03:07:26 23.11.2009   Titel:              Zitieren

Nach einer nächtlichen Diskussion in #PrettyOS habe ich da mal eine Idee für euch und euer (im Moment ziemlich verhunztes ;-)) Buildsystem:

- Schreibt euch ein kleines Script in Perl oder Python, welches prüft, auf welchem OS gebaut wird und ob etwaige weitere Konfigurationen vorhanden sind (Floppy etc.). Dann könnt ihr die Makefiles entsprechend durch das Script auf das jeweilige System abändern. Ihr könnt zwar auch alles in Makefiles packen falls das geht, aber so ein Script ist im Endeffekt sauberer.

_________________
http://lowlevel.brainsware.org - Die OS-Community für jedermann!
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 18:04:37 13.12.2009   Titel:              Zitieren

Hab herumgespielt, bitte mal testen!
Globales Makefile sieht so aus:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
STAGE1DIR= stage1_bootloader
STAGE2DIR= stage2_bootloader
KERNELDIR= kernel
USERRDDIR= user/init_rd_img
USERDIR= user/user_program_c

ifeq ($(OS),WINDOWS)
    NASM= nasmw
    CC= i586-elf-gcc
    LD= i586-elf-ld
    #NASM= tools/nasmw
    #CC= tools/i586-elf/bin/i586-elf-gcc
    #LD= tools/i586-elf/bin/i586-elf-ld
else
    NASM=nasm
    CC=gcc
    LD=ld
endif


all: boot1 boot2 ckernel

boot1: $(wildcard $(STAGE1DIR)/*.asm $(STAGE1DIR)/*.inc)
    $(NASM) -f bin $(STAGE1DIR)/boot.asm -I$(STAGE1DIR)/ -o $(STAGE1DIR)/boot.bin

boot2: $(wildcard $(STAGE2DIR)/*.asm $(STAGE2DIR)/*.inc)
    $(NASM) -f bin $(STAGE2DIR)/boot2.asm -I$(STAGE2DIR)/ -o $(STAGE1DIR)/boot2.bin

ckernel: $(wildcard $(KERNELDIR)/* $(KERNELDIR)/include/*) initrd
    rm *.o -f
    $(CC) $(KERNELDIR)/*.c -c -I$(KERNELDIR)/include -std=c99 -march=i386 -mtune=i386 -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin -fno-stack-protector -Iinclude
    $(NASM) -O32 -f elf $(KERNELDIR)/data.asm -I$(KERNELDIR)/ -o data.o
    $(NASM) -O32 -f elf $(KERNELDIR)/flush.asm -I$(KERNELDIR)/ -o flush.o
    $(NASM) -O32 -f elf $(KERNELDIR)/interrupts.asm -I$(KERNELDIR)/ -o interrupts.o
    $(NASM) -O32 -f elf $(KERNELDIR)/kernel.asm -I$(KERNELDIR)/ -o kernel.o
    $(NASM) -O32 -f elf $(KERNELDIR)/process.asm -I$(KERNELDIR)/ -o process.o
    $(LD) *.o -T $(KERNELDIR)/kernel.ld -Map $(KERNELDIR)/kernel.map -nostdinc -o $(KERNELDIR)/kernel.bin
    rm *.o -f
    tools/CreateFloppyImage2 PrettyOS FloppyImage.bin $(STAGE1DIR)/boot.bin $(STAGE2DIR)/boot2.bin $(KERNELDIR)/kernel.bin

initrd: $(wildcard $(USERDIR)/*)
    rm *.o -f
    $(CC) $(USERDIR)/*.c -c -I$(USERDIR) -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin
    $(LD) *.o -T $(USERDIR)/user.ld -Map $(USERDIR)/kernel.map -nostdinc -o $(USERDIR)/program.elf
    rm *.o -f
    tools/make_initrd $(USERRDDIR)/test1.txt file1 $(USERRDDIR)/test2.txt file2 $(USERRDDIR)/test3.txt file3 $(USERDIR)/program.elf shell
    mv initrd.dat $(KERNELDIR)/initrd.dat
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
STAGE1DIR= stage1_bootloader
STAGE2DIR= stage2_bootloader
KERNELDIR= kernel
USERRDDIR= user/init_rd_img
USERDIR= user/user_program_c

ifeq ($(OS),WINDOWS)
NASM= nasmw
CC= i586-elf-gcc
LD= i586-elf-ld
#NASM= tools/nasmw
#CC= tools/i586-elf/bin/i586-elf-gcc
#LD= tools/i586-elf/bin/i586-elf-ld
else
NASM=nasm
CC=gcc
LD=ld
endif


all: boot1 boot2 ckernel

boot1: $(wildcard $(STAGE1DIR)/*.asm $(STAGE1DIR)/*.inc)
$(NASM) -f bin $(STAGE1DIR)/boot.asm -I$(STAGE1DIR)/ -o $(STAGE1DIR)/boot.bin

boot2: $(wildcard $(STAGE2DIR)/*.asm $(STAGE2DIR)/*.inc)
$(NASM) -f bin $(STAGE2DIR)/boot2.asm -I$(STAGE2DIR)/ -o $(STAGE1DIR)/boot2.bin

ckernel: $(wildcard $(KERNELDIR)/* $(KERNELDIR)/include/*) initrd
rm *.o -f
$(CC) $(KERNELDIR)/*.c -c -I$(KERNELDIR)/include -std=c99 -march=i386 -mtune=i386 -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin -fno-stack-protector -Iinclude
$(NASM) -O32 -f elf $(KERNELDIR)/data.asm -I$(KERNELDIR)/ -o data.o
$(NASM) -O32 -f elf $(KERNELDIR)/flush.asm -I$(KERNELDIR)/ -o flush.o
$(NASM) -O32 -f elf $(KERNELDIR)/interrupts.asm -I$(KERNELDIR)/ -o interrupts.o
$(NASM) -O32 -f elf $(KERNELDIR)/kernel.asm -I$(KERNELDIR)/ -o kernel.o
$(NASM) -O32 -f elf $(KERNELDIR)/process.asm -I$(KERNELDIR)/ -o process.o
$(LD) *.o -T $(KERNELDIR)/kernel.ld -Map $(KERNELDIR)/kernel.map -nostdinc -o $(KERNELDIR)/kernel.bin
rm *.o -f
tools/CreateFloppyImage2 PrettyOS FloppyImage.bin $(STAGE1DIR)/boot.bin $(STAGE2DIR)/boot2.bin $(KERNELDIR)/kernel.bin

initrd: $(wildcard $(USERDIR)/*)
rm *.o -f
$(CC) $(USERDIR)/*.c -c -I$(USERDIR) -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin
$(LD) *.o -T $(USERDIR)/user.ld -Map $(USERDIR)/kernel.map -nostdinc -o $(USERDIR)/program.elf
rm *.o -f
tools/make_initrd $(USERRDDIR)/test1.txt file1 $(USERRDDIR)/test2.txt file2 $(USERRDDIR)/test3.txt file3 $(USERDIR)/program.elf shell
mv initrd.dat $(KERNELDIR)/initrd.dat
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
STAGE1DIR= stage1_bootloader
STAGE2DIR= stage2_bootloader
KERNELDIR= kernel
USERRDDIR= user/init_rd_img
USERDIR= user/user_program_c

ifeq ($(OS),WINDOWS)
    NASM= nasmw
    CC= i586-elf-gcc
    LD= i586-elf-ld
    #NASM= tools/nasmw
    #CC= tools/i586-elf/bin/i586-elf-gcc
    #LD= tools/i586-elf/bin/i586-elf-ld
else
    NASM=nasm
    CC=gcc
    LD=ld
endif


all: boot1 boot2 ckernel

boot1: $(wildcard $(STAGE1DIR)/*.asm $(STAGE1DIR)/*.inc)
    $(NASM) -f bin $(STAGE1DIR)/boot.asm -I$(STAGE1DIR)/ -o $(STAGE1DIR)/boot.bin

boot2: $(wildcard $(STAGE2DIR)/*.asm $(STAGE2DIR)/*.inc)
    $(NASM) -f bin $(STAGE2DIR)/boot2.asm -I$(STAGE2DIR)/ -o $(STAGE1DIR)/boot2.bin

ckernel: $(wildcard $(KERNELDIR)/* $(KERNELDIR)/include/*) initrd
    rm *.o -f
    $(CC) $(KERNELDIR)/*.c -c -I$(KERNELDIR)/include -std=c99 -march=i386 -mtune=i386 -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin -fno-stack-protector -Iinclude
    $(NASM) -O32 -f elf $(KERNELDIR)/data.asm -I$(KERNELDIR)/ -o data.o
    $(NASM) -O32 -f elf $(KERNELDIR)/flush.asm -I$(KERNELDIR)/ -o flush.o
    $(NASM) -O32 -f elf $(KERNELDIR)/interrupts.asm -I$(KERNELDIR)/ -o interrupts.o
    $(NASM) -O32 -f elf $(KERNELDIR)/kernel.asm -I$(KERNELDIR)/ -o kernel.o
    $(NASM) -O32 -f elf $(KERNELDIR)/process.asm -I$(KERNELDIR)/ -o process.o
    $(LD) *.o -T $(KERNELDIR)/kernel.ld -Map $(KERNELDIR)/kernel.map -nostdinc -o $(KERNELDIR)/kernel.bin
    rm *.o -f
    tools/CreateFloppyImage2 PrettyOS FloppyImage.bin $(STAGE1DIR)/boot.bin $(STAGE2DIR)/boot2.bin $(KERNELDIR)/kernel.bin

initrd: $(wildcard $(USERDIR)/*)
    rm *.o -f
    $(CC) $(USERDIR)/*.c -c -I$(USERDIR) -Werror -Wall -O -ffreestanding -fleading-underscore -nostdlib -nostdinc -fno-builtin
    $(LD) *.o -T $(USERDIR)/user.ld -Map $(USERDIR)/kernel.map -nostdinc -o $(USERDIR)/program.elf
    rm *.o -f
    tools/make_initrd $(USERRDDIR)/test1.txt file1 $(USERRDDIR)/test2.txt file2 $(USERRDDIR)/test3.txt file3 $(USERDIR)/program.elf shell
    mv initrd.dat $(KERNELDIR)/initrd.dat

Ist aber noch suboptimal. Schön wäre es, die ganzen .asm-Dateien des Kernel-Codes in einem Rutsch oder einer Schleife aufrufen zu können. Oder andere makefiles aufzurufen. Bin aber kein Experte, da muss mir jemand helfen.

Zugehörige Batch-Datei sieht so aus:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cls
tools\mingw32-make OS=WINDOWS

@echo off
:Loop
IF [%1]==[] GOTO Continue
    IF [%1]==[bochs] (
        cmd /c tools\bochs.bxrc
    )
    IF [%1]==[qemu] (
        echo "dummy.."
    )
    IF [%1]==[disc] (
        tools\dd if=stage1_bootloader/boot.bin of=\\.\A: bs=512 count=1 --progress
        copy stage2_bootloader\boot2.bin A:\boot2.bin
        copy kernel\kernel.bin A:\kernel.bin
    )
SHIFT
GOTO Loop
:Continue
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cls
tools\mingw32-make OS=WINDOWS

@echo off
:Loop
IF [%1]==[] GOTO Continue
IF [%1]==[bochs] (
cmd /c tools\bochs.bxrc
)
IF [%1]==[qemu] (
echo "dummy.."
)
IF [%1]==[disc] (
tools\dd if=stage1_bootloader/boot.bin of=\\.\A: bs=512 count=1 --progress
copy stage2_bootloader\boot2.bin A:\boot2.bin
copy kernel\kernel.bin A:\kernel.bin
)
SHIFT
GOTO Loop
:Continue
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cls
tools\mingw32-make OS=WINDOWS

@echo off
:Loop
IF [%1]==[] GOTO Continue
    IF [%1]==[bochs] (
        cmd /c tools\bochs.bxrc
    )
    IF [%1]==[qemu] (
        echo "dummy.."
    )
    IF [%1]==[disc] (
        tools\dd if=stage1_bootloader/boot.bin of=\\.\A: bs=512 count=1 --progress
        copy stage2_bootloader\boot2.bin A:\boot2.bin
        copy kernel\kernel.bin A:\kernel.bin
    )
SHIFT
GOTO Loop
:Continue

Kann mit einem oder mehreren Parametern aufgerufen werden:
- "bochs" startet Bochs mit dem Image
- "qemu" soll in Zukunft Qemu starten
- "disc" soll auf Diskette schreiben: Bitte mal testen, hab kein D-Laufwerk
C/C++ Forum :: Projekt: OS-Development  ::  Compilieren/Linken von PrettyOS  
Gehen Sie zu Seite 1, 2, 3, 4, 5  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.