CMake + atom + .clang_complete

С некоторый пор я переехал с emacs’а на atom, который выглядел как более современная замена. Что для меня было важным — у него очень хорошая работа с CMake и автодополнение для оного. Вскоре ко всему этому делу я прикрутил lint и autocomplete через clang. И то и другое мне понравилось, но хотело актуального .clang_autocomplete в корне проекта. Однако, если проект получает от системы сборки кучу дефайнов, то управлять этим файликом руками становится больно и неприятно. Выход — генерить его на лету. Вот мой костыль для CMake:

message(STATUS "Generarating ${CMAKE_SOURCE_DIR}/.clang_complete")
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
file(WRITE ${CMAKE_SOURCE_DIR}/.clang_complete "")
foreach(dir ${dirs})
  file(APPEND ${CMAKE_SOURCE_DIR}/.clang_complete "-I${dir}\n")
endforeach()
string(REPLACE "'" "" CMAKE_C_FLAGS_SPLIT ${CMAKE_C_FLAGS})
string(REPLACE " " ";" CMAKE_C_FLAGS_SPLIT ${CMAKE_C_FLAGS_SPLIT})
foreach(flag ${CMAKE_C_FLAGS_SPLIT})
  file(APPEND ${CMAKE_SOURCE_DIR}/.clang_complete "${flag}\n")
endforeach()

Очевидно, если мы используем C++ в проекте, то и обрабатывать схожим образом надо переменную CMAKE_CXX_FLAGS. У этого кода есть очевидное ограничение: Если мы передаем через -D дефайны с несколькими словами — нас ждет облом (напр. -DRELEASE_CODENAME=»Black Burned Cookies»)

Избавляемся от кипятильника: x86 -> armv7l для домашнего сервера

Мой домашний сервачок имеет долгую историю. Начиналось все со старого Pentium 4, с 20GB HDD и FreeBSD 6.2 в далеком… Какой это год-то был?
Так или иначе, после нескольких лет работы, трижды паянная материнка была отправлена в шкаф к прочему хламу, и была заменена на свеженький тогда intel atom D410, фряху где-то в районе 7 с чем-то заменил linux, сначала debian, потом agilia, потом арч. В общем сервер был хороший, тихий, не пытающийся взлететь на вентиляторах. И в общем-то хватало, у меня же тут чай не вебсервис на овер 9000 хитов в минуту.
В общем, жило это себе тихо мирно, иногда падало под HAD-эффектом, но хватало.
Теперь, же пришла мне в голову мысля выпилить этот тормозной кипятильник по имени x86, и поставить что-то на armv7l. Плюсы на лицо:

  • Жрет 10 ватт в пике
  • Пассивное охлаждение
  • Реактивный eMMC для системы
  • 4 ядра
  • Есть всегда терминал на последовательный порт — в случае факапа не надо тащить в, пардон, туалет (да, там у меня серверная) монитор, или изымать оборудование оттуда. К бивису на дешевых материнках по уарту не достучишься.

Итак, железкой был выбран ODROID-X2 на самсунговском Exynos4412 Prime, как нечто самое оптимальное. ODROID-U2 мне не понравился тем, что NAND впаян, eMMC как-то проще заменить, да и eMMC если память не изменяет быстрее.

IMG_20130521_133759

Собственно, опытом доработки этой шелезяки напильником я и хочу поделиться.

IMG_20130516_104144

(далее…)