duff2013 / ulptool

Program the esp32 ULP coprocessor in Arduino
272 stars 65 forks source link

Underinvestigation #78

Open outoftrun opened 2 years ago

outoftrun commented 2 years ago

I am running esp32 version 2.0.0-alpha1, and the latest version of your code. The esp32ulp_build_recipy.py does not find any. '*.s' files in my '/tmp/.....' dir. If I manual copy them from my src dir everything works but whatever function had copied them to that dir is no longer doing so.

============================================== uname -a "Linux ThinkPad-T61 5.4.0-77-lowlatency #86-Ubuntu SMP PREEMPT Thu Jun 17 03:26:36 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux"

mahesh2000 commented 2 years ago

This seems to have fixed my problem. I'm using the ulp_README.ino sketch from ulp_examples. I have to compile twice, once to generate the temporary folder, then the next time after copying over the ulp.S file. The first time I compiled, i received the following errors:

C:\Users\<user>\AppData\Local\Temp\arduino_build_598897\sketch\ulp_README.ino.cpp.o:(.literal._Z5setupv+0x1c): undefined reference to `ulp_count'
C:\Users\<user>\AppData\Local\Temp\arduino_build_598897\sketch\ulp_README.ino.cpp.o:(.literal._Z5setupv+0x20): undefined reference to `ulp_entry'

After this, I deleted all the files in the C:\Users\<user>\AppData\Local\Temp\arduino_build_598897\sketch folder, then copied over the ulp.S file from the sketch folder.

I'm running Arduino IDE version 1.8.15 (Windows Store 1.8.49.0). It does not seem to use nor need the C:\Users\<user>\AppData\Local\Arduino15\packages\esp32 folder. The ulptool installation instructions have been applied to the C:\Users\<user>\Documents\ArduinoData\packages\esp32\tools folder instead.

The Arduino IDE is installed in C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt.

The contents of the temp folder, after successful compilation, are as below, with the ulp.S file having been manually copied over from the main sketch folder:

size in bytes, filename:
           313 ulp.s
            18 ulp.ulp.d
           448 ulp.ulp.lst
           572 ulp.ulp.o
           174 ulp.ulp.pS
            36 ulp_main.bin
           492 ulp_main.bin.bin.o
           339 ulp_main.common.d
           453 ulp_main.common.ld
         8,716 ulp_main.elf
           183 ulp_main.h
           198 ulp_main.ld
         1,253 ulp_main.map
            40 ulp_main.sym
         1,641 ulp_README.ino.cpp
        15,330 ulp_README.ino.cpp.d
       763,616 ulp_README.ino.cpp.o

17 File(s)        793,822 bytes total
mahesh2000 commented 2 years ago

Also, printing the contents of glob in C:\Users\<user>\Documents\ArduinoData\packages\esp32\tools\ulptool\src\esp32ulp_build_recipe.py,

    print("glob:")
    print(glob.glob('*.*'))

shows the following without ulp.S the first time around. When run the second time, after the file has been copied over, it shows the result below:

glob:
['esp32_ulp_test1.ino.cpp', 'esp32_ulp_test1.ino.cpp.d', 'esp32_ulp_test1.ino.cpp.o', 'tmp.ulp.d', 'tmp.ulp.lst', 'tmp.ulp.o', 'tmp.ulp.pS', 'ulp.s', 'ulp_main.bin', 'ulp_main.bin.bin.o', 'ulp_main.common.d', 'ulp_main.common.ld', 'ulp_main.elf', 'ulp_main.h', 'ulp_main.ld', 'ulp_main.map', 'ulp_main.sym']
xandercrews commented 2 years ago

i had the same errors "undefined reference to `ulp_count'" and ".. to 'ulp_entry'".

i confirm that finding the temp folder for the build (in /var/folders////arduinobuild/ on macos), deleting sketch/*, copying ulp.s over manually and then recompiling works.

xandercrews commented 2 years ago

so, when i use a hook to copy the .s file(s) to the tempdir it resolves it afaict (not windows):

recipe.hooks.core.prebuild.01.pattern=sh -c 'cp -vp {build.source.path}/*.s {build.path}/sketch/ | sed s,^,ASMFIXUP:,'
mahesh2000 commented 2 years ago

is there a windows substitute?

xandercrews commented 2 years ago

i should think some similar xcopy command but i don't have a windows machine to try it on- in linux the key problem is that it won't invoke the command through a shell to expand the glob so you have to explicitly run it in one.

you could also make a little python program that you pass {build.source.path} and {build.path}, which would glob(os.path.join(sys.argv[1], '*.s')) and copy what it finds into sys.argv[2], similar to how these hooks invoke esp32ulp_build_recipe.py

xandercrews commented 2 years ago

if python isn't your jam and you'd like help, lmk

xandercrews commented 2 years ago

i wonder what broke. maybe arduino gui used to copy case-insensitive *.S and now it's case-sensitive?

angyongen commented 2 years ago

recipe.hooks.core.prebuild.01.pattern.windows=cmd /c copy /y {build.source.path}\*.s {build.path}\sketch\ works for me (windows)

mahesh2000 commented 2 years ago

Python definitely isn't my jam, bread or butter :-). Any help is appreciated. Right now, I'm copying over s files when updated to the temp folder. Your help would be greatly appreciated!

On Saturday, July 31, 2021, xandercrews @.***> wrote:

if python isn't your jam and you'd like help, lmk

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/duff2013/ulptool/issues/78#issuecomment-890412951, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAH7ZSRCL6TURDBHCPG4BNTT2R4WHANCNFSM5AG3TTWQ .

angyongen commented 2 years ago

new updated command because my previous one had an error when there are no .s files. and also doesnt work if source path has spaces (place this in platforms.local.txt): recipe.hooks.core.prebuild.01.pattern.windows=cmd /c if exist "{build.source.path}\*.s" copy /y "{build.source.path}\*.s" "{build.path}\sketch\" @mahesh2000 maybe you can try this

mahesh2000 commented 2 years ago

that seems to work!

On Sat, Aug 7, 2021 at 12:53 AM angyongen @.***> wrote:

new updated command because my previous one had an error when there are no .s files. and also doesnt work if source path has spaces (place this in platforms.local.txt): recipe.hooks.core.prebuild.01.pattern.windows=cmd /c if exist "{build.source.path}*.s" copy /y "{build.source.path}*.s" "{build.path}\sketch\" @mahesh2000 https://github.com/mahesh2000 maybe you can try this

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/duff2013/ulptool/issues/78#issuecomment-894604655, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAH7ZSVPMFCYPZUC3R7RVRLT3S33PANCNFSM5AG3TTWQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email .

jacoboth7 commented 1 year ago

This solved my problem as well