Optimizing compilers provide users with compiler options to maximize program performance. The selection of compiler options is important as the resulted performance can vary significantly. The best combination of compiler options is not only dependent on the program itself, but it also is highly related to the configuration of the system and the architecture of the processor that the program runs on. The determination of the best combination of compiler options is very complicated, as its complexity grows exponentially with the number of the optimization options the compiler offers. Many previous work attempts to shorten the search time by reducing the complexity of the problem. However, most of them focus on computational intensive applications, which run with little or no invocation of kernel functions and device input/output activities, which often dominate system performance in specific embedded environment, such as network appliance. This paper aims at system-wide compiler optimizations selection for embedded applications. We proposed an automated framework to judiciously select the compiler options not only for the control software in the user space but also for the associated kernel functions which perform the I/O operations for an embedded application. For this framework, we implemented compiler optimization selection algorithms and evaluated its efficiencies with and without performance monitoring hardware support. We argue that our framework is a platform-independent and system-level compiler options selection framework. Our experience in optimizing the performance of the embedded application on a production storage appliance show that an I/O-intensive application composed by various kernel modules device drivers under Linux can be optimized effectively and systematically.