Explorar el Código

Build: clean up build system, use one shared Makefile

Allow everything to be built from the top level directory with just
'make', cleaned with 'make clean', and installed with 'make
install'.  Also support these in any particular subdirectory.

Specifying 'make VERBOSE=1' will print each ld/g++/etc. command as
it runs.

Kernel and early host tools (IPCCompiler, etc.) are built as
object.host.o so that they don't conflict with other things built
with the cross-compiler.
joshua stein hace 5 años
padre
commit
ac25438d54
Se han modificado 92 ficheros con 518 adiciones y 920 borrados
  1. 5 0
      AK/Makefile
  2. 17 1
      AK/Tests/Makefile
  3. 0 4
      AK/install.sh
  4. 4 4
      Applications/About/Makefile
  5. 4 4
      Applications/Browser/Makefile
  6. 8 8
      Applications/Calculator/Makefile
  7. 4 4
      Applications/ChanViewer/Makefile
  8. 4 4
      Applications/DisplayProperties/Makefile
  9. 5 5
      Applications/FileManager/Makefile
  10. 5 4
      Applications/FontEditor/Makefile
  11. 4 4
      Applications/Help/Makefile
  12. 6 6
      Applications/HexEditor/Makefile
  13. 4 4
      Applications/IRCClient/Makefile
  14. 3 0
      Applications/Makefile
  15. 0 14
      Applications/Makefile.common
  16. 4 4
      Applications/PaintBrush/Makefile
  17. 4 4
      Applications/Piano/Makefile
  18. 4 4
      Applications/QuickShow/Makefile
  19. 6 6
      Applications/SoundPlayer/Makefile
  20. 4 4
      Applications/SystemDialog/Makefile
  21. 4 4
      Applications/SystemMonitor/Makefile
  22. 4 4
      Applications/Taskbar/Makefile
  23. 4 4
      Applications/Terminal/Makefile
  24. 5 5
      Applications/TextEditor/Makefile
  25. 4 4
      Applications/Welcome/Makefile
  26. 3 17
      Demos/Fire/Makefile
  27. 3 17
      Demos/HelloWorld/Makefile
  28. 3 17
      Demos/HelloWorld2/Makefile
  29. 3 0
      Demos/Makefile
  30. 3 17
      Demos/WidgetGallery/Makefile
  31. 3 12
      DevTools/FormCompiler/Makefile
  32. 3 17
      DevTools/HackStudio/Makefile
  33. 3 12
      DevTools/IPCCompiler/Makefile
  34. 3 17
      DevTools/Inspector/Makefile
  35. 3 0
      DevTools/Makefile
  36. 3 17
      DevTools/ProfileViewer/Makefile
  37. 3 17
      DevTools/VisualBuilder/Makefile
  38. 3 0
      Games/Makefile
  39. 3 17
      Games/Minesweeper/Makefile
  40. 3 17
      Games/Snake/Makefile
  41. 17 21
      Kernel/Makefile
  42. 0 4
      Kernel/install.sh
  43. 5 14
      Libraries/LibAudio/Makefile
  44. 0 8
      Libraries/LibAudio/install.sh
  45. 26 21
      Libraries/LibC/Makefile
  46. 0 19
      Libraries/LibC/install.sh
  47. 5 14
      Libraries/LibCore/Makefile
  48. 0 8
      Libraries/LibCore/install.sh
  49. 5 14
      Libraries/LibDraw/Makefile
  50. 0 8
      Libraries/LibDraw/install.sh
  51. 1 0
      Libraries/LibELF/Makefile
  52. 5 14
      Libraries/LibGUI/Makefile
  53. 0 8
      Libraries/LibGUI/install.sh
  54. 19 28
      Libraries/LibHTML/CodeGenerators/Generate_CSS_PropertyID_cpp/Makefile
  55. 19 28
      Libraries/LibHTML/CodeGenerators/Generate_CSS_PropertyID_h/Makefile
  56. 16 23
      Libraries/LibHTML/Makefile
  57. 0 11
      Libraries/LibHTML/install.sh
  58. 5 14
      Libraries/LibIPC/Makefile
  59. 0 8
      Libraries/LibIPC/install.sh
  60. 6 14
      Libraries/LibM/Makefile
  61. 0 9
      Libraries/LibM/install.sh
  62. 10 19
      Libraries/LibMarkdown/Makefile
  63. 0 8
      Libraries/LibMarkdown/install.sh
  64. 5 14
      Libraries/LibPCIDB/Makefile
  65. 0 8
      Libraries/LibPCIDB/install.sh
  66. 1 15
      Libraries/LibProtocol/Makefile
  67. 5 14
      Libraries/LibPthread/Makefile
  68. 0 9
      Libraries/LibPthread/install.sh
  69. 5 14
      Libraries/LibThread/Makefile
  70. 0 8
      Libraries/LibThread/install.sh
  71. 1 15
      Libraries/LibVT/Makefile
  72. 3 0
      Libraries/Makefile
  73. 44 0
      Makefile
  74. 78 13
      Makefile.common
  75. 17 0
      Makefile.subdir
  76. 4 4
      MenuApplets/Audio/Makefile
  77. 4 4
      MenuApplets/CPUGraph/Makefile
  78. 3 0
      MenuApplets/Makefile
  79. 0 14
      MenuApplets/Makefile.common
  80. 8 17
      Servers/AudioServer/Makefile
  81. 0 4
      Servers/AudioServer/install.sh
  82. 4 19
      Servers/LookupServer/Makefile
  83. 3 0
      Servers/Makefile
  84. 3 17
      Servers/ProtocolServer/Makefile
  85. 7 18
      Servers/SystemServer/Makefile
  86. 0 4
      Servers/SystemServer/install.sh
  87. 3 20
      Servers/TTYServer/Makefile
  88. 4 19
      Servers/TelnetServer/Makefile
  89. 7 15
      Servers/WindowServer/Makefile
  90. 0 4
      Servers/WindowServer/install.sh
  91. 3 17
      Shell/Makefile
  92. 6 16
      Userland/Makefile

+ 5 - 0
AK/Makefile

@@ -0,0 +1,5 @@
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/AK/
+	cp ../AK/*.h $(SERENITY_BASE_DIR)/Root/usr/include/AK/
+
+include ../Makefile.common

+ 17 - 1
AK/Tests/Makefile

@@ -1,4 +1,20 @@
-PROGRAMS = TestBinarySearch TestAtomic TestString TestQueue TestVector TestHashMap TestJSON TestWeakPtr TestNonnullRefPtr TestRefPtr TestFixedArray TestFileSystemPath TestURL TestStringView TestUtf8 TestCircularQueue
+PROGRAMS = \
+	TestBinarySearch \
+	TestAtomic \
+	TestString \
+	TestQueue \
+	TestVector \
+	TestHashMap \
+	TestJSON \
+	TestWeakPtr \
+	TestNonnullRefPtr \
+	TestRefPtr \
+	TestFixedArray \
+	TestFileSystemPath \
+	TestURL \
+	TestStringView \
+	TestUtf8 \
+	TestCircularQueue
 
 CXXFLAGS = -std=c++17 -Wall -Wextra -ggdb3 -O2 -I../ -I../../
 

+ 0 - 4
AK/install.sh

@@ -1,4 +0,0 @@
-#!/bin/sh
-
-mkdir -p ../Root/usr/include/AK/
-cp ../AK/*.h ../Root/usr/include/AK/

+ 4 - 4
Applications/About/Makefile

@@ -1,8 +1,8 @@
-include ../../Makefile.common
-
 OBJS = \
     main.o
 
-APP = About
+PROGRAM = About
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
+
+include ../../Makefile.common

+ 4 - 4
Applications/Browser/Makefile

@@ -1,8 +1,8 @@
-include ../../Makefile.common
-
 OBJS = \
     main.o
 
-APP = Browser
+PROGRAM = Browser
 
-include ../Makefile.common
+LDFLAGS = -lgui -lhtml -ldraw -lprotocol -lipc -lcore -lc
+
+include ../../Makefile.common

+ 8 - 8
Applications/Calculator/Makefile

@@ -1,11 +1,11 @@
-include ../../Makefile.common
-
 OBJS = \
-	Calculator.o \
-	Keypad.o \
-	CalculatorWidget.o \
-	main.o
+    Calculator.o \
+    Keypad.o \
+    CalculatorWidget.o \
+    main.o
 
-APP = Calculator
+PROGRAM = Calculator
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
+
+include ../../Makefile.common

+ 4 - 4
Applications/ChanViewer/Makefile

@@ -1,10 +1,10 @@
-include ../../Makefile.common
-
 OBJS = \
     ThreadCatalogModel.o \
     BoardListModel.o \
     main.o
 
-APP = ChanViewer
+PROGRAM = ChanViewer
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lipc -lthread -lpthread -lcore -lc
+
+include ../../Makefile.common

+ 4 - 4
Applications/DisplayProperties/Makefile

@@ -1,9 +1,9 @@
-include ../../Makefile.common
-
 OBJS = \
 	DisplayProperties.o \
 	main.o \
 
-APP = DisplayProperties
+PROGRAM = DisplayProperties
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lipc -lthread -lpthread -lcore -lc
+
+include ../../Makefile.common

+ 5 - 5
Applications/FileManager/Makefile

@@ -1,11 +1,11 @@
-include ../../Makefile.common
-
 OBJS = \
     DirectoryView.o \
     FileUtils.o \
-	PropertiesDialog.o \
+    PropertiesDialog.o \
     main.o
 
-APP = FileManager
+PROGRAM = FileManager
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lipc -lthread -lpthread -lcore -lc
+
+include ../../Makefile.common

+ 5 - 4
Applications/FontEditor/Makefile

@@ -1,17 +1,18 @@
-include ../../Makefile.common
-
 OBJS = \
     FontEditor.o \
     GlyphMapWidget.o \
     GlyphEditorWidget.o \
     main.o
 
-APP = FontEditor
+PROGRAM = FontEditor
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
 
 FontEditor.cpp: UI_FontEditorBottom.h
 
 UI_FontEditorBottom.h: FontEditorBottom.frm
 	../../DevTools/FormCompiler/FormCompiler $< > $@
 
+EXTRA_CLEAN = UI_FontEditorBottom.h
+
+include ../../Makefile.common

+ 4 - 4
Applications/Help/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 OBJS = \
     ManualModel.o \
     ManualSectionNode.o \
@@ -7,6 +5,8 @@ OBJS = \
     History.o \
     main.o
 
-APP = Help
+PROGRAM = Help
 
-include ../Makefile.common
+LDFLAGS = -lgui -lhtml -lmarkdown -ldraw -lipc -lprotocol -lthread -lpthread -lcore -lc
+
+include ../../Makefile.common

+ 6 - 6
Applications/HexEditor/Makefile

@@ -1,10 +1,10 @@
-include ../../Makefile.common
-
 OBJS = \
-	HexEditor.o \
+    HexEditor.o \
     HexEditorWidget.o \
-    main.o 
+    main.o
 
-APP = HexEditor
+PROGRAM = HexEditor
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lipc -lthread -lpthread -lcore -lc
+
+include ../../Makefile.common

+ 4 - 4
Applications/IRCClient/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 OBJS = \
     IRCClient.o \
     IRCChannel.o \
@@ -11,6 +9,8 @@ OBJS = \
     IRCChannelMemberListModel.o \
     main.o
 
-APP = IRCClient
+PROGRAM = IRCClient
 
-include ../Makefile.common
+LDFLAGS = -lgui -lhtml -ldraw -lprotocol -lipc -lthread -lpthread -lcore -lc
+
+include ../../Makefile.common

+ 3 - 0
Applications/Makefile

@@ -0,0 +1,3 @@
+SUBDIRS := $(wildcard */.)
+
+include ../Makefile.subdir

+ 0 - 14
Applications/Makefile.common

@@ -1,14 +0,0 @@
-DEFINES += -DUSERLAND
-
-all: $(APP)
-
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lmarkdown -lhtml -laudio -lipc -lvt -lpcidb -lgui -ldraw -lprotocol -lipc -lthread -lpthread -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d

+ 4 - 4
Applications/PaintBrush/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 OBJS = \
     PaintableWidget.o \
     PaletteWidget.o \
@@ -14,6 +12,8 @@ OBJS = \
     PickerTool.o \
     main.o
 
-APP = PaintBrush
+PROGRAM = PaintBrush
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lipc -lthread -lpthread -lcore -lc
+
+include ../../Makefile.common

+ 4 - 4
Applications/Piano/Makefile

@@ -1,9 +1,9 @@
-include ../../Makefile.common
-
 OBJS = \
     PianoWidget.o \
     main.o
 
-APP = Piano
+PROGRAM = Piano
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -laudio -lipc -lthread -lpthread -lcore -lc
+
+include ../../Makefile.common

+ 4 - 4
Applications/QuickShow/Makefile

@@ -1,9 +1,9 @@
-include ../../Makefile.common
-
 OBJS = \
     QSWidget.o \
     main.o
 
-APP = QuickShow
+PROGRAM = QuickShow
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lprotocol -lipc -lthread -lpthread -lcore -lc
+
+include ../../Makefile.common

+ 6 - 6
Applications/SoundPlayer/Makefile

@@ -1,11 +1,11 @@
-include ../../Makefile.common
-
 OBJS = \
-	PlaybackManager.o \
+    PlaybackManager.o \
     SampleWidget.o \
-	SoundPlayerWidget.o \
+    SoundPlayerWidget.o \
     main.o
 
-APP = SoundPlayer
+PROGRAM = SoundPlayer
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -laudio -lipc -lthread -lpthread -lcore -lc
+
+include ../../Makefile.common

+ 4 - 4
Applications/SystemDialog/Makefile

@@ -1,8 +1,8 @@
-include ../../Makefile.common
-
 OBJS = \
     main.o
 
-APP = SystemDialog
+PROGRAM = SystemDialog
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
+
+include ../../Makefile.common

+ 4 - 4
Applications/SystemMonitor/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 OBJS = \
     ProcessModel.o \
     DevicesModel.o \
@@ -12,6 +10,8 @@ OBJS = \
     NetworkStatisticsWidget.o \
     main.o
 
-APP = SystemMonitor
+PROGRAM = SystemMonitor
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lprotocol -lpcidb -lipc -lthread -lpthread -lcore -lc
+
+include ../../Makefile.common

+ 4 - 4
Applications/Taskbar/Makefile

@@ -1,11 +1,11 @@
-include ../../Makefile.common
-
 OBJS = \
     TaskbarWindow.o \
     TaskbarButton.o \
     WindowList.o \
     main.o
 
-APP = Taskbar
+PROGRAM = Taskbar
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
+
+include ../../Makefile.common

+ 4 - 4
Applications/Terminal/Makefile

@@ -1,8 +1,8 @@
-include ../../Makefile.common
-
 OBJS = \
     main.o
 
-APP = Terminal
+PROGRAM = Terminal
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lvt -lprotocol -lipc -lcore -lc
+
+include ../../Makefile.common

+ 5 - 5
Applications/TextEditor/Makefile

@@ -1,9 +1,9 @@
-include ../../Makefile.common
-
 OBJS = \
     TextEditorWidget.o \
-    main.o 
+    main.o
 
-APP = TextEditor
+PROGRAM = TextEditor
 
-include ../Makefile.common
+LDFLAGS = -lgui -ldraw -lvt -lipc -lthread -lpthread -lcore -lc
+
+include ../../Makefile.common

+ 4 - 4
Applications/Welcome/Makefile

@@ -1,14 +1,14 @@
-include ../../Makefile.common
-
 OBJS = \
     main.o \
     TextWidget.o \
     background.png.o
 
-APP = Welcome
+PROGRAM = Welcome
+
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
 
 .SUFFIXES: .png
 %.png.o: %.png
 	@echo "LINK $<"; $(LINK) --relocatable --format binary --output $@ $<
 
-include ../Makefile.common
+include ../../Makefile.common

+ 3 - 17
Demos/Fire/Makefile

@@ -1,22 +1,8 @@
-include ../../Makefile.common
-
 OBJS = \
     Fire.o
 
-APP = Fire
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = Fire
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -ldraw -lipc -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
 
+include ../../Makefile.common

+ 3 - 17
Demos/HelloWorld/Makefile

@@ -1,22 +1,8 @@
-include ../../Makefile.common
-
 OBJS = \
     main.o
 
-APP = HelloWorld
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = HelloWorld
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -ldraw -lipc -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
 
+include ../../Makefile.common

+ 3 - 17
Demos/HelloWorld2/Makefile

@@ -1,27 +1,13 @@
-include ../../Makefile.common
-
 OBJS = \
     main.o
 
-APP = HelloWorld2
+PROGRAM = HelloWorld2
 
-DEFINES += -DUSERLAND
-
-all: $(APP)
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
 
 main.cpp: UI_HelloWorld2.h
 
 UI_HelloWorld2.h: HelloWorld2.frm
 	../../DevTools/FormCompiler/FormCompiler $< > $@
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -ldraw -lipc -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
-
+include ../../Makefile.common

+ 3 - 0
Demos/Makefile

@@ -0,0 +1,3 @@
+SUBDIRS := $(wildcard */.)
+
+include ../Makefile.subdir

+ 3 - 17
Demos/WidgetGallery/Makefile

@@ -1,22 +1,8 @@
-include ../../Makefile.common
-
 OBJS = \
     main.o
 
-APP = WidgetGallery
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = WidgetGallery
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -ldraw -lipc -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
 
+include ../../Makefile.common

+ 3 - 12
DevTools/FormCompiler/Makefile

@@ -1,3 +1,5 @@
+HOST_CXX = 1
+
 PROGRAM = FormCompiler
 
 OBJS = \
@@ -19,15 +21,4 @@ OBJS = \
     ../../Libraries/LibCore/CNotifier.o \
     ../../Libraries/LibCore/CEventLoop.o
 
-all: $(PROGRAM)
-
-CXXFLAGS = -std=c++17 -Wall -Wextra
-
-%.o: %.cpp
-	$(PRE_CXX) $(CXX) $(CXXFLAGS) -I../ -I../../ -I../../Libraries/ -o $@ -c $<
-
-$(PROGRAM): $(OBJS)
-	$(CXX) $(LDFLAGS) -I../ -I../../ -I../../Libraries/ -o $(PROGRAM) $(OBJS)
-
-clean:
-	rm -f $(PROGRAM) $(OBJS)
+include ../../Makefile.common

+ 3 - 17
DevTools/HackStudio/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 OBJS = \
     Project.o \
     ProjectFile.o \
@@ -18,20 +16,8 @@ OBJS = \
     WidgetTreeModel.o \
     main.o
 
-APP = HackStudio
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = HackStudio
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lvt -lhtml -lprotocol -lipc -lmarkdown -lgui -ldraw -lthread -lpthread -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+LDFLAGS = -lvt -lhtml -lprotocol -lipc -lmarkdown -lgui -ldraw -lthread -lpthread -lcore -lc
 
+include ../../Makefile.common

+ 3 - 12
DevTools/IPCCompiler/Makefile

@@ -1,3 +1,5 @@
+HOST_CXX = 1
+
 PROGRAM = IPCCompiler
 
 OBJS = \
@@ -19,15 +21,4 @@ OBJS = \
     ../../Libraries/LibCore/CLocalServer.o \
     ../../Libraries/LibCore/CEventLoop.o
 
-all: $(PROGRAM)
-
-CXXFLAGS = -std=c++17 -Wall -Wextra -ggdb3
-
-%.o: %.cpp
-	$(PRE_CXX) $(CXX) $(CXXFLAGS) -I../ -I../../ -I../../Libraries/ -o $@ -c $<
-
-$(PROGRAM): $(OBJS)
-	$(CXX) $(LDFLAGS) -I../ -I../../ -I../../Libraries/ -o $(PROGRAM) $(OBJS)
-
-clean:
-	rm -f $(PROGRAM) $(OBJS)
+include ../../Makefile.common

+ 3 - 17
DevTools/Inspector/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 OBJS = \
     RemoteObjectGraphModel.o \
     RemoteObjectPropertyModel.o \
@@ -7,20 +5,8 @@ OBJS = \
     RemoteObject.o \
     main.o
 
-APP = Inspector
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = Inspector
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -ldraw -lipc -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
 
+include ../../Makefile.common

+ 3 - 0
DevTools/Makefile

@@ -0,0 +1,3 @@
+SUBDIRS := $(wildcard */.)
+
+include ../Makefile.subdir

+ 3 - 17
DevTools/ProfileViewer/Makefile

@@ -1,25 +1,11 @@
-include ../../Makefile.common
-
 OBJS = \
     Profile.o \
     ProfileModel.o \
     ProfileTimelineWidget.o \
     main.o
 
-APP = ProfileViewer
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = ProfileViewer
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -ldraw -lipc -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
 
+include ../../Makefile.common

+ 3 - 17
DevTools/VisualBuilder/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 OBJS = \
     VBForm.o \
     VBWidget.o \
@@ -9,20 +7,8 @@ OBJS = \
     VBPropertiesWindow.o \
     main.o
 
-APP = VisualBuilder 
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = VisualBuilder
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -ldraw -lipc -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
 
+include ../../Makefile.common

+ 3 - 0
Games/Makefile

@@ -0,0 +1,3 @@
+SUBDIRS := $(wildcard */.)
+
+include ../Makefile.subdir

+ 3 - 17
Games/Minesweeper/Makefile

@@ -1,23 +1,9 @@
-include ../../Makefile.common
-
 OBJS = \
     Field.o \
     main.o
 
-APP = Minesweeper
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = Minesweeper
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -ldraw -lipc -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
 
+include ../../Makefile.common

+ 3 - 17
Games/Snake/Makefile

@@ -1,23 +1,9 @@
-include ../../Makefile.common
-
 OBJS = \
     SnakeGame.o \
     main.o
 
-APP = Snake
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = Snake
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lgui -ldraw -lipc -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+LDFLAGS = -lgui -ldraw -lipc -lcore -lc
 
+include ../../Makefile.common

+ 17 - 21
Kernel/Makefile

@@ -1,6 +1,4 @@
-include ../Makefile.common
-
-CXX_OBJS = \
+OBJS = \
     ../AK/FileSystemPath.o \
     ../AK/JsonParser.o \
     ../AK/JsonValue.o \
@@ -102,34 +100,32 @@ CXX_OBJS = \
     init.o \
     kprintf.o
 
+OBJ_SUFFIX = .kernel
+
 MODULE_OBJS = TestModule.o
 
-OBJS = $(CXX_OBJS) Arch/i386/Boot/boot.ao
+EXTRA_OBJS = Arch/i386/Boot/boot.ao
+
+KERNEL = 1
+
+PROGRAM = kernel
 
-KERNEL = kernel
 CXXFLAGS += -ffreestanding -mno-80387 -mno-mmx -mno-sse -mno-sse2 -fno-asynchronous-unwind-tables
 CXXFLAGS += -nostdlib -nostdinc -nostdinc++
 CXXFLAGS += -I../Toolchain/Local/i686-pc-serenity/include/c++/9.2.0/
 CXXFLAGS += -I../Toolchain/Local/i686-pc-serenity/include/c++/9.2.0/i686-pc-serenity/
-DEFINES += -DKERNEL
-LDFLAGS += -Ttext 0x100000 -Wl,-T linker.ld -nostdlib
+LDFLAGS += -Ttext 0x100000 -Wl,-T linker.ld -nostdlib -lgcc -lstdc++
 
-all: $(KERNEL) $(MODULE_OBJS) kernel.map
+all: $(PROGRAM) $(MODULE_OBJS) kernel.map
 
 kernel.map: kernel
-	@echo "MKMAP $@"; sh mkmap.sh
+	@echo "MKMAP $@"
+	$(QUIET) sh mkmap.sh
 
-$(KERNEL): $(OBJS)
-	@echo "LD $@"; $(LD) $(LDFLAGS) -o $@ $(OBJS) -lgcc -lstdc++
+EXTRA_CLEAN += kernel.map
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
-%.ao: %.S
-	@echo "AS $@"; $(AS) -o $@  $<
-
--include $(CXX_OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(KERNEL) $(OBJS) *.d
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/Kernel/
+	cp *.h $(SERENITY_BASE_DIR)/Root/usr/include/Kernel/
 
+include ../Makefile.common

+ 0 - 4
Kernel/install.sh

@@ -1,4 +0,0 @@
-#!/bin/sh
-
-mkdir -p ../Root/usr/include/Kernel/
-cp ./*.h ../Root/usr/include/Kernel/

+ 5 - 14
Libraries/LibAudio/Makefile

@@ -1,21 +1,12 @@
-include ../../Makefile.common
-
 OBJS = \
     AClientConnection.o \
     AWavLoader.o
 
 LIBRARY = libaudio.a
-DEFINES += -DUSERLAND
-
-all: $(LIBRARY)
 
-$(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS) $(LIBS)
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibAudio/
+	cp *.h $(SERENITY_BASE_DIR)/Root/usr/include/LibAudio/
+	cp $(LIBRARY) $(SERENITY_BASE_DIR)/Root/usr/lib/
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+include ../../Makefile.common

+ 0 - 8
Libraries/LibAudio/install.sh

@@ -1,8 +0,0 @@
-#!/bin/sh
-
-set -e
-SERENITY_ROOT=../../
-
-mkdir -p $SERENITY_ROOT/Root/usr/include/LibAudio/
-cp ./*.h $SERENITY_ROOT/Root/usr/include/LibAudio/
-cp libaudio.a $SERENITY_ROOT/Root/usr/lib/

+ 26 - 21
Libraries/LibC/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 AK_OBJS = \
     ../../AK/StringImpl.o \
     ../../AK/String.o \
@@ -57,30 +55,37 @@ LIBC_OBJS = \
        serenity.o \
        syslog.o
 
-ASM_OBJS = setjmp.ao crti.ao crtn.ao
+OBJS = $(AK_OBJS) $(LIBC_OBJS)
 
-CPP_OBJS = $(AK_OBJS) $(WIDGETS_OBJS) $(LIBC_OBJS)
-
-LIBRARY = libc.a
-DEFINES += -DUSERLAND -DSERENITY_LIBC_BUILD
+EXTRA_OBJS = setjmp.ao crti.ao crtn.ao
 
-all: $(LIBRARY) startfiles
+.PHONY: startfiles
+startfiles: $(EXTRA_OBJS)
+	$(QUIET) cp crti.ao crti.o
+	$(QUIET) cp crtn.ao crtn.o
 
-startfiles: $(ASM_OBJS)
-	@echo "CXX crt0.o"; $(CXX) $(CXXFLAGS) -o crt0.o -c crt0.cpp
-	cp crti.ao crti.o
-	cp crtn.ao crtn.o
+EXTRA_CLEAN = crt0.d
 
-$(LIBRARY): $(CPP_OBJS) $(ASM_OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(CPP_OBJS) $(ASM_OBJS)
+DEFINES = -DSERENITY_LIBC_BUILD
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
+LIBRARY = libc.a
 
-%.ao: %.S
-	@echo "AS $@"; $(AS) -o $@ $<
+all: $(LIBRARY) startfiles
 
--include $(OBJS:%.o=%.d)
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/sys/
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/bits/
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/netinet/
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/arpa/
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/lib/
+	cp *.h $(SERENITY_BASE_DIR)/Root/usr/include/
+	cp sys/*.h $(SERENITY_BASE_DIR)/Root/usr/include/sys/
+	cp bits/*.h $(SERENITY_BASE_DIR)/Root/usr/include/bits/
+	cp arpa/*.h $(SERENITY_BASE_DIR)/Root/usr/include/arpa/
+	cp netinet/*.h $(SERENITY_BASE_DIR)/Root/usr/include/netinet/
+	cp libc.a $(SERENITY_BASE_DIR)/Root/usr/lib/
+	cp crt0.o $(SERENITY_BASE_DIR)/Root/usr/lib/
+	cp crti.ao $(SERENITY_BASE_DIR)/Root/usr/lib/crti.o
+	cp crtn.ao $(SERENITY_BASE_DIR)/Root/usr/lib/crtn.o
 
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(CPP_OBJS) $(ASM_OBJS) *.d
+include ../../Makefile.common

+ 0 - 19
Libraries/LibC/install.sh

@@ -1,19 +0,0 @@
-#!/bin/sh
-
-set -e
-SERENITY_ROOT=../../
-
-mkdir -p $SERENITY_ROOT/Root/usr/include/sys/
-mkdir -p $SERENITY_ROOT/Root/usr/include/bits/
-mkdir -p $SERENITY_ROOT/Root/usr/include/netinet/
-mkdir -p $SERENITY_ROOT/Root/usr/include/arpa/
-mkdir -p $SERENITY_ROOT/Root/usr/lib/
-cp ./*.h $SERENITY_ROOT/Root/usr/include/
-cp sys/*.h $SERENITY_ROOT/Root/usr/include/sys/
-cp bits/*.h $SERENITY_ROOT/Root/usr/include/bits/
-cp arpa/*.h $SERENITY_ROOT/Root/usr/include/arpa/
-cp netinet/*.h $SERENITY_ROOT/Root/usr/include/netinet/
-cp libc.a $SERENITY_ROOT/Root/usr/lib/
-cp crt0.o $SERENITY_ROOT/Root/usr/lib/
-cp crti.ao $SERENITY_ROOT/Root/usr/lib/crti.o
-cp crtn.ao $SERENITY_ROOT/Root/usr/lib/crtn.o

+ 5 - 14
Libraries/LibCore/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 OBJS = \
     CArgsParser.o \
     CIODevice.o \
@@ -27,17 +25,10 @@ OBJS = \
     CGzip.o
 
 LIBRARY = libcore.a
-DEFINES += -DUSERLAND
-
-all: $(LIBRARY)
 
-$(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS) $(LIBS)
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibCore/
+	cp *.h $(SERENITY_BASE_DIR)/Root/usr/include/LibCore/
+	cp $(LIBRARY) $(SERENITY_BASE_DIR)/Root/usr/lib/
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+include ../../Makefile.common

+ 0 - 8
Libraries/LibCore/install.sh

@@ -1,8 +0,0 @@
-#!/bin/sh
-
-set -e
-SERENITY_ROOT=../../
-
-mkdir -p $SERENITY_ROOT/Root/usr/include/LibCore/
-cp ./*.h $SERENITY_ROOT/Root/usr/include/LibCore/
-cp libcore.a $SERENITY_ROOT/Root/usr/lib/

+ 5 - 14
Libraries/LibDraw/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 OBJS = \
     CharacterBitmap.o \
     Color.o \
@@ -15,17 +13,10 @@ OBJS = \
     Emoji.o
 
 LIBRARY = libdraw.a
-DEFINES += -DUSERLAND
-
-all: $(LIBRARY)
 
-$(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS) $(LIBS)
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibDraw/
+	cp *.h $(SERENITY_BASE_DIR)/Root/usr/include/LibDraw/
+	cp $(LIBRARY) $(SERENITY_BASE_DIR)/Root/usr/lib/
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+include ../../Makefile.common

+ 0 - 8
Libraries/LibDraw/install.sh

@@ -1,8 +0,0 @@
-#!/bin/sh
-
-set -e
-SERENITY_ROOT=../../
-
-mkdir -p $SERENITY_ROOT/Root/usr/include/LibDraw/
-cp ./*.h $SERENITY_ROOT/Root/usr/include/LibDraw/
-cp libdraw.a $SERENITY_ROOT/Root/usr/lib/

+ 1 - 0
Libraries/LibELF/Makefile

@@ -0,0 +1 @@
+include ../../Makefile.common

+ 5 - 14
Libraries/LibGUI/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 OBJS = \
     GPainter.o \
     GButton.o \
@@ -64,17 +62,10 @@ OBJS = \
     GWindow.o
 
 LIBRARY = libgui.a
-DEFINES += -DUSERLAND
-
-all: $(LIBRARY)
 
-$(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS)
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibGUI/
+	cp ./*.h $(SERENITY_BASE_DIR)/Root/usr/include/LibGUI/
+	cp $(LIBRARY) $(SERENITY_BASE_DIR)/Root/usr/lib/
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+include ../../Makefile.common

+ 0 - 8
Libraries/LibGUI/install.sh

@@ -1,8 +0,0 @@
-#!/bin/sh
-
-set -e
-SERENITY_ROOT=../../
-
-mkdir -p $SERENITY_ROOT/Root/usr/include/LibGUI/
-cp ./*.h $SERENITY_ROOT/Root/usr/include/LibGUI/
-cp libgui.a $SERENITY_ROOT/Root/usr/lib/

+ 19 - 28
Libraries/LibHTML/CodeGenerators/Generate_CSS_PropertyID_cpp/Makefile

@@ -1,33 +1,24 @@
+HOST_CXX = 1
+
 PROGRAM = Generate_CSS_PropertyID_cpp
 
 OBJS = \
     Generate_CSS_PropertyID_cpp.o \
-    $(SERENITY_ROOT)/AK/String.o \
-    $(SERENITY_ROOT)/AK/StringImpl.o \
-    $(SERENITY_ROOT)/AK/StringBuilder.o \
-    $(SERENITY_ROOT)/AK/StringView.o \
-    $(SERENITY_ROOT)/AK/JsonValue.o \
-    $(SERENITY_ROOT)/AK/JsonParser.o \
-    $(SERENITY_ROOT)/AK/LogStream.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CIODevice.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CFile.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CObject.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CEvent.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CSocket.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CLocalSocket.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CNotifier.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CLocalServer.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CEventLoop.o
-
-all: $(PROGRAM)
-
-CXXFLAGS = -std=c++17 -Wall -Wextra
-
-%.o: %.cpp
-	$(PRE_CXX) $(CXX) $(CXXFLAGS) -I../ -I$(SERENITY_ROOT)/ -I$(SERENITY_ROOT)/Libraries/ -o $@ -c $<
-
-$(PROGRAM): $(OBJS)
-	$(CXX) $(LDFLAGS) -I../ -I$(SERENITY_ROOT)/ -I$(SERENITY_ROOT)/Libraries/ -o $(PROGRAM) $(OBJS)
+    ../../../../AK/String.o \
+    ../../../../AK/StringImpl.o \
+    ../../../../AK/StringBuilder.o \
+    ../../../../AK/StringView.o \
+    ../../../../AK/JsonValue.o \
+    ../../../../AK/JsonParser.o \
+    ../../../../AK/LogStream.o \
+    ../../../../Libraries/LibCore/CIODevice.o \
+    ../../../../Libraries/LibCore/CFile.o \
+    ../../../../Libraries/LibCore/CObject.o \
+    ../../../../Libraries/LibCore/CEvent.o \
+    ../../../../Libraries/LibCore/CSocket.o \
+    ../../../../Libraries/LibCore/CLocalSocket.o \
+    ../../../../Libraries/LibCore/CNotifier.o \
+    ../../../../Libraries/LibCore/CLocalServer.o \
+    ../../../../Libraries/LibCore/CEventLoop.o
 
-clean:
-	rm -f $(PROGRAM) $(OBJS)
+include ../../../../Makefile.common

+ 19 - 28
Libraries/LibHTML/CodeGenerators/Generate_CSS_PropertyID_h/Makefile

@@ -1,33 +1,24 @@
+HOST_CXX = 1
+
 PROGRAM = Generate_CSS_PropertyID_h
 
 OBJS = \
     Generate_CSS_PropertyID_h.o \
-    $(SERENITY_ROOT)/AK/String.o \
-    $(SERENITY_ROOT)/AK/StringImpl.o \
-    $(SERENITY_ROOT)/AK/StringBuilder.o \
-    $(SERENITY_ROOT)/AK/StringView.o \
-    $(SERENITY_ROOT)/AK/JsonValue.o \
-    $(SERENITY_ROOT)/AK/JsonParser.o \
-    $(SERENITY_ROOT)/AK/LogStream.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CIODevice.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CFile.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CObject.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CEvent.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CSocket.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CLocalSocket.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CNotifier.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CLocalServer.o \
-    $(SERENITY_ROOT)/Libraries/LibCore/CEventLoop.o
-
-all: $(PROGRAM)
-
-CXXFLAGS = -std=c++17 -Wall -Wextra
-
-%.o: %.cpp
-	$(PRE_CXX) $(CXX) $(CXXFLAGS) -I../ -I$(SERENITY_ROOT)/ -I$(SERENITY_ROOT)/Libraries/ -o $@ -c $<
-
-$(PROGRAM): $(OBJS)
-	$(CXX) $(LDFLAGS) -I../ -I$(SERENITY_ROOT)/ -I$(SERENITY_ROOT)/Libraries/ -o $(PROGRAM) $(OBJS)
+    ../../../../AK/String.o \
+    ../../../../AK/StringImpl.o \
+    ../../../../AK/StringBuilder.o \
+    ../../../../AK/StringView.o \
+    ../../../../AK/JsonValue.o \
+    ../../../../AK/JsonParser.o \
+    ../../../../AK/LogStream.o \
+    ../../../../Libraries/LibCore/CIODevice.o \
+    ../../../../Libraries/LibCore/CFile.o \
+    ../../../../Libraries/LibCore/CObject.o \
+    ../../../../Libraries/LibCore/CEvent.o \
+    ../../../../Libraries/LibCore/CSocket.o \
+    ../../../../Libraries/LibCore/CLocalSocket.o \
+    ../../../../Libraries/LibCore/CNotifier.o \
+    ../../../../Libraries/LibCore/CLocalServer.o \
+    ../../../../Libraries/LibCore/CEventLoop.o
 
-clean:
-	rm -f $(PROGRAM) $(OBJS)
+include ../../../../Makefile.common

+ 16 - 23
Libraries/LibHTML/Makefile

@@ -1,9 +1,3 @@
-include ../../Makefile.common
-
-LIBRARY = libhtml.a
-
-all: $(LIBRARY)
-
 LIBHTML_OBJS = \
     CSS/DefaultStyleSheetSource.o \
     CSS/PropertyID.o \
@@ -68,33 +62,32 @@ LIBHTML_OBJS = \
     Parser/HTMLParser.o \
     ResourceLoader.o
 
-GENERATED_SOURCES = \
+EXTRA_SOURCES = \
     CSS/DefaultStyleSheetSource.cpp \
     CSS/PropertyID.h \
     CSS/PropertyID.cpp
 
-OBJS = $(EXTRA_OBJS) $(LIBHTML_OBJS)
-
-LIBRARY = libhtml.a
-DEFINES += -DUSERLAND
-
 CSS/DefaultStyleSheetSource.cpp: CSS/Default.css Scripts/GenerateStyleSheetSource.sh
-	@echo "GENERATE $@"; Scripts/GenerateStyleSheetSource.sh default_stylesheet_source $< > $@
+	@echo "GENERATE $@"
+	$(QUIET) Scripts/GenerateStyleSheetSource.sh default_stylesheet_source $< > $@
 
 CSS/PropertyID.h: CSS/Properties.json CodeGenerators/Generate_CSS_PropertyID_h/Generate_CSS_PropertyID_h.cpp
-	@echo "GENERATE $@"; CodeGenerators/Generate_CSS_PropertyID_h/Generate_CSS_PropertyID_h $< > $@
+	@echo "GENERATE $@"
+	$(QUIET) CodeGenerators/Generate_CSS_PropertyID_h/Generate_CSS_PropertyID_h $< > $@
 
 CSS/PropertyID.cpp: CSS/Properties.json CodeGenerators/Generate_CSS_PropertyID_cpp/Generate_CSS_PropertyID_cpp.cpp
-	@echo "GENERATE $@"; CodeGenerators/Generate_CSS_PropertyID_cpp/Generate_CSS_PropertyID_cpp $< > $@
-
-%.o: %.cpp $(GENERATED_SOURCES)
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
+	@echo "GENERATE $@"
+	$(QUIET) CodeGenerators/Generate_CSS_PropertyID_cpp/Generate_CSS_PropertyID_cpp $< > $@
 
--include $(OBJS:%.o=%.d)
+OBJS = $(EXTRA_OBJS) $(LIBHTML_OBJS)
 
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d $(GENERATED_SOURCES)
+LIBRARY = libhtml.a
 
-$(LIBRARY): $(GENERATED_SOURCES) $(LIBHTML_OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(LIBHTML_OBJS)
+install:
+	for dir in . Parser DOM CSS Layout; do \
+	    mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibHTML/$$dir; \
+	    cp $$dir/*.h $(SERENITY_BASE_DIR)/Root/usr/include/LibHTML/$$dir/; \
+	done
+	cp $(LIBRARY) $(SERENITY_BASE_DIR)/Root/usr/lib/
 
+include ../../Makefile.common

+ 0 - 11
Libraries/LibHTML/install.sh

@@ -1,11 +0,0 @@
-#!/bin/sh
-
-set -e
-SERENITY_ROOT=../../
-
-for dir in . Parser DOM CSS Layout; do
-    mkdir -p $SERENITY_ROOT/Root/usr/include/LibHTML/$dir
-    cp $dir/*.h $SERENITY_ROOT/Root/usr/include/LibHTML/$dir/
-done
-
-cp libhtml.a $SERENITY_ROOT/Root/usr/lib/

+ 5 - 14
Libraries/LibIPC/Makefile

@@ -1,21 +1,12 @@
-include ../../Makefile.common
-
 OBJS = \
     IEndpoint.o \
     IMessage.o
 
 LIBRARY = libipc.a
-DEFINES += -DUSERLAND
-
-all: $(LIBRARY)
 
-$(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS) $(LIBS)
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibIPC/
+	cp *.h $(SERENITY_BASE_DIR)/Root/usr/include/LibIPC/
+	cp $(LIBRARY) $(SERENITY_BASE_DIR)/Root/usr/lib/
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+include ../../Makefile.common

+ 0 - 8
Libraries/LibIPC/install.sh

@@ -1,8 +0,0 @@
-#!/bin/sh
-
-set -e
-SERENITY_ROOT=../../
-
-mkdir -p $SERENITY_ROOT/Root/usr/include/LibIPC/
-cp ./*.h $SERENITY_ROOT/Root/usr/include/LibIPC/
-cp libipc.a $SERENITY_ROOT/Root/usr/lib/

+ 6 - 14
Libraries/LibM/Makefile

@@ -1,19 +1,11 @@
-include ../../Makefile.common
-
 OBJS = math.o
 
 LIBRARY = libm.a
-DEFINES += -DUSERLAND
-
-all: $(LIBRARY)
 
-$(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS)
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/sys/
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/lib/
+	cp *.h $(SERENITY_BASE_DIR)/Root/usr/include/
+	cp $(LIBRARY) $(SERENITY_BASE_DIR)/Root/usr/lib/
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+include ../../Makefile.common

+ 0 - 9
Libraries/LibM/install.sh

@@ -1,9 +0,0 @@
-#!/bin/sh
-
-set -e
-SERENITY_ROOT=../../
-
-mkdir -p $SERENITY_ROOT/Root/usr/include/sys/
-mkdir -p $SERENITY_ROOT/Root/usr/lib/
-cp ./*.h $SERENITY_ROOT/Root/usr/include/
-cp libm.a $SERENITY_ROOT/Root/usr/lib/

+ 10 - 19
Libraries/LibMarkdown/Makefile

@@ -1,25 +1,16 @@
-include ../../Makefile.common
-
 OBJS = \
     MDDocument.o \
-		MDParagraph.o \
-		MDHeading.o \
-		MDCodeBlock.o \
-		MDList.o \
-		MDText.o
+    MDParagraph.o \
+    MDHeading.o \
+    MDCodeBlock.o \
+    MDList.o \
+    MDText.o
 
 LIBRARY = libmarkdown.a
-DEFINES += -DUSERLAND
-
-all: $(LIBRARY)
 
-$(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS) $(LIBS)
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibMarkdown/
+	cp *.h $(SERENITY_BASE_DIR)/Root/usr/include/LibMarkdown/
+	cp $(LIBRARY) $(SERENITY_BASE_DIR)/Root/usr/lib/
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+include ../../Makefile.common

+ 0 - 8
Libraries/LibMarkdown/install.sh

@@ -1,8 +0,0 @@
-#!/bin/sh
-
-set -e
-SERENITY_ROOT=../../
-
-mkdir -p $SERENITY_ROOT/Root/usr/include/LibMarkdown/
-cp *.h $SERENITY_ROOT/Root/usr/include/LibMarkdown/
-cp libmarkdown.a $SERENITY_ROOT/Root/usr/lib/

+ 5 - 14
Libraries/LibPCIDB/Makefile

@@ -1,20 +1,11 @@
-include ../../Makefile.common
-
 OBJS = \
     Database.o
 
 LIBRARY = libpcidb.a
-DEFINES += -DUSERLAND
-
-all: $(LIBRARY)
 
-$(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS) $(LIBS)
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibPCIDB/
+	cp ./*.h $(SERENITY_BASE_DIR)/Root/usr/include/LibPCIDB/
+	cp $(LIBRARY) $(SERENITY_BASE_DIR)/Root/usr/lib/
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+include ../../Makefile.common

+ 0 - 8
Libraries/LibPCIDB/install.sh

@@ -1,8 +0,0 @@
-#!/bin/sh
-
-set -e
-SERENITY_ROOT=../../
-
-mkdir -p $SERENITY_ROOT/Root/usr/include/LibPCIDB/
-cp ./*.h $SERENITY_ROOT/Root/usr/include/LibPCIDB/
-cp libpcidb.a $SERENITY_ROOT/Root/usr/lib/

+ 1 - 15
Libraries/LibProtocol/Makefile

@@ -1,21 +1,7 @@
-include ../../Makefile.common
-
 OBJS = \
     Download.o \
     Client.o
 
 LIBRARY = libprotocol.a
-DEFINES += -DUSERLAND
-
-all: $(LIBRARY)
-
-$(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS) $(LIBS)
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+include ../../Makefile.common

+ 5 - 14
Libraries/LibPthread/Makefile

@@ -1,19 +1,10 @@
-include ../../Makefile.common
-
 OBJS = pthread.o
 
 LIBRARY = libpthread.a
-DEFINES += -DUSERLAND
-
-all: $(LIBRARY)
 
-$(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS)
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/lib/
+	cp *.h $(SERENITY_BASE_DIR)/Root/usr/include/
+	cp $(LIBRARY) $(SERENITY_BASE_DIR)/Root/usr/lib/
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+include ../../Makefile.common

+ 0 - 9
Libraries/LibPthread/install.sh

@@ -1,9 +0,0 @@
-#!/bin/sh
-
-set -e
-SERENITY_ROOT=../../
-
-mkdir -p $SERENITY_ROOT/Root/usr/include/sys/
-mkdir -p $SERENITY_ROOT/Root/usr/lib/
-cp ./*.h $SERENITY_ROOT/Root/usr/include/
-cp libpthread.a $SERENITY_ROOT/Root/usr/lib/

+ 5 - 14
Libraries/LibThread/Makefile

@@ -1,21 +1,12 @@
-include ../../Makefile.common
-
 OBJS = \
     Thread.o \
     BackgroundAction.o
 
 LIBRARY = libthread.a
-DEFINES += -DUSERLAND
-
-all: $(LIBRARY)
 
-$(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS) $(LIBS)
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/LibThread/
+	cp *.h $(SERENITY_BASE_DIR)/Root/usr/include/LibThread/
+	cp $(LIBRARY) $(SERENITY_BASE_DIR)/Root/usr/lib/
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+include ../../Makefile.common

+ 0 - 8
Libraries/LibThread/install.sh

@@ -1,8 +0,0 @@
-#!/bin/sh
-
-set -e
-SERENITY_ROOT=../../
-
-mkdir -p $SERENITY_ROOT/Root/usr/include/LibThread/
-cp ./*.h $SERENITY_ROOT/Root/usr/include/LibThread/
-cp libthread.a $SERENITY_ROOT/Root/usr/lib/

+ 1 - 15
Libraries/LibVT/Makefile

@@ -1,21 +1,7 @@
-include ../../Makefile.common
-
 OBJS = \
     Terminal.o \
     TerminalWidget.o
 
 LIBRARY = libvt.a
-DEFINES += -DUSERLAND
-
-all: $(LIBRARY)
-
-$(LIBRARY): $(OBJS)
-	@echo "LIB $@"; $(AR) rcs $@ $(OBJS) $(LIBS)
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(LIBRARY) $(OBJS) *.d
+include ../../Makefile.common

+ 3 - 0
Libraries/Makefile

@@ -0,0 +1,3 @@
+SUBDIRS := $(wildcard */.)
+
+include ../Makefile.subdir

+ 44 - 0
Makefile

@@ -0,0 +1,44 @@
+# Build the host-side tools first, since they are needed to build some programs.
+SUBDIRS = \
+	DevTools/IPCCompiler \
+	DevTools/FormCompiler \
+	Libraries/LibHTML/CodeGenerators/Generate_CSS_PropertyID_cpp \
+	Libraries/LibHTML/CodeGenerators/Generate_CSS_PropertyID_h
+
+# Build LibC, LibCore, LibIPC and LibThread before IPC servers, since they depend on them.
+SUBDIRS += \
+	Libraries/LibC \
+	Libraries/LibCore \
+	Libraries/LibDraw \
+	Libraries/LibIPC \
+	Libraries/LibThread \
+	Libraries/LibPthread
+
+# Build IPC servers before their client code to ensure the IPC definitions are available.
+SUBDIRS += \
+	Servers/AudioServer \
+	Servers/LookupServer \
+	Servers/ProtocolServer \
+	Libraries/LibAudio \
+	Servers/WindowServer
+
+SUBDIRS += \
+	AK
+
+SUBDIRS += \
+	Libraries \
+	Applications \
+	DevTools \
+	Servers \
+	Shell \
+	Userland \
+	MenuApplets \
+	Demos \
+	Games \
+	Kernel
+
+include Makefile.subdir
+
+.PHONY: test
+test:
+	$(QUIET) $(MAKE) -C AK/Tests clean all clean

+ 78 - 13
Makefile.common

@@ -7,16 +7,14 @@ OPTIMIZATION_FLAGS = -Os
 MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
 SERENITY_BASE_DIR := $(patsubst %/,%,$(dir $(MAKEFILE_PATH)))
 
-INCLUDE_FLAGS = \
+INCLUDE_FLAGS += \
     -I. \
+    -I$(SERENITY_BASE_DIR)/DevTools \
     -I$(SERENITY_BASE_DIR) \
     -I$(SERENITY_BASE_DIR)/Libraries \
-    -I$(SERENITY_BASE_DIR)/Libraries/LibC \
-    -I$(SERENITY_BASE_DIR)/Servers \
-    -I$(SERENITY_BASE_DIR)/Libraries/LibM \
-    -I$(SERENITY_BASE_DIR)/Libraries/LibPthread
+    -I$(SERENITY_BASE_DIR)/Servers
 
-LDFLAGS = \
+LDFLAGS += \
     -L$(SERENITY_BASE_DIR)/Libraries/LibC \
     -L$(SERENITY_BASE_DIR)/Libraries/LibPthread \
     -L$(SERENITY_BASE_DIR)/Libraries/LibCore \
@@ -31,15 +29,82 @@ LDFLAGS = \
     -L$(SERENITY_BASE_DIR)/Libraries/LibProtocol \
     -L$(SERENITY_BASE_DIR)/Libraries/LibAudio
 
-CLANG_FLAGS = -Wconsumed -m32 -ffreestanding -march=i686
+VERBOSE = 0
+
+ifneq ($(HOST_CXX),)
+    CXX = g++
+    AS = as
+    LINK = ld
+    OBJ_SUFFIX ?= .host
+else
+    TOOLCHAIN_PATH = $(SERENITY_BASE_DIR)/Toolchain/Local/bin
+    CXX = $(PRE_CXX) $(TOOLCHAIN_PATH)/i686-pc-serenity-g++
+    AS = $(TOOLCHAIN_PATH)/i686-pc-serenity-as
+    LINK = $(TOOLCHAIN_PATH)/i686-pc-serenity-ld
+    DEFINES += -DDEBUG
+
+    INCLUDE_FLAGS += \
+    	-I$(SERENITY_BASE_DIR)/Libraries/LibC \
+    	-I$(SERENITY_BASE_DIR)/Libraries/LibM
+
+    LDFLAGS += \
+        -L$(SERENITY_BASE_DIR)/Libraries/LibC
+
+    ifdef KERNEL
+        DEFINES += -DKERNEL
+    else
+        DEFINES += -DUSERLAND
+    endif
+
+    OBJ_SUFFIX ?=
+endif
+
+#CXX = clang $(CLANG_FLAGS)
+#CLANG_FLAGS = -Wconsumed -m32 -ffreestanding -march=i686
+
 #SUGGEST_FLAGS = -Wsuggest-final-types -Wsuggest-final-methods -Wsuggest-override #-Wsuggest-attribute=noreturn 
 CXXFLAGS = -MMD -MP $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(FLAVOR_FLAGS) $(ARCH_FLAGS) $(STANDARD_FLAGS) $(SUGGEST_FLAGS) $(INCLUDE_FLAGS) $(DEFINES)
-#CXX = clang $(CLANG_FLAGS)
-CXX = $(PRE_CXX) i686-pc-serenity-g++
-LD = i686-pc-serenity-g++
-AS = i686-pc-serenity-as
-LINK = i686-pc-serenity-ld
 
-DEFINES = -DSANITIZE_PTRS -DDEBUG -DGIT_COMMIT=\"`git rev-parse --short HEAD`\" -DGIT_BRANCH=\"`git rev-parse --abbrev-ref HEAD`\" -DGIT_CHANGES=\"`git diff-index --quiet HEAD -- && echo "tracked"|| echo "untracked"`\"
+DEFINES += -DSANITIZE_PTRS -DGIT_COMMIT=\"`git rev-parse --short HEAD`\" -DGIT_BRANCH=\"`git rev-parse --abbrev-ref HEAD`\" -DGIT_CHANGES=\"`git diff-index --quiet HEAD -- && echo "tracked"|| echo "untracked"`\"
 
 IPCCOMPILER = $(SERENITY_BASE_DIR)/DevTools/IPCCompiler/IPCCompiler
+
+SUFFIXED_OBJS = $(patsubst %.o,%$(OBJ_SUFFIX).o,$(OBJS))
+
+ifeq ($(VERBOSE),1)
+    QUIET =
+else
+    QUIET = @
+endif
+
+-include $(SUFFIXED_OBJS:%.o=%.d)
+
+%$(OBJ_SUFFIX).o: %.cpp $(EXTRA_SOURCES)
+	@echo "CPP $@"
+	$(QUIET) $(CXX) $(CXXFLAGS) -o $@ -c $<
+
+%.ao: %.S
+	@echo "AS $@"
+	$(QUIET) $(AS) -o $@ $<
+
+$(PROGRAM): $(SUFFIXED_OBJS) $(EXTRA_OBJS)
+	@echo "LINK $(PROGRAM)"
+	$(QUIET) $(CXX) -o $(PROGRAM) $(EXTRA_OBJS) $(SUFFIXED_OBJS) $(LDFLAGS)
+
+$(LIBRARY): $(SUFFIXED_OBJS) $(EXTRA_OBJS)
+	@echo "LIB $@"
+	$(QUIET) $(AR) rcs $@ $(OBJS) $(EXTRA_OBJS) $(LIBS)
+
+.DEFAULT_GOAL := all
+
+all: $(PROGRAM) $(LIBRARY)
+
+EXTRA_CLEAN ?=
+
+clean:
+	@echo "CLEAN"
+	$(QUIET) rm -f $(PROGRAM) $(LIBRARY) $(SUFFIXED_OBJS) $(EXTRA_OBJS) *.d $(EXTRA_CLEAN)
+
+install:
+
+.PHONY: all clean

+ 17 - 0
Makefile.subdir

@@ -0,0 +1,17 @@
+subdirs: $(SUBDIRS)
+$(SUBDIRS):
+	@$(MAKE) -C $@
+
+all: $(subdirs)
+
+SUBDIRS_CLEAN = $(addsuffix .clean,$(SUBDIRS))
+clean: $(SUBDIRS_CLEAN)
+$(SUBDIRS_CLEAN): %.clean:
+	@$(MAKE) -C $* clean
+
+SUBDIRS_INSTALL = $(addsuffix .install,$(SUBDIRS))
+install: $(SUBDIRS_INSTALL)
+$(SUBDIRS_INSTALL): %.install:
+	@$(MAKE) -C $* install
+
+.PHONY: all clean install $(SUBDIRS)

+ 4 - 4
MenuApplets/Audio/Makefile

@@ -1,7 +1,7 @@
-include ../../Makefile.common
+OBJS = main.o
 
-OBJS = main.o 
+PROGRAM = Audio.MenuApplet
 
-APP = Audio.MenuApplet
+LDFLAGS = -laudio -lgui -lipc -ldraw -lthread -lpthread -lcore -lc
 
-include ../Makefile.common
+include ../../Makefile.common

+ 4 - 4
MenuApplets/CPUGraph/Makefile

@@ -1,7 +1,7 @@
-include ../../Makefile.common
+OBJS = main.o
 
-OBJS = main.o 
+PROGRAM = CPUGraph.MenuApplet
 
-APP = CPUGraph.MenuApplet
+LDFLAGS = -laudio -lgui -lipc -ldraw -lthread -lpthread -lcore -lc
 
-include ../Makefile.common
+include ../../Makefile.common

+ 3 - 0
MenuApplets/Makefile

@@ -0,0 +1,3 @@
+SUBDIRS := $(wildcard */.)
+
+include ../Makefile.subdir

+ 0 - 14
MenuApplets/Makefile.common

@@ -1,14 +0,0 @@
-DEFINES += -DUSERLAND
-
-all: $(APP)
-
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -laudio -lgui -lipc -ldraw -lthread -lpthread -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d

+ 8 - 17
Servers/AudioServer/Makefile

@@ -1,17 +1,14 @@
-include ../../Makefile.common
-
-AUDIOSERVER_OBJS = \
+OBJS = \
     main.o \
     ASMixer.o \
     ASClientConnection.o \
     ASEventLoop.o
 
-APP = AudioServer
-OBJS = $(AUDIOSERVER_OBJS)
+PROGRAM = AudioServer
 
-DEFINES += -DUSERLAND
+LDFLAGS = -lc -lcore -lipc -lthread -lpthread
 
-all: $(APP)
+EXTRA_CLEAN = AudioServerEndpoint.h AudioClientEndpoint.h
 
 *.cpp: AudioServerEndpoint.h AudioClientEndpoint.h
 
@@ -21,14 +18,8 @@ AudioServerEndpoint.h: AudioServer.ipc
 AudioClientEndpoint.h: AudioClient.ipc
 	@echo "IPC $<"; $(IPCCOMPILER) $< > $@
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lc -lcore -lipc -lthread -lpthread
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d AudioServerEndpoint.h AudioClientEndpoint.h
+install:
+	mkdir -p $(SERENITY_BASE_DIR)/Root/usr/include/AudioServer/
+	cp *.h $(SERENITY_BASE_DIR)/Root/usr/include/AudioServer/
 
+include ../../Makefile.common

+ 0 - 4
Servers/AudioServer/install.sh

@@ -1,4 +0,0 @@
-#!/bin/sh
-
-mkdir -p ../../Root/usr/include/AudioServer/
-cp ./*.h ../../Root/usr/include/AudioServer/

+ 4 - 19
Servers/LookupServer/Makefile

@@ -1,24 +1,9 @@
-include ../../Makefile.common
-
-LOOKUPSERVER_OBJS = \
+OBJS = \
     LookupServer.o \
     main.o
 
-APP = LookupServer
-OBJS = $(LOOKUPSERVER_OBJS)
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = LookupServer
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lc -lcore
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+LDFLAGS = -lc -lcore
 
+include ../../Makefile.common

+ 3 - 0
Servers/Makefile

@@ -0,0 +1,3 @@
+SUBDIRS := $(wildcard */.)
+
+include ../Makefile.subdir

+ 3 - 17
Servers/ProtocolServer/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 OBJS = \
     PSClientConnection.o \
     Protocol.o \
@@ -8,11 +6,9 @@ OBJS = \
     HttpDownload.o \
     main.o
 
-APP = ProtocolServer
+PROGRAM = ProtocolServer
 
-DEFINES += -DUSERLAND
-
-all: $(APP)
+LDFLAGS = -lc -lcore -lipc
 
 *.cpp: ProtocolServerEndpoint.h ProtocolClientEndpoint.h
 
@@ -22,14 +18,4 @@ ProtocolServerEndpoint.h: ProtocolServer.ipc
 ProtocolClientEndpoint.h: ProtocolClient.ipc
 	@echo "IPC $<"; $(IPCCOMPILER) $< > $@
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lc -lcore -lipc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d ProtocolClientEndpoint.h ProtocolServerEndpoint.h
-
+include ../../Makefile.common

+ 7 - 18
Servers/SystemServer/Makefile

@@ -1,24 +1,13 @@
-include ../../Makefile.common
-
-SYSTEMSERVER_OBJS = \
+OBJS = \
     Service.o \
     main.o
 
-APP = SystemServer
-OBJS = $(SYSTEMSERVER_OBJS)
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = SystemServer
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lc -lcore
+LDFLAGS = -lcore -lc
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+install:
+	mkdir -p ../../Root/usr/include/SystemServer/
+	cp *.h ../../Root/usr/include/SystemServer/
 
+include ../../Makefile.common

+ 0 - 4
Servers/SystemServer/install.sh

@@ -1,4 +0,0 @@
-#!/bin/sh
-
-#mkdir -p ../../Root/usr/include/SystemServer/
-#cp *.h ../../Root/usr/include/SystemServer/

+ 3 - 20
Servers/TTYServer/Makefile

@@ -1,23 +1,6 @@
-include ../../Makefile.common
-
-TTYSERVER_OBJS = \
+OBJS = \
     main.o
 
-APP = TTYServer
-OBJS = $(TTYSERVER_OBJS)
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
-
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lc -lcore
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+PROGRAM = TTYServer
 
+include ../../Makefile.common

+ 4 - 19
Servers/TelnetServer/Makefile

@@ -1,25 +1,10 @@
-include ../../Makefile.common
-
-ECHOSERVER_OBJS = \
+OBJS = \
     Client.o \
     Parser.o \
     main.o
 
-APP = TelnetServer
-OBJS = $(ECHOSERVER_OBJS)
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = TelnetServer
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lc -lcore
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+LDFLAGS = -lcore -lc
 
+include ../../Makefile.common

+ 7 - 15
Servers/WindowServer/Makefile

@@ -1,5 +1,3 @@
-include ../../Makefile.common
-
 OBJS = \
     WSEventLoop.o \
     WSWindow.o \
@@ -18,11 +16,9 @@ OBJS = \
     WSMenuManager.o \
     main.o
 
-APP = WindowServer
-
-DEFINES += -DUSERLAND
+PROGRAM = WindowServer
 
-all: $(APP)
+LDFLAGS = -lc -ldraw -lcore -lthread -lpthread -lipc
 
 *.cpp: WindowServerEndpoint.h WindowClientEndpoint.h
 
@@ -32,14 +28,10 @@ WindowServerEndpoint.h: WindowServer.ipc
 WindowClientEndpoint.h: WindowClient.ipc
 	@echo "IPC $<"; $(IPCCOMPILER) $< > $@
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lc -ldraw -lcore -lthread -lpthread -lipc
+EXTRA_CLEAN = WindowServerEndpoint.h WindowClientEndpoint.h
 
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d WindowServerEndpoint.h WindowClientEndpoint.h
+install:
+	mkdir -p ../../Root/usr/include/WindowServer/
+	cp *.h ../../Root/usr/include/WindowServer/
 
+include ../../Makefile.common

+ 0 - 4
Servers/WindowServer/install.sh

@@ -1,4 +0,0 @@
-#!/bin/sh
-
-mkdir -p ../../Root/usr/include/WindowServer/
-cp ./*.h ../../Root/usr/include/WindowServer/

+ 3 - 17
Shell/Makefile

@@ -1,24 +1,10 @@
-include ../Makefile.common
-
 OBJS = \
     Parser.o \
     LineEditor.o \
     main.o
 
-APP = Shell
-
-DEFINES += -DUSERLAND
-
-all: $(APP)
+PROGRAM = Shell
 
-$(APP): $(OBJS)
-	$(LD) -o $(APP) $(LDFLAGS) $(OBJS) -lcore -lc
-
-.cpp.o:
-	@echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
-
-clean:
-	@echo "CLEAN"; rm -f $(APP) $(OBJS) *.d
+LDFLAGS = -lcore -lc
 
+include ../Makefile.common

+ 6 - 16
Userland/Makefile

@@ -1,28 +1,18 @@
-include ../Makefile.common
-
 SRCS = $(wildcard *.cpp)
 OBJS = ${SRCS:.cpp=.o}
 APPS = ${SRCS:.cpp=}
 
-DEFINES += -DUSERLAND
+EXTRA_CLEAN = $(APPS)
 
-.PHONY: all list clean
+LDFLAGS = -lc -lhtml -lgui -ldraw -laudio -lipc -lthread -lcore -lpcidb -lmarkdown -lpthread -lprotocol -lipc
 
 all: $(OBJS) $(APPS)
 
 list:
 	@echo $(APPS)
 
-clean:
-	@echo "CLEAN"
-	@rm -f $(APPS) $(OBJS) *.d
-
-$(APPS) : % : %.o $(OBJS)
-	@echo "LD $@"
-	@$(LD) -o $@ $(LDFLAGS) $< -lc -lhtml -lgui -ldraw -laudio -lipc -lthread -lcore -lpcidb -lmarkdown -lpthread -lprotocol -lipc
+$(APPS): %: %.o $(OBJS)
+	@echo "LINK $@"
+	$(QUIET) $(CXX) -o $@ $< $(LDFLAGS)
 
-%.o: %.cpp
-	@echo "CXX $<"
-	@$(CXX) $(CXXFLAGS) -o $@ -c $<
-
--include $(OBJS:%.o=%.d)
+include ../Makefile.common