Hardware Variability-Aware Embedded Software Adaptation