Synthetic biology has successfully advanced our ability to design complex, time-varying genetic circuits executing precisely specified gene expression patterns. However, such circuits usually require regulatory genes whose only purpose is to regulate the expression of other genes. When designing very small genetic constructs, such as viral genomes, we may want to avoid introducing such auxiliary gene products. To this end, here we demonstrate that varying only the placement and strengths of promoters, terminators, and RNase cleavage sites in a computational model of a bacteriophage genome is sufficient to achieve solutions to a variety of basic expression patterns. We discover these solutions by computationally evolving genomes to reproduce desired target expression patterns. Our approach shows non-trivial patterns can be evolved, including patterns in which the relative ordering of genes by abundance changes over time. We find that some patterns are easier to evolve than others, and different genomes that express comparable expression patterns may differ in their genetic architecture. Our work opens up a novel avenue to genome engineering via fine-tuning the balance of gene expression and gene degradation rates.