ArchCode: Incorporating Software Requirements in Code Generation with Large Language Models