1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2010-2014 Intel Corporation
3  */
4 
5 #include <stdio.h>
6 
7 #include <rte_common.h>
8 #include <rte_cpuflags.h>
9 
10 /**
11  * Checks if the machine is adequate for running the binary. If it is not, the
12  * program exits with status 1.
13  */
14 void
15 rte_cpu_check_supported(void)
16 {
17 	if (!rte_cpu_is_supported())
18 		exit(1);
19 }
20 
21 int
22 rte_cpu_is_supported(void)
23 {
24 	/* This is generated at compile-time by the build system */
25 	static const enum rte_cpu_flag_t compile_time_flags[] = {
26 			RTE_COMPILE_TIME_CPUFLAGS
27 	};
28 	unsigned count = RTE_DIM(compile_time_flags), i;
29 	int ret;
30 
31 	for (i = 0; i < count; i++) {
32 		ret = rte_cpu_get_flag_enabled(compile_time_flags[i]);
33 
34 		if (ret < 0) {
35 			fprintf(stderr,
36 				"ERROR: CPU feature flag lookup failed with error %d\n",
37 				ret);
38 			return 0;
39 		}
40 		if (!ret) {
41 			fprintf(stderr,
42 			        "ERROR: This system does not support \"%s\".\n"
43 			        "Please check that RTE_MACHINE is set correctly.\n",
44 			        rte_cpu_get_flag_name(compile_time_flags[i]));
45 			return 0;
46 		}
47 	}
48 
49 	return 1;
50 }
51