TESTS += $(SOURCES:%.c=$(WORKDIR)/%.oir.prg)
 TESTS += $(SOURCES:%.c=$(WORKDIR)/%.or.prg)
 
-# FIXME: actually use/build differently optimized programs here
-
 all: $(TESTS)
 
 # should compile, but then hangs in an endless loop
 $(WORKDIR)/endless%prg: endless.c
-       $(CL65) $(CC65FLAGS) $< -o $@
+       $(CL65) $(subst .,,($*:.o%=-O%)) $(CC65FLAGS) $< -o $@
        ! $(SIM65) $(SIM65FLAGS) $@
 
 # these need reference data that cant be generated by a host compiled program
 # in a useful way
 $(WORKDIR)/limits%prg: limits.c
-       $(CL65) $(CC65FLAGS) $< -o $@
+       $(CL65) $(subst .,,($*:.o%=-O%)) $(CC65FLAGS) $< -o $@
        $(SIM65) $(SIM65FLAGS) $@ > $(WORKDIR)/limits.out
        $(DIFF) $(WORKDIR)/limits.out limits.ref
 
 # the rest are tests that fail currently for one reason or another
 $(WORKDIR)/fields%prg: fields.c
        @echo "FIXME: " $@ "will currently fail"
-       $(CL65) $(CC65FLAGS) $< -o $@
+       $(CL65) $(subst .,,($*:.o%=-O%)) $(CC65FLAGS) $< -o $@
        -$(SIM65) $(SIM65FLAGS) $@
 $(WORKDIR)/sitest%prg: sitest.c
        @echo "FIXME: " $@ "will currently fail"
-       -$(CL65) $(CC65FLAGS) $< -o $@
+       -$(CL65) $(subst .,,($*:.o%=-O%)) $(CC65FLAGS) $< -o $@
        -$(SIM65) $(SIM65FLAGS) $@
 
 clean: