diff --git a/Makefile b/Makefile
index 073ff53..98d7592 100644
--- a/Makefile
+++ b/Makefile
@@ -1,50 +1,19 @@
 -include config.mk
 
-CC        = i686-w64-mingw32-gcc
-CXX       = i686-w64-mingw32-g++
-STRIP    ?= i686-w64-mingw32-strip
-WINDRES  ?= i686-w64-mingw32-windres
-LDFLAGS   = -Wl,--enable-stdcall-fixup -s -static
+TARGET    = ddraw.dll
+LDFLAGS   = -Wl,--enable-stdcall-fixup -s -static -shared
 CFLAGS    = -Iinc -O2 -march=i486 -Wall
 LIBS      = -lgdi32 -lwinmm -lpsapi -ldbghelp -lole32
 
-FILES = src/IDirect3D/IDirect3D.c \
-        src/IDirect3D/IDirect3D2.c \
-        src/IDirect3D/IDirect3D3.c \
-        src/IDirect3D/IDirect3D7.c \
-        src/IDirectDraw/IDirectDraw.c \
-        src/IDirectDraw/IDirectDrawPalette.c \
-        src/IDirectDraw/IDirectDrawClipper.c \
-        src/IDirectDraw/IDirectDrawSurface.c \
-        src/IDirectDraw/IDirectDrawGammaControl.c \
-        src/IAMMediaStream/IAMMediaStream.c \
-        src/crc32.c \
-        src/ini.c \
-        src/blt.c \
-        src/dd.c \
-        src/ddpalette.c \
-        src/ddsurface.c \
-        src/ddclipper.c \
-        src/render_ogl.c \
-        src/render_gdi.c \
-        src/render_d3d9.c \
-        src/debug.c \
-        src/mouse.c \
-        src/winapi_hooks.c \
-        src/screenshot.c \
-        src/config.c \
-        src/lodepng.c \
-        src/directinput.c \
-        src/hook.c \
-        src/dllmain.c \
-        src/wndproc.c \
-        src/utils.c \
-        src/fps_limiter.c \
-        src/opengl_utils.c
+CC        = i686-w64-mingw32-gcc
+WINDRES  ?= i686-w64-mingw32-windres
 
-all:
-	$(WINDRES) -J rc ddraw.rc ddraw.rc.o
-	$(CC) $(CFLAGS) $(LDFLAGS) -shared -o ddraw.dll $(FILES) ddraw.def ddraw.rc.o $(LIBS)
+.PHONY: clean all
+all: $(TARGET)
+
+$(TARGET): $(wildcard src/*.c) $(wildcard src/*/*.c)
+	$(WINDRES) -J rc res.rc res.o
+	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ exports.def res.o $(LIBS)
 
 clean:
-	$(RM) ddraw.dll ddraw.rc.o
+	$(RM) $(TARGET) res.o
diff --git a/cnc-ddraw.vcxproj b/cnc-ddraw.vcxproj
index b1c9390..1a81dbb 100644
--- a/cnc-ddraw.vcxproj
+++ b/cnc-ddraw.vcxproj
@@ -111,7 +111,7 @@
     <ClInclude Include="inc\wndproc.h" />
   </ItemGroup>
   <ItemGroup>
-    <ResourceCompile Include="ddraw.rc" />
+    <ResourceCompile Include="res.rc" />
   </ItemGroup>
   <ItemGroup />
   <PropertyGroup Label="Globals">
@@ -217,7 +217,7 @@
     <Link>
       <SubSystem>Windows</SubSystem>
       <AdditionalDependencies>dbghelp.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>ddraw.def</ModuleDefinitionFile>
+      <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
     </Link>
     <PostBuildEvent>
       <Command>
@@ -244,7 +244,7 @@ if NOT "$(LocalDebuggerWorkingDirectory)" == "$(ProjectDir)" if exist "$(LocalDe
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalDependencies>winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>ddraw.def</ModuleDefinitionFile>
+      <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
     </Link>
     <PostBuildEvent>
       <Command>
@@ -271,7 +271,7 @@ if NOT "$(LocalDebuggerWorkingDirectory)" == "$(ProjectDir)" if exist "$(LocalDe
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalDependencies>winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>ddraw.def</ModuleDefinitionFile>
+      <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
     </Link>
     <PostBuildEvent>
       <Command>
@@ -298,7 +298,7 @@ if NOT "$(LocalDebuggerWorkingDirectory)" == "$(ProjectDir)" if exist "$(LocalDe
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalDependencies>dbghelp.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>ddraw.def</ModuleDefinitionFile>
+      <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
     </Link>
     <PostBuildEvent>
       <Command>
@@ -325,7 +325,7 @@ if NOT "$(LocalDebuggerWorkingDirectory)" == "$(ProjectDir)" if exist "$(LocalDe
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalDependencies>dbghelp.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <ModuleDefinitionFile>ddraw.def</ModuleDefinitionFile>
+      <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
     </Link>
     <PostBuildEvent>
       <Command>
diff --git a/ddraw.def b/exports.def
similarity index 100%
rename from ddraw.def
rename to exports.def
diff --git a/ddraw.rc b/res.rc
similarity index 100%
rename from ddraw.rc
rename to res.rc