There's a small issue when compiling code for embedded, when there is a linker error for unresolved externals it does not get displayed.

example:

~/fpcupdeluxe/lazarus/lazbuild -B pio_ws2812-raspi_pico.lpi

using config file /Users/ring/fpcupdeluxe/lazarus/lazarus.cfg

....

pio_ws2812.lpr(85) Error: (9013) Error while linking
pio_ws2812.lpr(85) Fatal: (10026) There were 1 errors compiling module, stopping
Fatal: (1018) Compilation aborted
Error: /Users/ring/fpcupdeluxe/fpc/bin/aarch64-darwin/ppcarm returned an error exitcode Error: (lazarus) Compile Project, OS: embedded, CPU: arm, Target: bin/pio_ws2812.elf: stopped with exit code 1 Error: (lazbuild) failed compiling of project /Users/ring/devel/pico-fpcexamples/pio_ws2812/pio_ws2812-raspi_pico.lpi


problem seems to be that stdout is not displayed by the DoExec / sysutils.ExecuteProcess on my Mac so the details on linker error get lost.

To find the error the code then has to be compiled with -sh parameter and after running ppas.sh the error surfaces:

./ppas.sh

Assembling pico_c

...

Linking /Users/ring/devel/pico-fpcexamples/pio_ws2812/bin/pio_ws2812
/Users/ring/fpcupdeluxe/cross/bin/arm-embedded/arm-none-eabi-ld: /Users/ring/devel/pico-fpcexamples/units/pio.c.obj: in function `pio_add_program':
pio.c:(.text.pio_add_program+0xd2): undefined reference to `panic'

An error occurred while linking /Users/ring/devel/pico-fpcexamples/pio_ws2812/bin/pio_ws2812


I followed the code in t_embed responsible for linking and tried using process unit but it is not known to the compiler itself.

Is there a variant of DoExec or something else that can be used in the compiler to run the link command again in case of an error so that the linker error gets displayed?


Michael


_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to