comp.lang.ada
 help / color / mirror / Atom feed
* How to create a GPR project for ARM Cortex?
@ 2017-11-11 19:18 Johan Söderlind Åström
  2017-11-11 20:12 ` Simon Wright
  2017-11-12 14:29 ` Johan Söderlind Åström
  0 siblings, 2 replies; 10+ messages in thread
From: Johan Söderlind Åström @ 2017-11-11 19:18 UTC (permalink / raw)


I build programs on my stm32l0 using this script:

arm-none-eabi-gcc -c -mcpu=cortex-m0plus -mthumb -Og -Wall -fdata-sections -ffunction-sections -g -gdwarf-2 -MMD -MP -MF"build/main.d" -MT"build/main.d" -Wa,-a,-ad,-alms=build/main.lst src/main.c -o build/main.o
arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=cortex-m0plus -mthumb -Og -Wall -fdata-sections -ffunction-sections -g -gdwarf-2 -MMD -MP -MF"build/startup_stm32l072xx.d" -MT"build/startup_stm32l072xx.d" src/startup_stm32l072xx.s -o build/startup_stm32l072xx.o
arm-none-eabi-gcc build/startup_stm32l072xx.o build/main.o -mcpu=cortex-m0plus -mthumb -specs=nano.specs -Tsrc/STM32L072CZEx_FLASH.ld  -lc -lm -lnosys -Wl,-Map=build/main.map,--cref -Wl,--gc-sections -o build/main.elf
arm-none-eabi-objcopy -O ihex build/main.elf build/main.hex
arm-none-eabi-objcopy -O binary -S build/main.elf build/main.bin
cp build/main.bin E:/


I want to convert it to a GPR project so I created this:

project Default is

   for Languages use ("c");
   --for Languages use ("c, s");
   for Source_Dirs use ("src");
   for Object_Dir use "obj";
   for Exec_Dir use "bin";
   for Main use ("main.c");
   for Target use "arm-eabi";
   for Library_Support  use "none";
   
   package Ide is
      for Gnat use "arm-eabi-gnat";
      for Gnatlist use "arm-eabi-gnatls";
      for Debugger_Command use "arm-eabi-gdb";
   end Ide;
   
   package Builder is
      for Default_Switches ("c") use ("-mcpu=cortex-m0", "-mthumb", "-Og", "-Wall", "-fdata-sections", "-ffunction-sections", "-g", "-gdwarf-2", "-MMD", "-MP", "-MF""build/main.d""", "-MT""build/main.d""", "-Wa,-a,-ad,-alms=build/main.lst");
   end Builder;
   
   package Compiler is
      for Default_Switches ("c") use ("-mcpu=cortex-m0", "-mthumb", "-Og", "-Wall", "-fdata-sections", "-ffunction-sections", "-g", "-gdwarf-2", "-MMD", "-MP", "-MF""build/main.d""", "-MT""build/main.d""", "-Wa,-a,-ad,-alms=build/main.lst");
   end Compiler;
   
   package Linker is
      for Linker_Options use ("-mcpu=cortex-m0plus", "-mthumb", "-specs=nano.specs", "-Tsrc/STM32L072CZEx_FLASH.ld", "-lc", "-lm", "-lnosys", "-Wl,-Map=build/main.map,--cref", "-Wl,--gc-sections");
   end Linker;
   
end Default;


I got following result:
c:/gnat/2017/bin/../lib/gcc/arm-eabi/6.3.1/../../../../arm-eabi/bin/ld.exe: cannot find crt0.o: No such file or directory

I got following result by using assembly language s:
no compiler specified for language "s"

I do not need crt0.o, how to remove that?
Is it even possible to use ".s" or ".ld" files in a GPR project?


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: How to create a GPR project for ARM Cortex?
  2017-11-11 19:18 How to create a GPR project for ARM Cortex? Johan Söderlind Åström
@ 2017-11-11 20:12 ` Simon Wright
  2017-11-11 22:05   ` Johan Söderlind Åström
  2017-11-12  8:54   ` Simon Wright
  2017-11-12 14:29 ` Johan Söderlind Åström
  1 sibling, 2 replies; 10+ messages in thread
From: Simon Wright @ 2017-11-11 20:12 UTC (permalink / raw)


Johan Söderlind Åström <johaa1993@gmail.com> writes:

> arm-none-eabi-objcopy -O ihex build/main.elf build/main.hex
> arm-none-eabi-objcopy -O binary -S build/main.elf build/main.bin
> cp build/main.bin E:/

I don't think you can do these using a GPR. A Makefile would work.

>    for Languages use ("c");
>    --for Languages use ("c, s");

   for Languages use ("C", "ASM");  -- not case-sensitive
   
>    package Linker is
>       for Linker_Options use ("-mcpu=cortex-m0plus", "-mthumb", "-specs=nano.specs", "-Tsrc/STM32L072CZEx_FLASH.ld", "-lc", "-lm", "-lnosys", "-Wl,-Map=build/main.map,--cref", "-Wl,--gc-sections");
>    end Linker;

The linker script I use includes -nostdlib, which I think is what
suppresses crt0.o. You might need -lgcc at some point: I have

   "-nostdlib", "-lm", "-lgcc", "-lc"

(no -lnosys??)

Once you've included the options in Builder, I don't believe you need to
repeat them in the other packages; they should be inserted into the
compiler/linker options automatically, so you only need to specify the
compiler/linker-specific ones explicitly.

I don't think you want all the dependency/listing info to be written to
main.d, .lst?

You probably need 'for Default_Switches ("ASM") use ...' in Compiler.

You've reminded me to look at my use of -ffunction-sections etc, which I
see I've been careless about. Thanks!


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: How to create a GPR project for ARM Cortex?
  2017-11-11 20:12 ` Simon Wright
@ 2017-11-11 22:05   ` Johan Söderlind Åström
  2017-11-12  8:06     ` Simon Wright
  2017-11-12  8:54   ` Simon Wright
  1 sibling, 1 reply; 10+ messages in thread
From: Johan Söderlind Åström @ 2017-11-11 22:05 UTC (permalink / raw)


Thanks it is working now. 

project Default is
   
   for Languages use ("c", "asm");
   for Source_Dirs use ("src");
   for Object_Dir use "obj";
   for Exec_Dir use "bin";
   for Main use ("main.c");
   for Target use "arm-eabi";

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

   package Ide is
      for Gnat use "arm-eabi-gnat";
      for Gnatlist use "arm-eabi-gnatls";
      for Debugger_Command use "arm-eabi-gdb";
   end Ide;
   
   package Builder is
      for Default_Switches ("c") use
        (
         "-lm",
         "-lgcc",
         "-lc",
         "-mcpu=cortex-m0",
         "-mthumb",
         "-Og",
         "-Wall",
         "-fdata-sections",
         "-ffunction-sections",
         "-g",
         "-gdwarf-2",
         "-MMD",
         "-MP",
         "-f",
         "-MF""build/main.d""",
         "-MT""build/main.d""",
         --"-Wa,-a,-ad,-alms=""build/main.lst""",
         ""
        );
      for Default_Switches ("asm") use 
        (
         "-x",
         "-lnosys",
         "-lm",
         "-lgcc",
         "-lc",
         "-mcpu=cortex-m0",
         "-mthumb",
         "-Og",
         "-Wall",
         "-fdata-sections",
         "-ffunction-sections",
         "-g",
         "-gdwarf-2",
         "-MMD",
         "-MP",
         "-f"
        );
   end Builder;

   package Compiler is
   end Compiler;

   package Linker is
      for Default_Switches ("c") use
        (
         "-nostartfiles",
         "-nodefaultlibs",
         "-TC:/Users/Johan/Documents/B-L072Z-LRWAN1_Ada/src/STM32L072CZEx_FLASH.ld",
         --"-Tsrc/STM32L072CZEx_FLASH.ld",
         --"-Wl,-Map=build/main.map,--cref",
         "-Wl,--gc-sections",
         --"-o main.elf",
         ""
        );
   end Linker;

end Default;


I have this shell script:
set -x #echo on
gprbuild default.gpr
arm-eabi-objcopy -O binary -S bin/main bin/main.bin
cp bin/main.bin E:/


My board can run a simple blink program.


"-nostartfiles" removes "crt0.o".
"-Tsrc/STM32L072CZEx_FLASH.ld" relative path does not work.
"-Wl,-Map=build/main.map,--cref" does not work.
"-Wa,-a,-ad,-alms=""build/main.lst""" does not work.
"-o main.elf" does not work.

I have not tried gdb debugger or language Ada yet.


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: How to create a GPR project for ARM Cortex?
  2017-11-11 22:05   ` Johan Söderlind Åström
@ 2017-11-12  8:06     ` Simon Wright
  2017-11-12 10:18       ` Johan Söderlind Åström
  0 siblings, 1 reply; 10+ messages in thread
From: Simon Wright @ 2017-11-12  8:06 UTC (permalink / raw)


Johan Söderlind Åström <johaa1993@gmail.com> writes:

> "-Tsrc/STM32L072CZEx_FLASH.ld" relative path does not work.
> "-Wl,-Map=build/main.map,--cref" does not work.
> "-Wa,-a,-ad,-alms=""build/main.lst""" does not work.

The linker runs in the Object_Dir, which those paths are not relative
to. You can say e.g.

   "-T" & Project'Project_Dir & "src/STM32L072CZEx_FLASH.ld"

> "-o main.elf" does not work.

Perhaps it does work, but leaves main.elf in the Object_Dir?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: How to create a GPR project for ARM Cortex?
  2017-11-11 20:12 ` Simon Wright
  2017-11-11 22:05   ` Johan Söderlind Åström
@ 2017-11-12  8:54   ` Simon Wright
  1 sibling, 0 replies; 10+ messages in thread
From: Simon Wright @ 2017-11-12  8:54 UTC (permalink / raw)


Simon Wright <simon@pushface.org> writes:

> You've reminded me to look at my use of -ffunction-sections etc, which
> I see I've been careless about. Thanks!

Before proper use of section switches:
lockheed:certyflie simon$ arm-eabi-size cflie.elf--
   text	   data	    bss	    dec	    hex	filename
 522972	   4104	  42160	 569236	  8af94	cflie.elf--

After:
lockheed:certyflie simon$ arm-eabi-size cflie.elf
   text	   data	    bss	    dec	    hex	filename
 289912	   3568	  42144	 335624	  51f08	cflie.elf

I was wondering why it was so big, but there were worse problems!


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: How to create a GPR project for ARM Cortex?
  2017-11-12  8:06     ` Simon Wright
@ 2017-11-12 10:18       ` Johan Söderlind Åström
  2017-11-12 11:39         ` Simon Wright
  0 siblings, 1 reply; 10+ messages in thread
From: Johan Söderlind Åström @ 2017-11-12 10:18 UTC (permalink / raw)


> > "-o main.elf" does not work.
> 
> Perhaps it does work, but leaves main.elf in the Object_Dir?

It has no effect.


I will use Executable_Suffix instead.
https://docs.adacore.com/gprbuild-docs/html/gprbuild_ug/gnat_project_manager.html#executable-file-names

   package Builder is
      for Executable_Suffix use ".elf";

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: How to create a GPR project for ARM Cortex?
  2017-11-12 10:18       ` Johan Söderlind Åström
@ 2017-11-12 11:39         ` Simon Wright
  0 siblings, 0 replies; 10+ messages in thread
From: Simon Wright @ 2017-11-12 11:39 UTC (permalink / raw)


Johan Söderlind Åström <johaa1993@gmail.com> writes:

>> > "-o main.elf" does not work.
>> 
>> Perhaps it does work, but leaves main.elf in the Object_Dir?
>
> It has no effect.

I had another look. My main program is in main.adb, but I have

   package Builder is
      ...
      for Executable ("main.adb") use project'Project_Dir & "cflie.elf";
      ...
   end Builder;

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: How to create a GPR project for ARM Cortex?
  2017-11-11 19:18 How to create a GPR project for ARM Cortex? Johan Söderlind Åström
  2017-11-11 20:12 ` Simon Wright
@ 2017-11-12 14:29 ` Johan Söderlind Åström
  2017-11-13 10:54   ` Simon Wright
  1 sibling, 1 reply; 10+ messages in thread
From: Johan Söderlind Åström @ 2017-11-12 14:29 UTC (permalink / raw)


Debugger is working to a moderate extent.

   package Ide is
      for Gnat use "arm-eabi-gnat";
      for Gnatlist use "arm-eabi-gnatls";
      for Debugger_Command use "arm-eabi-gdb";
      --for Connection_Config_File use "stm32l0.cfg";
      for Program_Host use "localhost:4242";
      for Communication_Protocol use "remote";
      --for Connection_Tool use "openocd";
      for Connection_Tool use "st-util";
   end Ide;


Using openocd: crashes randomly with "JTAG failure -4"

Using st-util: everything is working except I can not set breakpoints, I get following: "Could not execute "debug set line breakpoint'"

Flash to board button in GNAT Programming Studio does not work. It writes to the board but the program does not execute correct. I think the load address might be wrong. I get following:
gprbuild --target=arm-eabi -d -PC:\Users\Johan\Documents\B-L072Z-LRWAN1_Ada\default.gpr C:\Users\Johan\Documents\B-L072Z-LRWAN1_Ada\src\main.c -largs -Wl,-Map=map.txt
Compile
   [c]            main.c
   [asm]          startup_stm32l072xx.s
Link
   [archive]      libdefault.a
   [index]        libdefault.a
   [link]         main.c
Memory region         Used Size  Region Size  %age Used
             RAM:        1544 B        20 KB      7.54%
           FLASH:        1800 B       192 KB      0.92%
[2017-11-12 15:28:07] process terminated successfully, elapsed time: 00.68s
Retrieving the load address.
arm-eabi-objdump C:\Users\Johan\Documents\B-L072Z-LRWAN1_Ada\bin\main.elf -h
Load address is: 0x080000c0
Creating the binary (flashable) image.
arm-eabi-objcopy -O binary C:\Users\Johan\Documents\B-L072Z-LRWAN1_Ada\bin\main.elf C:\Users\Johan\Documents\B-L072Z-LRWAN1_Ada\bin\main.elf.bin
Flashing image to board.
Could not flash the executable.
[workflow stopped]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: How to create a GPR project for ARM Cortex?
  2017-11-12 14:29 ` Johan Söderlind Åström
@ 2017-11-13 10:54   ` Simon Wright
  2017-11-13 19:08     ` Johan Söderlind Åström
  0 siblings, 1 reply; 10+ messages in thread
From: Simon Wright @ 2017-11-13 10:54 UTC (permalink / raw)


Johan Söderlind Åström <johaa1993@gmail.com> writes:

Groping around here ...

> Retrieving the load address.
> arm-eabi-objdump C:\Users\Johan\Documents\B-L072Z-LRWAN1_Ada\bin\main.elf -h
> Load address is: 0x080000c0

My arm-eabi-objdump doesn't produce that output with -h.

And shouldn't the load address be 0x08000000?

> Creating the binary (flashable) image.
> arm-eabi-objcopy -O binary C:\Users\Johan\Documents\B-L072Z-LRWAN1_Ada\bin\main.elf C:\Users\Johan\Documents\B-L072Z-LRWAN1_Ada\bin\main.elf.bin
> Flashing image to board.
> Could not flash the executable.

I think you need to run st-flash by hand to find out what's going on
here.

What board are you using?

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: How to create a GPR project for ARM Cortex?
  2017-11-13 10:54   ` Simon Wright
@ 2017-11-13 19:08     ` Johan Söderlind Åström
  0 siblings, 0 replies; 10+ messages in thread
From: Johan Söderlind Åström @ 2017-11-13 19:08 UTC (permalink / raw)


> I think you need to run st-flash by hand to find out what's going on
> here.

Program can be executed just by moving the .bin file to E:/.
cp build/main.bin E:/

> What board are you using?

http://www.st.com/en/evaluation-tools/b-l072z-lrwan1.html

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-11-13 19:08 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-11 19:18 How to create a GPR project for ARM Cortex? Johan Söderlind Åström
2017-11-11 20:12 ` Simon Wright
2017-11-11 22:05   ` Johan Söderlind Åström
2017-11-12  8:06     ` Simon Wright
2017-11-12 10:18       ` Johan Söderlind Åström
2017-11-12 11:39         ` Simon Wright
2017-11-12  8:54   ` Simon Wright
2017-11-12 14:29 ` Johan Söderlind Åström
2017-11-13 10:54   ` Simon Wright
2017-11-13 19:08     ` Johan Söderlind Åström

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox