Russian Qt Forum
Апрель 25, 2024, 23:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: minimum Mac OS version  (Прочитано 12672 раз)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« : Апрель 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.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #1 : Апрель 25, 2019, 14:59 »

проверил на системе 10.13 с сдк 10.13: LC_VERSION_MIN_MACOSX всегда выводится.

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

но у меня стоит Xcode 10, в котором сдк 10.14...
« Последнее редактирование: Апрель 25, 2019, 15:01 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #2 : Апрель 25, 2019, 15:08 »

сейчас еще проверил с Xcode 9 — там вообще MACOSX_DEPLOYMENT_TARGET никак не влияет почему-то. что-то я запутался уже.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #3 : Апрель 25, 2019, 15:10 »

А версию кланга можно обоих XCode?

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

Спасибо!
« Последнее редактирование: Апрель 25, 2019, 15:12 от Авварон » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #4 : Апрель 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
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #5 : Апрель 25, 2019, 15:38 »

странно, что сдк везде пишется 10.13, хотя ведь в Xcode 7 совсем не 10.13. Попробовал через DEVELOPER_DIR — результат тот же... -isysroot тоже не помогает...
« Последнее редактирование: Апрель 25, 2019, 15:50 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #6 : Апрель 25, 2019, 16:32 »

Спасибо за помощь, видимо, достаточно пропатчить тест чтобы он на 10.14 и выше не искал эту переменную=)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #7 : Апрель 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
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #8 : Апрель 25, 2019, 21:55 »

Эх, а я уже закоммитил неверный фикс=(

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

Сообщений: 858



Просмотр профиля
« Ответ #9 : Апрель 26, 2019, 11:12 »

Я продолжаю насиловать труп QBS=)

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

Пока сам не сделаешь...
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #10 : Апрель 26, 2019, 11:49 »


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

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

Сообщений: 858



Просмотр профиля
« Ответ #11 : Апрель 26, 2019, 12:21 »

Я в своё время обожрался с ним кактусов, до сих пор стрёмно.

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

Пока сам не сделаешь...
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #12 : Апрель 26, 2019, 12:34 »

Цитировать
Кто-то же должен этим заниматься=)

О, нас уже как минимум двое, а то я все переживал Улыбающийся

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

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

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

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

ArchLinux x86_64 / Win10 64 bit
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #13 : Апрель 26, 2019, 12:43 »

О, нас уже как минимум двое, а то я все переживал Улыбающийся

Судя по Qbs 1.13 released, просто так она помирать не собирается, что радует Улыбающийся.
Записан

Пока сам не сделаешь...
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #14 : Апрель 26, 2019, 14:27 »

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

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

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


Страница сгенерирована за 0.069 секунд. Запросов: 23.