Здравствуйте, SaZ, Вы писали:
SaZ>Пока что, как временное решение на стороне клиента — WSL где запускается линуксовая версия моей тулзы. Но у людей в этой спортивной организации очень слабые компы и они еле тянут всё это дело, поэтому хочется нативное решение.
Я бы не заморачивался и сделал через CI/CD через Azure Devops (бесплатно до 5 человек и 1800 минут сборки в месяц).
Можно выбрать хост (агнета) — винда, linux, macos.
Можно соединить с GitHub например (в т.ч. приватным репозиторием), чтобы собиралось оттуда (или напрямую пушить из локального через git)
3. Если утилита консольная, то менять компилер под платформу, это самое надежное.
4. Можно купить VDS с виндой на неделю, и на нем развернуть сборку. После 3 установки появится батник автоматической настройки окружения.
5. Можно купить VDS с линухом на постоянку в качестве CI/CD сервера (1Гиг памяти) понять на нем Laminar CI/CD и с с него стартовать дорогие сервера на ServerSpace по API (32 памяти 8 ядер) для время сборки (стартовал сервер — собрал — потушил). Но нужно организовать быструю доставку окружения. Мы применяем для интеграционных тестов, поднятие сервера 2 минуты из 20 всего прогона. MSVC будет дольше ехать. (сборка для виндов по рецепту 1)
Итого: вместо "как собрать на моем стеке" перейти к "Где купить стек для сборки дешёво".
Здравствуйте, SaZ, Вы писали:
SaZ>Update: тут внезапно вспомнил, что просили делать такую сортировку, чтобы е и ё трактовались как е. Если что, вот примерно так выглядит выхлоп.
Ну тут имхо и спец. локали не нужны, в функции сравнения заменяем у строк все "ё"/"Ё" на "е"/"Е" и используем сравнение по умолчанию, может не совсем оптимально, но просто: https://coliru.stacked-crooked.com/a/59a76854420c9dc4
ps: для замены подстрок для наглядности заюзал boost, результат в точности как у тебя
Re[3]: Кросс компиляция, посоветуйте best practice
Здравствуйте, SaZ, Вы писали:
SaZ>Здравствуйте, kov_serg, Вы писали:
_>>... _>>У вас кроме русского языка других нет? Если нет выкидывайте ICU и сделайте сортировку utf-8 без ICU там всё очень просто.
SaZ>Пока нет, но как я писал выше — не работает сортировка. Некорректно сравниваются буквы е и ё когда строки в utf-8, я только из-за этого и прикрутил icu. Я понимаю, что можно принудительно выставить локаль и перегнать всё в ascii, но я не ищу костылей.
Ну вот попробовал (msvc/gcc linux), setlocale/strcoll (сравнение строк с учётом локали), всё норм, без всяких доп. преобразований
Здравствуйте, SaZ, Вы писали:
SaZ>ICU нужен потому что приходится делать всякие выборки/сортировки русских имён и фамилий в utf-8, а обработка буквы Ë без icu ведёт себя по разному на разных платформах. Ну то есть если я хочу правильно отсортировать вектор не ascii utf-8 строк по алфавиту то тут без icu никак.
У вас кроме русского языка других нет? Если нет выкидывайте ICU и сделайте сортировку utf-8 без ICU там всё очень просто.
SaZ>Никакого CI я не настраивал, нет на это ресурсов, просто собирал под маком версию для мака, потом загружался в винду и собирал версию для винды. SaZ>Сейчас мне стало лень заморачиваться с виндой, ибо я переехал на армовский мак. И хочу завезти кросс компиляцию.
SaZ>Вопрос: как завезти кросс-компиляцию на моём стеке с минимальной головной болью?
SaZ>Что я пробовал: dockcross + mingw64. Но возникла проблема с кросс-компиляцией ICU (где-то внутри скриптов сборки самого ICU он не понимает разницы между хостом в лице докер контейнера и таргетом — виндой). На отладку и патч сборки ICU недостаточно свободного времени. SaZ>У меня есть стойкое чувство, что я что-то делаю не так. Поиск в интернете по кросс компиляции ICU мне ничего особого не дал.
SaZ>Пока что, как временное решение на стороне клиента — WSL где запускается линуксовая версия моей тулзы. Но у людей в этой спортивной организации очень слабые компы и они еле тянут всё это дело, поэтому хочется нативное решение.
А нахрена людям вообще собирать у себя вашу прогу? Тем более если это "небольшая консольная утилита"? Вам не кажется что вы сильно переусложняете. Скачал, распаковал и алга.
У меня есть пет проект, небольшая консольная утилита которая считает рейтинг детишкам для одной спортивной организации. Берёт на вход текстовые файлы с результатами соревнований, обрабатывает их в соответствии с правилами и ведёт учёт рейтинга. Но не суть.
Стек технологий такой: C++23, boost with ICU, fmt, sqlite_orm.
Сборка: в корне проекта есть vcpkg.json на который натравливается vcpkg и собирает в папку third_party все зависимости. Далее в CMakeLists.txt я просто передаю путь к этой папке и всё прекрасно разруливается через find_package (иногда в режиме CONFIG, иногда нет). Соответственно для винды/мака/линукса я написал простенькие bootstrap.bat/bootstrap.sh которые при необходимости выкачивают vcpkg и собирают зависимости.
Основная платформа разработки: macos, clang21.
ICU нужен потому что приходится делать всякие выборки/сортировки русских имён и фамилий в utf-8, а обработка буквы Ë без icu ведёт себя по разному на разных платформах. Ну то есть если я хочу правильно отсортировать вектор не ascii utf-8 строк по алфавиту то тут без icu никак.
Никакого CI я не настраивал, нет на это ресурсов, просто собирал под маком версию для мака, потом загружался в винду и собирал версию для винды.
Сейчас мне стало лень заморачиваться с виндой, ибо я переехал на армовский мак. И хочу завезти кросс компиляцию.
Вопрос: как завезти кросс-компиляцию на моём стеке с минимальной головной болью?
Что я пробовал: dockcross + mingw64. Но возникла проблема с кросс-компиляцией ICU (где-то внутри скриптов сборки самого ICU он не понимает разницы между хостом в лице докер контейнера и таргетом — виндой). На отладку и патч сборки ICU недостаточно свободного времени.
У меня есть стойкое чувство, что я что-то делаю не так. Поиск в интернете по кросс компиляции ICU мне ничего особого не дал.
Пока что, как временное решение на стороне клиента — WSL где запускается линуксовая версия моей тулзы. Но у людей в этой спортивной организации очень слабые компы и они еле тянут всё это дело, поэтому хочется нативное решение.
Re[2]: Кросс компиляция, посоветуйте best practice
Здравствуйте, kov_serg, Вы писали:
_>... _>У вас кроме русского языка других нет? Если нет выкидывайте ICU и сделайте сортировку utf-8 без ICU там всё очень просто.
Пока нет, но как я писал выше — не работает сортировка. Некорректно сравниваются буквы е и ё когда строки в utf-8, я только из-за этого и прикрутил icu. Я понимаю, что можно принудительно выставить локаль и перегнать всё в ascii, но я не ищу костылей.
_>А нахрена людям вообще собирать у себя вашу прогу? Тем более если это "небольшая консольная утилита"? Вам не кажется что вы сильно переусложняете. Скачал, распаковал и алга.
Потому что я хочу отдать исходники и отказаться от сопровождения по причине того что я не могу это делать оперативно. Но я не люблю отдавать недоделанные вещи. Мне надо так чтобы джун без опыта работы в пол тычка смог всё собрать. А без поддержки никак, потому что каждый год уточняются формулы расчёта, плюс периодически вылазят баги.
И главное, я в целом хочу получить опыт в кросс-компиляции.
Здравствуйте, pilgrim_, Вы писали:
_>... _>Ну вот попробовал (msvc/gcc linux), setlocale/strcoll (сравнение строк с учётом локали), всё норм, без всяких доп. преобразований
Интересно, большое спасибо за то что поковырялись. Как вернусь из командировки — попробую и отпишусь. Может воспроизведу свою исходную проблему. Но я точно помню, что у меня на маке и на винде результаты отличались. Правда я не пробовал хардкодить строки, а читал из текстовых файлов. Но судя по префиксу не должно быть разницы.
Update: тут внезапно вспомнил, что просили делать такую сортировку, чтобы е и ё трактовались как е. Если что, вот примерно так выглядит выхлоп.