Ada_Ru форум

Обсуждение языка Ада

[ada_ru] Опять про кро сс-компилляцию

Оставить новое сообщение

Сообщения

sv_lary
[ada_ru] Опять про кро сс-компилляцию
2017-03-28 06:17:45
Здравствуйте! 

Возвращаюсь к своей любимой теме :-)

Ситуация:

 Есть проограмма на Ada - не важно, что в ней Есть кросс-компиллер для ARM, к примеру Исходники
лежат в src, объектники в obj и исполняемый в elf

 Вручную всё собирается с помощью таких команд:

arm-linux-gnueabihf-gcc-5 -c ./src/hello.adb -o ./bin/hello.o
arm-linux-gnueabihf-gnatbind ./bin/hello.ali
arm-linux-gnueabihf-gnatlink ./bin/hello.ali -o ./elf/hello

Однако это как-то скучно будет для большого проекта. Написал крохотный файл проекта:

project Ada_First is

   for Target use "arm-linux-gnueabihf";
   for Languages use ("Ada");
   for Source_Dirs use ("src");
   for Object_Dir use "./bin";
   for Exec_Dir use "elf";
   for Main use ("main.adb");

end Ada_First;

Однако, gnatmake никак не реагирует на строку 

for Target use "arm-linux-gnueabihf";
 
Просто создаёт ELF для х86_64.  Если же задаю этот параметр в командной строке:

gnatmake --target=arm-linux-gnueabihf -P ada_first.gpr


  говорит, что нелегальный ключ. 

Хорошо, тогда попытался использовать gprbuild. Сначала, с помощью gprconfig создал файд cgpr.
Утилиту gprconfig вызывал с ключом --target=arm-linux-gnueabihf и хотя утилита, вроде-бы находила
кросс-тулзы,  но в файле  cgrp не было ни малейшего упоминания о языке Ada, только - C. Я руками
дописал строки, которые мне показались разумными. В результате получилось вот что:



 --  This gpr configuration file was generated by gprconfig
--  using this command line:
--  gprconfig --target=arm-linux-gnueabihf --config=Ada

configuration project Default is
   for Target use "arm-linux-gnueabihf";
   for Archive_Builder  use ("ar", "cr");
   for Archive_Builder_Append_Option use ("q");
   for Archive_Indexer  use ("ranlib");
   for Archive_Suffix   use ".a";
   for Library_Builder  use "/usr/lib/gprbuild/gprlib";
   for Library_Support  use "full";
   -- for Shared_Library_Prefix use "/usr/arm-linux-gnueabihf/sysroot/usr/lib";
   for Shared_Library_Prefix use "lib";
   for Symbolic_Link_Supported use "true";
   for Library_Major_Minor_Id_Supported use "true";
   for Shared_Library_Minimum_Switches use ("-shared");
   for Library_Version_Switches use ("-Wl,-soname,");

   for Shared_Library_Suffix use ".so";
   for Library_Auto_Init_Supported use "true";
   for Run_Path_Option  use ("-Wl,-z,origin,-rpath,");
   for Run_Path_Origin use "$ORIGIN";
   for Library_Encapsulated_Options use ("-shared", "-static-libgcc");
   for Library_Partial_Linker use ("arm-linux-gnueabi-gcc", "-nostdlib", "-Wl,-r", "-o");
   for Default_Language use "C";

   package Builder is
      for Executable_Suffix use "";
   end Builder;

   package Compiler is
      for Driver              ("C") use "/usr/bin/arm-linux-gnueabi-gcc";
      for Leading_Required_Switches   ("C") use
         ("-c", "-x", "c") & Compiler'Leading_Required_Switches ("C");
      for Driver              ("Ada") use "/usr/bin/arm-linux-gnueabi-gcc";
      for Leading_Required_Switches   ("Ada") use
         ("-c") & Compiler'Leading_Required_Switches ("Ada");
      for Include_Path        ("C") use "CPATH";
      for Include_Path        ("Ada") use "ADAPATH";
      for Dependency_Switches ("C") use ("-MMD", "-MF", "");
      for PIC_Option ("C") use ("-fPIC");
   end Compiler;

   package Naming is
      for Spec_Suffix ("C") use ".h";
      for Body_Suffix ("C") use ".c";
      for Spec_Suffix ("Ada") use ".ads";
      for Body_Suffix ("Ada") use ".adb";
   end Naming;

   package Linker is
      for Map_File_Option         use "-Wl,-Map,";
      for Driver use Compiler'Driver ("C");
   end Linker;

   package Clean is
      --  Remove the files generated by gnatinspect (in the context of GPS)
      for Artifacts_In_Object_Dir use Clean'Artifacts_In_Object_Dir
         & ("gnatinspect.*");
      for Source_Artifact_Extensions ("C")   use (".gli");
      for Object_Artifact_Extensions ("C")   use (".s", "ci", ".gcno");
   end Clean;
end Default; 

  
Теперь, если запустить так:

gprbuild -P ada_first.gpr

то запускается кросс-компилляция. И успешно проходит - создаются файлы *.ali и *.o.
А вот линковка падает: не находит библиотек:

function `_start':
(.text+0x28): undefined reference to `main'
main.o: In function `_ada_main':
main.adb:(.text+0x1e): undefined reference to `ada__assertions__assert__2'
libada_first.a(hello.o): In function `_ada_hello':
hello.adb:(.text+0x18): undefined reference to `ada__text_io__put_line__2'
hello.adb:(.text+0x30): undefined reference to `ada__text_io__put_line__2'
collect2: error: ld returned 1 exit status
gprbuild: link of main.adb failed


 Я понимаю, что где-то надо задать расположение ARM-овских библиотек, они у меня есть.
Но вот - где и как ?
Vadim Godunko
Re: [ada_ru] Опять про кросс-компилляцию
2017-03-28 08:05:13
On 03/28/2017 09:17 AM, [email protected] [ada_ru] wrote:
>
> Однако, gnatmake никак не реагирует на строку
>
> for Target use "arm-linux-gnueabihf";
>
По секрету: gnatmake вообще не понимает файлы проектов. Забудьте о нём.

> Хорошо, тогда попытался использовать gprbuild. Сначала, с помощью
> gprconfig создал файд cgpr.
> Утилиту gprconfig вызывал с ключом --target=arm-linux-gnueabihf и хотя
> утилита, вроде-бы находила кросс-тулзы,  но в файле  cgrp не было ни
> малейшего упоминания о языке Ada, только - C.
Вот это правильный путь. Только имеет смысл добавлять -v и анализировать 
вывод, что бы подправить базу данных gprbuild или системные пакеты что 
бы Ada находилась самостоятельно.

> Я понимаю, что где-то надо задать расположение ARM-овских библиотек, они
> у меня есть.
Тогда разбираться почему же gprconfig не находит компилятор Ada. Раскрою 
ещё один секрет - он наверное как раз и не находит эти библиотеки.
Maxim Reznik
Re: [ada_ru] Опять про кросс-­компилляцию
2017-03-28 10:10:14

Втр 28 Мар 2017 09:17:49 +0300, sv [email protected] [ada ru] <ada [email protected]> написал:
>       Здравствуйте! 
> 
> Возвращаюсь к своей любимой теме :-)


Попробуйте допилить БД gprbuild-а. Это должно быть не сложно. Запускайте 
gprconfig --target=arm-linux-gnueabihf --config=ada,, -v

и "-v -v" и смотрите, что не находит. Скорее всего просто версия компилятора ему не нравиться.


Может быть полезно посмотреть на это
https://github.com/AdaCore/gprbuild/issues/5#issuecomment-223049206

Если делать руками cgpr, вот что мне выдает gprconfig для GNAT GPL 2016 ARM

--  This gpr configuration file was generated by gprconfig
--  using this command line:
--  gprconfig --batch -o /tmp/aaa/bin/GNAT-TEMP-000001.TMP --target=arm-eabi --config=ada,,
--  from /tmp/aaa
configuration project Default is
   for Target use "arm-eabi";
   for Toolchain Version     ("Ada") use "GNAT 2016";
   for Runtime Library Dir   ("Ada") use
"/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro//adalib/";
   for Runtime Source Dirs   ("Ada") use
("/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro//adainclude/");
   for Archive Builder  use ("arm-eabi-ar", "cr");
   for Archive Builder Append Option use ("q");
   for Archive Indexer  use ("arm-eabi-ranlib");
   for Archive Suffix   use ".a";
   for Library Support  use "static only";
   for Library Builder  use "/home/max/net/gnat-arm/libexec/gprbuild/gprlib";
   for Default Language use "Ada";
   type Loaders is ("ROM", "SAMBA", "USER");

   Loader : Loaders := external ("LOADER", "ROM");

   package Builder is
      for Executable Suffix use "";
   end Builder;

   package Compiler is
      for Driver                   ("Ada") use "/home/max/net/gnat-arm/bin/arm-eabi-gcc";
      for Language Kind            ("Ada") use "unit based";
      for Dependency Kind          ("Ada") use "ALI File";
      for Leading Required Switches        ("Ada") use
          ("-c", "-x", "ada", "-gnatA")
             & Compiler'Leading Required Switches ("Ada");
      for Mapping File Switches    ("Ada") use ("-gnatem=");
      for Mapping Spec Suffix      ("Ada") use "%s";
      for Mapping Body Suffix      ("Ada") use "%b";
      for Config File Switches     ("Ada") use ("-gnatec=");
      for Include Path File     ("Ada") use "ADA PRJ INCLUDE FILE";
      for Multi Unit Switches ("Ada") use ("-gnateI");
      for Multi Unit Object Separator ("Ada") use "~";
      for Config Body File Name ("Ada") use
           "pragma Source File Name Project (%u, Body File Name => ""%f"");";
      for Config Spec File Name ("Ada") use
           "pragma Source File Name Project (%u, Spec File Name => ""%f"");";
      for Config Body File Name Index ("Ada") use
           "pragma Source File Name Project (%u, Body File Name => ""%f"", Index => %i);";
      for Config Spec File Name Index ("Ada") use
           "pragma Source File Name Project (%u, Spec File Name => ""%f"", Index => %i);";
      for Config Body File Name Pattern ("Ada") use
           "pragma Source File Name Project " &
           "  (Body File Name  => ""*%b""," &
           "   Casing          => %c," &
           "   Dot Replacement => ""%d"");";
      for Config Spec File Name Pattern ("Ada") use
           "pragma Source File Name Project " &
           "  (Spec File Name  => ""*%s""," &
           "   Casing          => %c," &
           "   Dot Replacement => ""%d"");";
      for Config File Unique    ("Ada") use "False";
      for PIC Option      ("Ada") use ("-fPIC");
      for Leading Required Switches ("Ada") use
        Compiler'Leading Required Switches ("Ada") &
("--RTS=/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro/");
      Common Required Switches := ("-mlittle-endian", "-mhard-float",
        "-mcpu=cortex-m4", "-mfpu=fpv4-sp-d16", "-mthumb");

      for Leading Required Switches ("Ada") use
         Compiler'Leading Required Switches ("Ada") &
         Common Required Switches;

      for Leading Required Switches ("C") use
         Compiler'Leading Required Switches ("C") &
         Common Required Switches;
   end Compiler;

   package Naming is
      for Spec Suffix ("Ada") use ".ads";
      for Body Suffix ("Ada") use ".adb";
      for Casing use "lowercase";
      for Dot Replacement use "-";
   end Naming;

   package Binder is
      for Required Switches ("Ada") use
          Binder'Required Switches ("Ada") &
          ("gnatbind prefix=arm-eabi-");
      for Objects Path File     ("Ada") use "ADA PRJ OBJECTS FILE";
      for Driver         ("Ada") use
          "/home/max/net/gnat-arm/libexec/gprbuild/gprbind";
      for Required Switches ("Ada") use
        Binder'Required Switches ("Ada") &
("--RTS=/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro/");
   end Binder;

   package Linker is
      for Driver use Compiler'Driver ("Ada");
      for Map File Option use "-Wl,-Map,";
      for Response File Format use "GCC GNU";
      for Max Command Line Length use "8192";
      for Required Switches use Linker'Required Switches &
        ("-L/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro//adalib",
"-nolibc", "-nostartfiles") &
        Compiler.Common Required Switches;
      case Loader is
         when "USER" =>
         when others =>
           for Required Switches use Linker'Required Switches &
             ("-L",
"/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro//../bsps/sam4s/bsp/",
              "-T", "memory-map.ld",
              "-T", "common-" & Loader & ".ld");
      end case;
   end Linker;

   package Clean is
      --  Remove the files generated by gnatinspect (in the context of GPS)
      for Artifacts In Object Dir use Clean'Artifacts In Object Dir
         & ("gnatinspect.*");
      for Source Artifact Extensions ("Ada")
         use (".dg", ".rep", ".stdout", ".stderr");
      for Object Artifact Extensions ("Ada") use (".s", ".ci", ".gcno");
   end Clean;
end Default;


--
sv_lary
Re: [ada_ru] Опять п ро кросс- компилляцию
2017-03-29 03:21:52
Здравствуйте, Вадим!

> gnatmake вообще не понимает файлы проектов.
  Ну почему же "вообще"?! На директивы, задающие имена каталогов и т.п. - адекватно реагирует.

 > имеет смысл добавлять -v и анализировать вывод, 

$ gprconfig -v --target=arm-linux-gnueabihf --config=Ada
Only compilers matching target arm-linux-gnueabihf will be preserved

  Попытался проанализировать. Утилита просматривает все каталоги из переменной $PATH и ищет там
компилляторы. На каком основании она выбирает компилляторы - я не знаю. Утилита нашла несколько
компилляторов в папке /usr/bin и принялась проверять их по каким-то условиям.  Из 7 кандидатов
отобрала вот этот:

  GCC is candidate: filename=arm-linux-gnueabi-gcc
    target: executing "arm-linux-gnueabi-gcc -dumpmachine" output=<use -v -v> no match
    target: grep matched="arm-linux-gnueabihf"
    version: executing "arm-linux-gnueabi-gcc -v" output=<use -v -v> no match
    version: nogrep no match
    version: grep matched="5.4.0"
    languages: constant := C
    Filter=Ada,,,,: language does not match
    Adding compiler to interactive menu C,5.4.0,,/usr/bin/,GCC selected=FALSE

Причём, даже у него: "Filter=Ada,,,,: language does not match". У остальных кандидатов два варианта:
1) Ignore compiler, since couldn't guess its version
2) Target for this compiler does not match --target

В подготовленном файле *.cgpr упоминание об Ada вообще отсутствует. Наприер, в пакете имён файлов:

   package Naming is
      for Spec_Suffix ("C") use ".h";
      for Body_Suffix ("C") use ".c";
   end Naming;

И я, ручками, дописывал сюда для Ada по аналогии.

> что бы подправить базу данных gprbuild или системные пакеты что 
 > бы Ada находилась самостоятельно. 
Если можно - поподробнее! Что это за база и как её править ?
sv_lary
Re: [ada_ru] Опять п ро кросс-­компилляцию
2017-03-29 03:45:50
Здравствуйте, Максим!

> Может быть полезно посмотреть на это 
  На мой взгляд, тут ситуация несколько иная. У TS не собираются ЕГО библиотеки, а у меня - не
видны готовые СИСТЕМНЫЕ библиотеки. То, что эти библиотеки есть, доказывается тем фактом, что при
ручной сборки, готовый ELF собирается.

Странное дело: если я запускаю конфигуратор так:

gprconfig --batch -o ~/tmp/GNAT-TEMP-000001.TMP --target=arm-linux-gnueabihf  --config=Ada,,

То он выдаёт: Error: no matching compiler found for --config=Ada,,,,
Причём, компиллятор arm-linux-gnueabi-gcc  он проверяет дважды(?) и первый раз выдаёт
сообщение Filter=Ada,,,,: language does not match а второй раз - Ignore compiler, since couldn't
guess its version

А если убираю параметр --batch , то конфигурация по умолчанию создаётся, но в ней нет упоминания
про Ada.
 
 --
Vasiliy Fofanov
Re: [ada_ru] Опять про кросс- компилляцию
2017-03-29 12:06:59
> > gnatmake вообще не понимает файлы проектов.
>   Ну почему же "вообще"?!
Если в строке gnatmake присутствует -P, то просто вызывается из-под полы gprbuild и все.

> 
>   Попытался проанализировать. Утилита просматривает все каталоги из переменной $PATH и ищет там
компилляторы. На каком основании она выбирает компилляторы - я не знаю.

См.документацию, файл gprbuild_ug.

> Если можно - поподробнее! Что это за база и как её править ?

См. там же.
sv_lary
[ada_ru] Re: Опять про кр о сс-компилляцию
2017-03-30 04:25:21
Здравствуйте, Максим!

> вот что мне выдает gprconfig для GNAT GPL 2016 ARM

Я взял за основу Ваш файл настроек и обработал его последовательно тремя инструментами:

 рашпилем напильником надфилем
И - о чудо - сборка прошла! Насколько я понял, Вы готовите программу для встроенной системы, без
линуха?  Там про какое-то run-time окружение говорилось..

Осталось только разобраться, почему у меня Cnat-GPS умирает через 30 секунд работы и можно будет
браться за что-то серьёзное...
 
Если Вам любопытно, то вот прилагаю текст файла настроек, с которым у меня пошла сборка.
Можете натравить на него diff, или meld - сразу всё станет ясно.

-- This gpr configuration file was generated by gprconfig
-- using this command line:
-- gprconfig --batch -o ~/tmp/GNAT-TEMP-000001.tmp --target=arm-linux-gnueabi --config=ada,,
-- from /tmp/aaa

configuration project Default is

    for Target use "arm-linux-gnueabihf";
    for Toolchain_Version ("Ada") use "GNAT 2016";
    for Runtime_Library_Dir ("Ada") use "//usr/lib/gcc-cross/arm-linux-gnueabihf/5/adalib/";
--    for Runtime_Source_Dirs ("Ada") use ("/usr/lib/gcc-cross/arm-linux-gnueabihf/5/adainclude/");
    for Archive_Builder use ("arm-linux-gnueabi-ar", "cr");
    for Archive_Builder_Append_Option use ("q");
    for Archive_Indexer use ("arm-linux-gnueabi-ranlib");
    for Archive_Suffix use ".a";
    for Library_Support use "static_only";
    for Library_Builder use "/usr/lib/gprbuild/gprlib";
    for Default_Language use "Ada";
    type Loaders is ("ROM", "SAMBA", "USER");

Loader : Loaders := external ("LOADER", "ROM");

package Builder is
    for Executable_Suffix use "";
end Builder;

package Compiler is
    for Driver ("Ada") use "/usr/bin/arm-linux-gnueabi-gcc";
    for Language_Kind ("Ada") use "unit_based";
    for Dependency_Kind ("Ada") use "ALI_File";
    for Leading_Required_Switches ("Ada") use ("-c", "-x", "ada", "-gnatA") &
Compiler'Leading_Required_Switches ("Ada");
    for Mapping_File_Switches ("Ada") use ("-gnatem=");
    for Mapping_Spec_Suffix ("Ada") use "%s";
    for Mapping_Body_Suffix ("Ada") use "%b";
    for Config_File_Switches ("Ada") use ("-gnatec=");
    for Include_Path_File ("Ada") use "ADA_PRJ_INCLUDE_FILE";
    for Multi_Unit_Switches ("Ada") use ("-gnateI");
    for Multi_Unit_Object_Separator ("Ada") use "~";
    for Config_Body_File_Name ("Ada") use
    "pragma Source_File_Name_Project (%u, Body_File_Name => ""%f"");";
    for Config_Spec_File_Name ("Ada") use
    "pragma Source_File_Name_Project (%u, Spec_File_Name => ""%f"");";
    for Config_Body_File_Name_Index ("Ada") use
    "pragma Source_File_Name_Project (%u, Body_File_Name => ""%f"", Index => %i);";
    for Config_Spec_File_Name_Index ("Ada") use
    "pragma Source_File_Name_Project (%u, Spec_File_Name => ""%f"", Index => %i);";
    for Config_Body_File_Name_Pattern ("Ada") use
    "pragma Source_File_Name_Project " &
    " (Body_File_Name => ""*%b""," &
    " Casing => %c," &
    " Dot_Replacement => ""%d"");";
    for Config_Spec_File_Name_Pattern ("Ada") use
    "pragma Source_File_Name_Project " &
    " (Spec_File_Name => ""*%s""," &
    " Casing => %c," &
    " Dot_Replacement => ""%d"");";
    for Config_File_Unique ("Ada") use "False";
    for PIC_Option ("Ada") use ("-fPIC");
    -- for Leading_Required_Switches ("Ada") use
    -- Compiler'Leading_Required_Switches ("Ada") &
("--RTS=/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro/");
    -- Common_Required_Switches := ("-mlittle-endian", "-mhard-float",
    --- "-mcpu=cortex-m4", "-mfpu=fpv4-sp-d16", "-mthumb");

--    for Leading_Required_Switches ("Ada") use
--    Compiler'Leading_Required_Switches ("Ada") &
--    Common_Required_Switches;

--    for Leading_Required_Switches ("C") use
--    Compiler'Leading_Required_Switches ("C") &
--    Common_Required_Switches;
end Compiler;

package Naming is
    for Spec_Suffix ("Ada") use ".ads";
    for Body_Suffix ("Ada") use ".adb";
    for Casing use "lowercase";
    for Dot_Replacement use "-";
end Naming;

package Binder is
    for Required_Switches ("Ada") use
    Binder'Required_Switches ("Ada") &
    ("gnatbind_prefix=arm-linux-gnueabihf-");
    for Objects_Path_File ("Ada") use "ADA_PRJ_OBJECTS_FILE";
    for Driver ("Ada") use "/usr/lib/gprbuild/gprbind";
    -- for Required_Switches ("Ada") use
    -- Binder'Required_Switches ("Ada") &
("--RTS=/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro/");
end Binder;

package Linker is
    for Driver use Compiler'Driver ("Ada");
    for Map_File_Option use "-Wl,-Map,";
    for Response_File_Format use "GCC_GNU";
    for Max_Command_Line_Length use "8192";
    -- for Required_Switches use Linker'Required_Switches &
    -- ("-L/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro//adalib",
"-nolibc", "-nostartfiles") &
    -- Compiler.Common_Required_Switches;
--    case Loader is
--        when "USER" =>
--        when others =>
--        for Required_Switches use Linker'Required_Switches &
--        ("-L",
"/home/max/net/gnat-arm/arm-eabi/lib/gnat/ravenscar-sfp-sam4sxplainedpro//../bsps/sam4s/bsp/",
--        "-T", "memory-map.ld",
--        "-T", "common-" & Loader & ".ld");
--    end case;
end Linker;

package Clean is
    -- Remove the files generated by gnatinspect (in the context of GPS)
    for Artifacts_In_Object_Dir use Clean'Artifacts_In_Object_Dir
    & ("gnatinspect.*");
    for Source_Artifact_Extensions ("Ada")
    use (".dg", ".rep", ".stdout", ".stderr");
    for Object_Artifact_Extensions ("Ada") use (".s", ".ci", ".gcno");
    end Clean;
end Default;
Maxim Reznik
Re: [ada_ru] Re: Опять про кр­о сс-компилляцию
2017-03-30 12:30:39
Это, конечно, хорошо, но этот сизифов труд имеет смысл только если есть желание разобраться, как
работает система компиляции в GNAT.
Рекомендую таки настроить gprbuild. Повторюсь, что это не сложно.

Поддерживаю Василия в предложении почитать документацию!

Сообщение "Ignore compiler, since couldn't guess its version" похоже на то, о чем пишут в github
issue, на которое я ссылался выше.
Вероятно, как только gprbuild опознает Ваш компилятор, то и системные библиотеки найдутся.
Посмотрите файл share/gprconfig/compilers.xml, а в нем

  <compiler description>
    <name>GNAT</name>
    <executable prefix="1">(.*-wrs-.*|.*-sysgo.*|.*-elf-.*|.*-eabi-.*....)?gnatmake</executable>
    <version>
      <external>${PREFIX}gnatls -v --version</external>
      <grep regexp="^GNATLS.+?(\d+(\.\d+)?)" group="1"></grep>
    </version>
    <languages>Ada</languages>
    <variable name="gcc version">
      <external>${PREFIX}gcc -v</external>
      <grep regexp="^[-\w]*gcc \S+ (\S+)" group="1"></grep>
    </variable>
    <runtimes default="default,kernel,native">

Это инструкции для gprconfig, как найти компилятор Ады. Сравните с тем, что у Вас выдает -v -v после

GNAT is candidate:...

Добейтесь, чтобы этот "кандидат" "срабатывал" путем правки этих строк в compilers.xml.
Вероятно нужно будет сделать то, что написано в github issue. И проверьте результирующий cgpr,
сверив его с уже работающим "ручным" образцом.




Чтв 30 Мар 2017 07:25:26 +0300, sv [email protected] [ada ru] <ada [email protected]> написал:

> 
> Насколько я понял, Вы готовите программу для встроенной системы, без линуха?  Там про какое-то
run-time окружение говорилось..
> 

Я портирую bareboard runtime на новую платку WifiMCU.
https://github.com/reznikmm/embedded-runtimes

Сейчас работа стала, жду JTAG из Китая :) Оправдываясь скажу, что окирпичил железяку залив не
Адскую прошивку, а Си-шную :)

> Осталось только разобраться, почему у меня Cnat-GPS умирает через 30 секунд работы и можно будет
браться за что-то серьёзное...
>  

1) посмотрите последний log файла в $HOME/.gps/
2) убедитесь, что запускаете не gps exe а shell файл с именем gps



--
sv_lary
Re: [ada_ru] Re: Опять про кр­о сс-компилляцию
2017-03-31 03:27:10
Здравствуйте, Максим!

> 1) посмотрите последний log файла в $HOME/.gps/

Похоже, что какие-то проблемы с библиотекой GTK+. Если просто запустить gps, загрузив проект, но не
открывая окно проекта слева - она просто ждёт и всё. Как только открываешь деревяшку проекта -
начинают сыпаться сообщения вида 

 sys:1: Warning: Source ID 3821 was not found when attempting to remove it

Они всегда выскакивают во время движения мышкой. Если открыть на редактирование один файл исходного
текста - ничего страшного не происходит. Но, если открыть ещё хотя бы один, то имена файлов на
язычках закладок исчезают, курсор превращается в "часики" и через коротко время gps падает.

При этом в конце лог-файла $HOME/.gps/ вижу следующие сообщения:

[SRC_EDITOR_MODULE] 2/806 Open file /home/lary/projects/ada/ada_first/src/hello.adb Focus=TRUE
(10:17:16.486)   
[UNEXPECTED_EXCEPTION.EXCEPTIONS] 2/809 Unexpected exception: Exception name: CONSTRAINT_ERROR     
            
_UNEXPECTED_EXCEPTION.EXCEPTIONS_ Message: gtkada-mdi.adb:6929 tag check failed (10:17:16.510)     
            
[STANDARD_HOOKS] 2/810 No file editor was registered (10:17:16.510)                                
            

[UNEXPECTED_EXCEPTION.EXCEPTIONS] 4/877 Unexpected exception: Exception name: CONSTRAINT_ERROR     
            
_UNEXPECTED_EXCEPTION.EXCEPTIONS_ Message: gtkada-mdi.adb:6929 tag check failed (10:17:40.616)     
            
[UNEXPECTED_EXCEPTION.EXCEPTIONS] 5/878 Unexpected exception: Exception name: STORAGE_ERROR        
            
_UNEXPECTED_EXCEPTION.EXCEPTIONS_ Message: s-intman.adb:139 explicit raise (10:17:40.631)          
            


 > 2) убедитесь, что запускаете не gps_exe а shell файл с именем gps 

Странно... Мой пакетный менеджер показывает, что в состав пакета gnat-gps входят только следующие
файлы:

/usr/bin/gnat-gps
/usr/share/doc/gnat-gps/changelog.Debian.gz
/usr/share/doc/gnat-gps/copyright
/usr/share/man/man1/gnat-gps.1.gz
/usr/share/menu/gnat-gps

И запускается именно gnat-gps...
Vadim Godunko
Re: [ada_ru] Re: Опять про кр­о сс-компилляцию
2017-03-31 08:52:18
On 03/31/2017 06:27 AM, [email protected] [ada_ru] wrote:
>
>> 2) убедитесь, что запускаете не gps_exe а shell файл с именем gps
>
> Странно... Мой пакетный менеджер показывает, что в состав пакета
> gnat-gps входят только следующие файлы:
>
Ну так задайте вопрос авторам этого пакета ;) А лучше - поставьте GNAT 
GPL и используйте проверенную версию GPS из него.
Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти