Russian Qt Forum

Компиляторы и платформы => Mac OS X => Тема начата: Авварон от Апрель 24, 2019, 22:34



Название: minimum Mac OS version
Отправлено: Авварон от Апрель 24, 2019, 22:34
Я продолжаю насиловать труп QBS=) На моем маке фейлятся некоторые тесты, в частности, тест на минимальную версию макоси в случае, когда она явно не задана. Тест предполагает наличие LC_VERSION_MIN_MACOSX в выхлопе otool -l. Однако я не вижу эту переменную в двух случаях - если я компилирую и мин. версия не задана или мин. версия == текущей версии ос.

Вот есть простой main.cpp:

Код:
$ cat main.cpp 
#include <stdio.h>

int main()
{
    printf("hello\n");
    return 0;
}

Компилируем с дефолтной версией, переменной нет:
Код:
$ export MACOSX_DEPLOYMENT_TARGET=""
$ clang++ main.cpp
$ otool -l a.out | grep LC_VERSION_MIN_MACOSX -A3

Компилируем с текущей версией, переменной нет:
Код:
$ export MACOSX_DEPLOYMENT_TARGET=10.14
$ clang++ main.cpp
$ otool -l a.out | grep LC_VERSION_MIN_MACOSX -A3

Компилируем с предыдущей версией макоси, бинго, переменная есть:
Код:
$ export MACOSX_DEPLOYMENT_TARGET=10.13
$ clang++ main.cpp
$ otool -l a.out | grep LC_VERSION_MIN_MACOSX -A3
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.13
      sdk 10.14

Это что-то поменялось в 10.14? Или всё же где-то сломано в qbs?
Немного смущает версия sdk 10.14 - может быть дело в том, что она не совпадают с версия макоси?
Кто-нибудь может проверить поведение на более древних маках? Ставить ничего не надо кроме XCode.


Название: Re: minimum Mac OS version
Отправлено: kambala от Апрель 25, 2019, 14:59
проверил на системе 10.13 с сдк 10.13: LC_VERSION_MIN_MACOSX всегда выводится.

если MACOSX_DEPLOYMENT_TARGET не задана, то дефолтится к той, что задана в сдк.

но у меня стоит Xcode 10, в котором сдк 10.14...


Название: Re: minimum Mac OS version
Отправлено: kambala от Апрель 25, 2019, 15:08
сейчас еще проверил с Xcode 9 — там вообще MACOSX_DEPLOYMENT_TARGET никак не влияет почему-то. что-то я запутался уже.


Название: Re: minimum Mac OS version
Отправлено: Авварон от Апрель 25, 2019, 15:10
А версию кланга можно обоих XCode?

Раньше в qbs был фоллбэк в -mmacosx-version-min= но теперь его заменила пара -target и переменная окружения.
Не уверен в какой версии кланга появилась переменная.

Спасибо!


Название: Re: minimum Mac OS version
Отправлено: kambala от Апрель 25, 2019, 15:30
я видно там что-то напутал, поэтому MACOSX_DEPLOYMENT_TARGET не сработало. теперь все норм:
Код
Bash
#!/usr/bin/env bash
declare -a deploymentTargets=("" "10.14" "10.13" "10.12")
declare -a xcodes=("" "9" "7")
for xcodeVersion in "${xcodes[@]}"; do
 echo "check Xcode '$xcodeVersion':"
 clangPath=/Applications/Xcode${xcodeVersion}.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++
 $clangPath -v
 
 echo "test without deplyment target:"
 $clangPath main.cpp
 otool -l a.out | grep LC_VERSION_MIN_MACOSX -A3
 
 for deploymentTarget in "${deploymentTargets[@]}"; do
   echo "test with deplyment target '$deploymentTarget':"
   MACOSX_DEPLOYMENT_TARGET="$deploymentTarget" $clangPath main.cpp
   otool -l a.out | grep LC_VERSION_MIN_MACOSX -A3
 done
 echo ""
done
Код:
check Xcode '':
Apple LLVM version 10.0.0 (clang-1000.11.45.5)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
test without deplyment target:
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.13
      sdk 10.13
test with deplyment target '':
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.13
      sdk 10.13
test with deplyment target '10.14':
test with deplyment target '10.13':
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.13
      sdk 10.13
test with deplyment target '10.12':
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.12
      sdk 10.13

check Xcode '9':
Apple LLVM version 9.1.0 (clang-902.0.39.2)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode9.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
test without deplyment target:
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.13
      sdk 10.13
test with deplyment target '':
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.13
      sdk 10.13
test with deplyment target '10.14':
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.14
      sdk 10.13
test with deplyment target '10.13':
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.13
      sdk 10.13
test with deplyment target '10.12':
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.12
      sdk 10.13

check Xcode '7':
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode7.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
test without deplyment target:
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.13
      sdk 10.13
test with deplyment target '':
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.13
      sdk 10.13
test with deplyment target '10.14':
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.14
      sdk 10.13
test with deplyment target '10.13':
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.13
      sdk 10.13
test with deplyment target '10.12':
ld: warning: bad symbol action: $ld$weak$os10.12$_utimensat in dylib /usr/lib/system/libsystem_c.dylib
      cmd LC_VERSION_MIN_MACOSX
  cmdsize 16
  version 10.12
      sdk 10.13


Название: Re: minimum Mac OS version
Отправлено: kambala от Апрель 25, 2019, 15:38
странно, что сдк везде пишется 10.13, хотя ведь в Xcode 7 совсем не 10.13. Попробовал через DEVELOPER_DIR — результат тот же... -isysroot тоже не помогает...


Название: Re: minimum Mac OS version
Отправлено: Авварон от Апрель 25, 2019, 16:32
Спасибо за помощь, видимо, достаточно пропатчить тест чтобы он на 10.14 и выше не искал эту переменную=)


Название: Re: minimum Mac OS version
Отправлено: kambala от Апрель 25, 2019, 17:39
вот оно в чем дело:

Код:
Load command 9
       cmd LC_BUILD_VERSION
   cmdsize 32
  platform macos
       sdk 10.13
     minos 10.14
    ntools 1
      tool ld
   version 409.12

нашел тут: https://stackoverflow.com/a/52995622/1971301


Название: Re: minimum Mac OS version
Отправлено: Авварон от Апрель 25, 2019, 21:55
Эх, а я уже закоммитил неверный фикс=(

Вот вроде правильный https://codereview.qt-project.org/#/c/259789/2 Ревью велкам.


Название: Re: minimum Mac OS version
Отправлено: ViTech от Апрель 26, 2019, 11:12
Я продолжаю насиловать труп QBS=)

А почему продолжаете этим заниматься? :) Что обнадёживает? А то я на днях решил таки закопать стюардессу...


Название: Re: minimum Mac OS version
Отправлено: Авварон от Апрель 26, 2019, 11:49

А почему продолжаете этим заниматься? :) Что обнадёживает? А то я на днях решил таки закопать стюардессу...

Кто-то же должен этим заниматься=)
Поправить мелкие баги в QBS проще, чем вспоминать ужасный синтаксис цмейка и переводить все проекты на него. Я в своё время обожрался с ним кактусов, до сих пор стрёмно. Несмотря на отсутствие нормальной документации к QBS (щаз с этим получше), наличие примера в виде QtC позволяет упростить жизнь по сравнению с часами проведенными в (большой и всеобъемлющей) доке к CMake.
Также, лично мне известен опыт одной крупной российской компании, которая сперва сидела на цмейке, а потом написала свою систему сборки, так что не всё так хорошо в датском королевстве.


Название: Re: minimum Mac OS version
Отправлено: ViTech от Апрель 26, 2019, 12:21
Я в своё время обожрался с ним кактусов, до сих пор стрёмно.

А это в какой версии CMake было? Сейчас пробую на нём писать проектные файлы, по сути, достаточно много общего с Qbs получается. С документацией в CMake как-то не очень, почему-то лучше всего по слайдам (https://meetingcpp.com/mcpp/slides/2018/MoreModernCMake.pdf) получается учиться ))). И в том, что в них называется More Modern CMake (v. 3.11  (March 2018)), вроде не так уж всё и ужасно. Его б только наизнанку вывернуть, чтоб швы внутри спрятать, а снаружи нормальный вид оказался :). Было бы хорошо, если бы команды Qbs и CMake объединились и сделали, к примеру, C++Make (по аналогии как С++ - это С с классами): с внешней формой/синтаксисом как в Qbs, и накопленной функциональностью CMake. Но это мечты... Особого распространения Qbs что-то не заметно, а сопровождать две системы сборки для проектов всё таки накладно. Вот и приходится закапывать стюардессу, хотя хороша, зараза :).


Название: Re: minimum Mac OS version
Отправлено: kuzulis от Апрель 26, 2019, 12:34
Цитировать
Кто-то же должен этим заниматься=)

О, нас уже как минимум двое, а то я все переживал :)

Цитировать
Вот и приходится закапывать стюардессу, хотя хороша, зараза

Не, ну ниша то найдется в любом случае... Например я/мы используем QBS для baremetal вместе с обычными "десктопными проектами". Когда, например, есть некий супер-пупер проект, который помимо "десктоп/ембеддед" части имеет также и железную часть (части) где нужно писать еще и хитрые прошивки с хитрыми бутлоадерами и пр. Например, прошивки, содержащие несколько приложений и загрузчиков в одном бинаре, лежащим по разным адресам и пр.. и чтобы сгенерить эту прошивку и скомпоновать кучу всякой "хрени" как раз-таки QBS вне конкуренции, т.к. там есть поддержка (сервис) для работы  в бинарными файлами, которые можно пропатчить как угодно.

Т.е. открываем QtC и сразу из одного мега-проекта можем девелопить как "десктопные" под-проекты, так и "железячные", не отходя от кассы.

ЗЫ: У меня с CMake тож не оч. срослось как-то, особенно в плане работы с "железяками", т.к. там используется не только GCC, но и часто проприетарные IAR, KEIL, что ИМХО, убивает CMake наповал (писать какие-то стремные toolchain файлы? неее... мне проще в QBS добавить что надо и оно будет сразу работать). :)  


Название: Re: minimum Mac OS version
Отправлено: ViTech от Апрель 26, 2019, 12:43
О, нас уже как минимум двое, а то я все переживал :)

Судя по Qbs 1.13 released (https://blog.qt.io/blog/2019/04/18/qbs-1-13-released/), просто так она помирать не собирается, что радует :).


Название: Re: minimum Mac OS version
Отправлено: Авварон от Апрель 26, 2019, 14:27
А это в какой версии CMake было? Сейчас пробую на нём писать проектные файлы, по сути, достаточно много общего с Qbs получается. С документацией в CMake как-то не очень, почему-то лучше всего по слайдам (https://meetingcpp.com/mcpp/slides/2018/MoreModernCMake.pdf) получается учиться ))). И в том, что в них называется More Modern CMake (v. 3.11  (March 2018)), вроде не так уж всё и ужасно. Его б только наизнанку вывернуть, чтоб швы внутри спрятать, а снаружи нормальный вид оказался :). Было бы хорошо, если бы команды Qbs и CMake объединились и сделали, к примеру, C++Make (по аналогии как С++ - это С с классами): с внешней формой/синтаксисом как в Qbs, и накопленной функциональностью CMake. Но это мечты... Особого распространения Qbs что-то не заметно, а сопровождать две системы сборки для проектов всё таки накладно. Вот и приходится закапывать стюардессу, хотя хороша, зараза :).

Я забросил CMake где-то на версии 3.4, которая уже "modern"; хотя сейчас установлена одна из свежих для сторонних проектов. Другое дело, что там есть обратная совместимость и старый немодерн говнокод всё равно работает. Но это же и минус - неясно - как делать "правильно" - гуглишь, а   них проект 5летней давности с тем же говнокодом как  у тебя. Потом, как это апгрейдить? Одно дело, когда у проект на десяток файлов и их можно перелопатить в соответствии с новыми веяниями, а когда проект огромный?

*Брюжжит:* я помню старые добрые времена, когда automoc не работал "искаропки" и чтобы заинклюдить мок в цпп надо было шаманить с бубнами. Потом появился автомок, но не по дефолту. Потом вроде сделали "искаропки"... Но это все какие-то весьма детские болячки - кеды собираются с цмейком последние 30 лет, и что, никому не нужен был автомок?
А еще синтаксис как заюзать в проекте qt4 и qt5 различался, а теперь, я слышал, новый ввели... Доколе?


Название: Re: minimum Mac OS version
Отправлено: Авварон от Апрель 26, 2019, 14:35

О, нас уже как минимум двое, а то я все переживал :)


Я ленивый слишком и застрял надолго с поддержкой clang-cl - богомерзкая венда, всё неудобно, желания ковыряться в этом мало=) Как подумаю что еще оригинальный clang надо добавлять, так совсем грустно становится.

Из интересных issue на след версию мне оч понравился баг  (https://bugreports.qt.io/browse/QBS-118)с qbs gui  (https://bugreports.qt.io/browse/QBS-34)по аналогии с cmake gui. К черту Среатор, скачал qbs, открыл проект, нажал пупочку, всё собралось, поставилось, запаковалось. Красота же! Но, возможно, я недооцениваю объем работы...


Название: Re: minimum Mac OS version
Отправлено: ViTech от Апрель 26, 2019, 14:58
Из интересных issue на след версию мне оч понравился баг  (https://bugreports.qt.io/browse/QBS-118)с qbs gui  (https://bugreports.qt.io/browse/QBS-34)по аналогии с cmake gui.

Да уж... тем "багам" скоро по 10 лет будет )). Кстати, в Creator'e в Build Settings для CMake запилили табличку с параметрами конфигурации. А для Qbs отделались одной строчкой properties в Build Steps. Маловато будет.

К черту Среатор, скачал qbs, открыл проект, нажал пупочку, всё собралось, поставилось, запаковалось. Красота же! Но, возможно, я недооцениваю объем работы...

Может там много возни с toolchain, Qt Kit, Qbs profile и прочими неинтересными штуками.


Название: Re: minimum Mac OS version
Отправлено: Авварон от Апрель 26, 2019, 15:31

Да уж... тем "багам" скоро по 10 лет будет )). Кстати, в Creator'e в Build Settings для CMake запилили табличку с параметрами конфигурации. А для Qbs отделались одной строчкой properties в Build Steps. Маловато будет.
Ну там много таких багов, их сложно в одно рыло сделать=) Попробуй, забутстрапь qbs... Или хотя бы перейди с QtScript на QtDeclarative.
К сожалению, фанбоев симейка гораздо больше, чем фанбоев qbs, которые готовы есть кактус и пилить поддержку cmake в qt/qtc.
Так-то формочку сделать не проблема, проблема что в qbs слишком много разных уровней - это и проект, и модули... Возможно, это архитектурная проблема, а возможно, достаточно просто сделать метод, который возвращает дефолтные значения всех пропертей в виде дерева.
Я напишу в рассылку и спрошу, как это правильно делать.


Может там много возни с toolchain, Qt Kit, Qbs profile и прочими неинтересными штуками.

С т.з. qbs это всё "профили", а с 1.13 setup-qt канул в лету, всё, что нужно профилю - это путь к qmake... Остальное - это оверинжениринг креатора. Хотя не спорю, разделение на киты удобнее, чем дерево пропертей профилей=)


Название: Re: minimum Mac OS version
Отправлено: ViTech от Апрель 26, 2019, 16:03
Попробуй, забутстрапь qbs... Или хотя бы перейди с QtScript на QtDeclarative.
К сожалению, фанбоев симейка гораздо больше, чем фанбоев qbs, которые готовы есть кактус и пилить поддержку cmake в qt/qtc.

Так вроде сами кутешники одной из основных причин отказа от Qbs называли её зависимость от Qt. Похоже то, что обеспечило возможность быстрого старта (javascript в файлах проектов), в конечном счете стало основным тормозом :). Бог С++ бдит и карает неверных )).

Так-то формочку сделать не проблема, проблема что в qbs слишком много разных уровней - это и проект, и модули... Возможно, это архитектурная проблема, а возможно, достаточно просто сделать метод, который возвращает дефолтные значения всех пропертей в виде дерева.

А как узнать, какие свойства нужно выводить (подлежат конфигурированию/влияют на сборку)? Так-то свойств много всяких внутренних/временных.


Название: Re: minimum Mac OS version
Отправлено: Авварон от Апрель 26, 2019, 16:16
А как узнать, какие свойства нужно выводить (подлежат конфигурированию/влияют на сборку)? Так-то свойств много всяких внутренних/временных.

Тащем-то я это и имел виду=)
Можно отфильтровать стандартные модули (cpp, Qt.*) и оставить только кастомные. Идеально - только те, что добавил сам юзер.


Название: Re: minimum Mac OS version
Отправлено: ViTech от Апрель 26, 2019, 16:35
Можно отфильтровать стандартные модули (cpp, Qt.*) и оставить только кастомные. Идеально - только те, что добавил сам юзер.

Например, у меня в imports/modules много внутренних/временных свойств может быть, их не нужно в окне конфигурации выводить. По-хорошему, их как-то отмечать надо, что их можно снаружи конфигурировать. Так что, как обычно, не всё так просто :).