This is based on a talk on compilers I listened to a while back, but I, unfortunately, can't remember when or where.
Create the shortest compiler in any language that can compile itself. Target any reasonable ISA (68K, x86, MIPS, ARM, SPARC, IBM BAL, etc.) that doesn't have a "compile-program" instruction (this may exclude some versions of VAX). Read source programs from stdin and print generated code to stdout. You may use the standard C library for I/O and string processing (e.g., _printf). You do notdon't need to compile the whole language, just the compiler. just any subset that contains the compiler (i.e., just printing an assembly language quine, while impressive, does not count as a solution.)