Перевірка часу конфігурації / компіляції функцій, від яких залежить ваш код, - це шлях. Перевірка конкретних пристроїв є проблематичною, оскільки уникнути помилкових спрацьовувань практично неможливо (хтось може навмисно брехати вам, навіть не докладаючи зусиль), а мета таких перевірок - відповісти на питання: "чи можу я тут побудувати? Якщо так, який шлях коду повинен бути Я використовую? " , не "це пристрій, який мені подобається ім'я?"
Відповідно до цієї посилання (чудове джерело інформації про заздалегідь задані макроси) ви можете використовувати макрос:
__arm__
Для виявлення комбінації GCC / Arm.
Я перевірив це на своєму:
#include <stdio.h>
int main() {
#ifdef __arm__
printf("Why yes it is, thank you\n");
#endif
return 0;
}
Що справді надрукувало повідомлення.
Зауважте, що це також охопить усі пристрої Arm, тому моя рекомендація буде використовувати частину інструменту збирання (наприклад cmake/autoconf
), щоб перевірити їх наявність /opt/vc/include/bcm_host.h
.
Наприклад, с
AC_CHECK_HEADERS
в автоконку:
AC_CHECK_HEADERS(/opt/vc/include/bcm_host.h)
причини:
HAVE__OPT_VC_INCLUDE_BCM_HOST_H
визначається в config.h
Або для CMake:
include(CheckIncludeFile)
CHECK_INCLUDE_FILE(/opt/vc/include/bcm_host.h BCMHOST)
Я не думаю, що є кращий спосіб виявити це насправді - ви могли налаштувати / CMake шукати конкретні апаратні речі, але там будуть інші платформи з тим же SoC, так що навіть це не дуже надійно і про що ви насправді дбаєте. - це існування цього заголовкового файлу, оскільки він інформує вас про те, як створити задану ціль. Навіть якщо ви можете довести, що це Raspberry Pi, але ви не можете знайти правильний файл заголовка, який ви все ще застрягли, і помилка на початку краще, ніж помилка складання.
Якщо ви дійсно хочете перевірити, чи це Pi (або достатньо схожий), ви можете вдатися до чогось простого, наприклад:
grep -o BCM2708 /proc/cpuinfo
або (для малинових 2 і 3):
grep -o BCM2709 /proc/cpuinfo
в час налаштування, який буде відповідати SoC, заснований Raspberry Pi.
Ви можете скористатися ще кількома тестами (наприклад, USB допоможе вам розібратися в цьому трохи більше і навіть натякнути, якщо це пристрій моделі А або В), але нічого не достатньо сказати напевно.
Ви можете перевірити хеші файлів у / boot на відомий список, але тоді ви не зможете створити, якщо є оновлення мікропрограмного забезпечення чи неофіційне, про яке ви не знали. (Або інші подібні пристрої, які не належать до Pi, з тією ж установкою завантаження)
__ARMEL__
спосіб визначення точно такий, як ваш__arm__
. Я просто не намагався знайти найкращий макрос поки.