Split libs with make + general make cleanups
diff --git a/library/.gitignore b/library/.gitignore
index 54e4276..3a63a63 100644
--- a/library/.gitignore
+++ b/library/.gitignore
@@ -1,4 +1,4 @@
 *.o
-libmbedtls.*
+libmbed*
 *.sln
 *.vcxproj
diff --git a/library/Makefile b/library/Makefile
index 976b1f0..9fd7f81 100644
--- a/library/Makefile
+++ b/library/Makefile
@@ -74,37 +74,86 @@
 
 .SILENT:
 
+.PHONY: all static shared clean
+
 ifndef SHARED
 all: static
 else
 all: shared static
 endif
 
-static: libmbedtls.a
+static: libmbedcrypto.a libmbedx509.a libmbedtls.a
 
-shared: libmbedtls.$(DLEXT)
+shared: libmbedcrypto.$(DLEXT) libmbedx509.$(DLEXT) libmbedtls.$(DLEXT)
 
-libmbedtls.a: $(OBJS)
+# tls
+libmbedtls.a: $(OBJS_TLS)
 	echo "  AR    $@"
-	$(AR) rc $@ $(OBJS)
+	$(AR) rc $@ $(OBJS_TLS)
 	echo "  RL    $@"
 	$(AR) s $@
 
-libmbedtls.$(SOEXT): $(OBJS)
+libmbedtls.$(SOEXT): $(OBJS_TLS)
 	echo "  LD    $@"
-	$(CC) -shared -Wl,-soname,$@ $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@ $(OBJS)
+	$(CC) -shared -Wl,-soname,$@ $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@ $(OBJS_TLS)
 
 libmbedtls.so: libmbedtls.$(SOEXT)
 	echo "  LN    $@ -> libmbedtls.$(SOEXT)"
 	ln -sf libmbedtls.$(SOEXT) $@
 
-libmbedtls.dylib: $(OBJS)
+libmbedtls.dylib: $(OBJS_TLS)
 	echo "  LD    $@"
-	$(CC) -dynamiclib $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@ $(OBJS)
+	$(CC) -dynamiclib $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@ $(OBJS_TLS)
 
-libmbedtls.dll: $(OBJS)
+libmbedtls.dll: $(OBJS_TLS)
 	echo "  LD    $@"
-	$(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,$@.a -o $@ $(OBJS) -lws2_32 -lwinmm -lgdi32 $(LOCAL_LDFLAGS) $(LDFLAGS)
+	$(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,$@.a -o $@ $(OBJS_TLS) -lws2_32 -lwinmm -lgdi32 $(LOCAL_LDFLAGS) $(LDFLAGS)
+
+# x509
+libmbedx509.a: $(OBJS_X509)
+	echo "  AR    $@"
+	$(AR) rc $@ $(OBJS_X509)
+	echo "  RL    $@"
+	$(AR) s $@
+
+libmbedx509.$(SOEXT): $(OBJS_X509)
+	echo "  LD    $@"
+	$(CC) -shared -Wl,-soname,$@ $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@ $(OBJS_X509)
+
+libmbedx509.so: libmbedx509.$(SOEXT)
+	echo "  LN    $@ -> libmbedx509.$(SOEXT)"
+	ln -sf libmbedx509.$(SOEXT) $@
+
+libmbedx509.dylib: $(OBJS_X509)
+	echo "  LD    $@"
+	$(CC) -dynamiclib $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@ $(OBJS_X509)
+
+libmbedx509.dll: $(OBJS_X509)
+	echo "  LD    $@"
+	$(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,$@.a -o $@ $(OBJS_X509) -lws2_32 -lwinmm -lgdi32 $(LOCAL_LDFLAGS) $(LDFLAGS)
+
+# crypto
+libmbedcrypto.a: $(OBJS_CRYPTO)
+	echo "  AR    $@"
+	$(AR) rc $@ $(OBJS_CRYPTO)
+	echo "  RL    $@"
+	$(AR) s $@
+
+libmbedcrypto.$(SOEXT): $(OBJS_CRYPTO)
+	echo "  LD    $@"
+	$(CC) -shared -Wl,-soname,$@ $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@ $(OBJS_CRYPTO)
+
+libmbedcrypto.so: libmbedcrypto.$(SOEXT)
+	echo "  LN    $@ -> libmbedcrypto.$(SOEXT)"
+	ln -sf libmbedcrypto.$(SOEXT) $@
+
+libmbedcrypto.dylib: $(OBJS_CRYPTO)
+	echo "  LD    $@"
+	$(CC) -dynamiclib $(LOCAL_LDFLAGS) $(LDFLAGS) -o $@ $(OBJS_CRYPTO)
+
+libmbedcrypto.dll: $(OBJS_CRYPTO)
+	echo "  LD    $@"
+	$(CC) -shared -Wl,-soname,$@ -Wl,--out-implib,$@.a -o $@ $(OBJS_CRYPTO) -lws2_32 -lwinmm -lgdi32 $(LOCAL_LDFLAGS) $(LDFLAGS)
 
 .c.o:
 	echo "  CC    $<"
@@ -112,8 +161,7 @@
 
 clean:
 ifndef WINDOWS
-	rm -f *.o libmbedtls.*
-endif
-ifdef WINDOWS
-	del /Q /F *.o libmbedtls.*
+	rm -f *.o libmbed*
+else
+	del /Q /F *.o libmbed*
 endif