diff --git a/Makefile b/Makefile
index 4d0941f00610c334a98c5b88b6faa5c48e57090c..d35f09d9cabe6366d828013de47a198f8af5fc17 100644
--- a/Makefile
+++ b/Makefile
@@ -31,7 +31,7 @@ clean:
 fmt:
 	./fmt.sh
 
-libc: $(BUILD)/debug/libc.a $(BUILD)/debug/libcrt0.a
+libc: $(BUILD)/debug/libc.a $(BUILD)/debug/crt0.o
 
 libm: $(BUILD)/openlibm/libopenlibm.a
 
@@ -41,14 +41,14 @@ test: all
 $(BUILD)/debug/libc.a: $(SRC)
 	cargo build $(CARGOFLAGS)
 
-$(BUILD)/debug/libcrt0.a: $(SRC)
-	cargo build --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS)
+$(BUILD)/debug/crt0.o: $(SRC)
+	cargo rustc --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@
 
 $(BUILD)/release/libc.a: $(SRC)
 	cargo build --release $(CARGOFLAGS)
 
-$(BUILD)/release/libcrt0.a: $(SRC)
-	cargo build --release --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS)
+$(BUILD)/release/crt0.o: $(SRC)
+	cargo rustc --release --manifest-path src/crt0/Cargo.toml $(CARGOFLAGS) -- --emit obj=$@
 
 $(BUILD)/openlibm: openlibm
 	rm -rf $@ $@.partial
diff --git a/tests/Makefile b/tests/Makefile
index efc09a0377c31f85b3672697ca2ffb9c3856a887..a5cdc494c2e557cb271afe3c11fbc55b18f5aa2c 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -96,7 +96,7 @@ CFLAGS=\
 	-I ../target/openlibm/src \
 
 HEADLIBS=\
-	../target/debug/libcrt0.a
+	../target/debug/crt0.o
 
 TAILLIBS=\
 	../target/debug/libc.a \