[Lazarus] Possible Codetools issue for embedded targets in main branch

Michael Ring mail at michael-ring.org
Thu Oct 6 21:59:35 CEST 2022


I today looked at an issue posted in the lazarus forum:

https://forum.lazarus.freepascal.org/index.php/topic,60790.0.html

the user is unable to use ctrl-space for help because codetools cannot 
find the required unit rp2040.

I could not reproduce the issue with my older installation of 
lazarus-trunk but when I upgraded to latest trunk from today I saw the 
same issue.


Possible reason is that lazarus cannot extract the info about the unit 
source file from the output of the -ix format of fpc


I commented out a few log entries and got this result:

TFindDeclarationTool.FindUnitSource 
Self="/Users/ring/devel/pico-fpcexamples/blinky/blinky.lpr" 
AnUnitName="RP2040" AnUnitInFilename=""
TCTDirectoryCache.FindUnitSourceInCompletePath AUnitName="RP2040" 
InFilename="" Directory="/Users/ring/devel/pico-fpcexamples/blinky/"
TCTDirectoryCache.FindUnitSourceInCompletePath unit RP2040 not found in 
SrcPath="/Users/ring/devel/pico-fpcexamples/blinky;/Users/ring/devel/pico-fpcexamples/units" 
Directory="/Users/ring/devel/pico-fpcexamples/blinky/" searchin in 
unitset ...
TCTDirectoryCache.FindUnitInUnitSet 
Directory="/Users/ring/devel/pico-fpcexamples/blinky/" 
UnitSet="CompilerFilename=/Users/ring/fpcupdeluxe/fpc/bin/x86_64-darwin/fpc.sh
TargetOS=embedded
TargetCPU=arm
Options=
FPCSrcDir=/Users/ring/fpcupdeluxe/fpcsrc/
Stamp=1" AUnitName="RP2040"
TFPCUnitSetCache.GetUnitSrcFile Unit="RP2040" SrcSearchRequiresPPU=False 
SkipPPUCheckIfTargetIsSourceOnly=True
TFPCUnitSetCache.GetUnitSrcFile Unit="RP2040" Result=
TCTDirectoryCache.FindUnitInUnitSet 
Directory="/Users/ring/devel/pico-fpcexamples/blinky/" 
UnitSet="CompilerFilename=/Users/ring/fpcupdeluxe/fpc/bin/x86_64-darwin/fpc.sh#10TargetOS=embedded#10TargetCPU=arm#10Options=#10FPCSrcDir=/Users/ring/fpcupdeluxe/fpcsrc/#10Stamp=1" 
AUnitName="RP2040" Result=""
TCTDirectoryCache.FindUnitSourceInCompletePath unit RP2040 not found in 
unitlinks. Directory="/Users/ring/devel/pico-fpcexamples/blinky/"
TCTDirectoryCache.FindCompiledUnitInUnitSet 
Directory="/Users/ring/devel/pico-fpcexamples/blinky/" 
UnitSet="CompilerFilename=/Users/ring/fpcupdeluxe/fpc/bin/x86_64-darwin/fpc.sh
TargetOS=embedded
TargetCPU=arm
Options=
FPCSrcDir=/Users/ring/fpcupdeluxe/fpcsrc/
Stamp=1" AUnitName="RP2040.ppu"
TCTDirectoryCache.FindCompiledUnitInUnitSet 
Directory="/Users/ring/devel/pico-fpcexamples/blinky/" 
UnitSet="CompilerFilename=/Users/ring/fpcupdeluxe/fpc/bin/x86_64-darwin/fpc.sh#10TargetOS=embedded#10TargetCPU=arm#10Options=#10FPCSrcDir=/Users/ring/fpcupdeluxe/fpcsrc/#10Stamp=1" 
AUnitName="RP2040.ppu" Result=""
### TCodeToolManager.HandleException: [20170421200056] "unit not found: 
RP2040" in "/Users/ring/devel/pico-fpcexamples/blinky/blinky.lpr"


when I manually run the -ix command with my fpc I receive the hits I 
would expect:


~/fpcupdeluxe/fpc/bin/x86_64-darwin/fpc -Tembedded -Parm -ix | grep -i 
rp2040
       <controllertype name="RP2040" controllerunit="RP2040"/>
       <controllertype name="RASPI_PICO" controllerunit="RP2040"/>
       <controllertype name="FEATHER_RP2040" controllerunit="RP2040"/>
       <controllertype name="ITZYBITZY_RP2040" controllerunit="RP2040"/>
       <controllertype name="QTPY_RP2040" controllerunit="RP2040"/>
       <controllertype name="TINY_2040" controllerunit="RP2040"/>


and I also find the unit in my fpcsrc directory:


find /Users/ring/fpcupdeluxe/fpcsrc -name "rp2040*"
/Users/ring/fpcupdeluxe/fpcsrc/rtl/embedded/arm/rp2040.pp


I am stuck because I cannot find the correct implementation for 
TCTGetCompiledUnitFromSet althoug I searched through all sources for 
(const UnitSet, AnUnitName: string)


Michael


Please note that you will not find unit rp2040 in official trunk, only 
in my version but the same issue should be there for any other existing 
embedded comtrollerunit









More information about the lazarus mailing list