Skip to content

Fix to avoid unable to compile mjs branch with AES #24

@hallard

Description

@hallard

@matthijskooijman
I'm tried to compile new mjs branch (for ESP8266) but it does not work. I listed there the problems and the fix I've done

  • 1st point

using USE_ORIGINAL_AES in config.h fire multiple undefined reference.

S:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266/tools/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc" -g  -Os -nostdlib -Wl,--no-check-sections -u call_user_start -u _printf_float -u _scanf_float -Wl,-static "-LS:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266/tools/sdk/lib" "-LS:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266/tools/sdk/ld" "-LS:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266/tools/sdk/libc/xtensa-lx106-elf/lib" "-Teagle.flash.4m1m.ld" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy  -o "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp/ttn-abp.ino.elf" -Wl,--start-group "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\sketch\ttn-abp.ino.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\aes\lmic.c.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\aes\other.c.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\aes\ideetron\AES-128_V10.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\hal\hal.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\lmic.c.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\oslmic.c.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\radio.c.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\SPI\SPI.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\ESP8266WiFi.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\ESP8266WiFiAP.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\ESP8266WiFiGeneric.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\ESP8266WiFiMulti.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\ESP8266WiFiSTA.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\ESP8266WiFiScan.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\WiFiClient.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\WiFiClientSecure.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\WiFiServer.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\WiFiUdp.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp/arduino.ar" -lhal -lphy -lpp -lnet80211 -llwip_gcc -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 -lstdc++ -lm -lc -lgcc -Wl,--end-group  "-LC:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp"
C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\lmic.c.o: In function `convFreq':
S:\Skydrive\devt\Arduino\libraries\arduino-lmic\src\lmic/lmic.c:85: undefined reference to `AESAUX'
C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\lmic.c.o:(.text.aes_cipher$part$3+0x4): undefined reference to `AESAUX'
C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\lmic.c.o:(.text.aes_cipher$part$3+0x8): undefined reference to `AESAUX'
C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\lmic.c.o:(.text.aes_cipher$part$3+0xc): undefined reference to `AESKEY'
C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\lmic.c.o:(.text.aes_cipher$part$3+0x10): undefined reference to `os_aes'
C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\lmic.c.o: In function `aes_cipher':
S:\Skydrive\devt\Arduino\libraries\arduino-lmic\src\lmic/lmic.c:85: undefined reference to `os_aes'
C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\lmic.c.o: In function `rxschedInit':
S:\Skydrive\devt\Arduino\libraries\arduino-lmic\src\lmic/lmic.c:85: undefined reference to `os_aes'
C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\lmic.c.o: In function `decodeFrame':
S:\Skydrive\devt\Arduino\libraries\arduino-lmic\src\lmic/lmic.c:85: undefined reference to `os_aes'
C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\lmic.c.o: In function `engineUpdate':
S:\Skydrive\devt\Arduino\libraries\arduino-lmic\src\lmic/lmic.c:85: undefined reference to `os_aes'
C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\lmic.c.o:S:\Skydrive\devt\Arduino\libraries\arduino-lmic\src\lmic/lmic.c:85: more undefined references to `os_aes' follow

collect2.exe: error: ld returned 1 exit status

Using library arduino-lmic at version 1.5.0+arduino-1 in folder: S:\Skydrive\devt\Arduino\libraries\arduino-lmic 
Using library SPI at version 1.0 in folder: S:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266\libraries\SPI 
Using library ESP8266WiFi at version 1.0 in folder: S:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi 
exit status 1
Error compiling for board WeMos D1 R2 & mini.

Fix is in the file src/aes/limc.c, change at the beginning, the test #if defined after the include for the compiler knows the USE_ORIGINAL_AES and also change the #include file name (set te relative) because it was not found so

#if defined(USE_ORIGINAL_AES)
#include "oslmic.h"

becomes

#include "../lmic/oslmic.h"
#if defined(USE_ORIGINAL_AES)
  • Second point

Using USE_IDEETRON_AES in config.h fire a linker error with double definition of aes_encrypt only on ESP8266 but this is because SDK already contain aes_encrypt() function in libcrypto.a.

S:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266/tools/xtensa-lx106-elf/bin/xtensa-lx106-elf-gcc" -g  -Os -nostdlib -Wl,--no-check-sections -u call_user_start -u _printf_float -u _scanf_float -Wl,-static "-LS:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266/tools/sdk/lib" "-LS:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266/tools/sdk/ld" "-LS:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266/tools/sdk/libc/xtensa-lx106-elf/lib" "-Teagle.flash.4m1m.ld" -Wl,--gc-sections -Wl,-wrap,system_restart_local -Wl,-wrap,register_chipv6_phy  -o "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp/ttn-abp.ino.elf" -Wl,--start-group "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\sketch\ttn-abp.ino.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\aes\lmic.c.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\aes\other.c.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\aes\ideetron\AES-128_V10.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\hal\hal.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\lmic.c.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\oslmic.c.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\lmic\radio.c.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\SPI\SPI.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\ESP8266WiFi.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\ESP8266WiFiAP.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\ESP8266WiFiGeneric.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\ESP8266WiFiMulti.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\ESP8266WiFiSTA.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\ESP8266WiFiScan.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\WiFiClient.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\WiFiClientSecure.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\WiFiServer.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\ESP8266WiFi\WiFiUdp.cpp.o" "C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp/arduino.ar" -lhal -lphy -lpp -lnet80211 -llwip_gcc -lwpa -lcrypto -lmain -lwps -laxtls -lsmartconfig -lmesh -lwpa2 -lstdc++ -lm -lc -lgcc -Wl,--end-group  "-LC:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp"
S:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266/tools/sdk/lib\libcrypto.a(aes-internal-enc.o): In function `aes_encrypt':
(.irom0.text+0x490): multiple definition of `aes_encrypt'
C:\Users\CHARLE~1\AppData\Local\Temp\build20a4a2935c21ce58917d68130563504a.tmp\libraries\arduino-lmic\aes\ideetron\AES-128_V10.cpp.o:S:\Skydrive\devt\Arduino\libraries\arduino-lmic\src\aes\ideetron/AES-128_V10.cpp:92: first defined here

collect2.exe: error: ld returned 1 exit status

Using library arduino-lmic at version 1.5.0+arduino-1 in folder: S:\Skydrive\devt\Arduino\libraries\arduino-lmic 
Using library SPI at version 1.0 in folder: S:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266\libraries\SPI 
Using library ESP8266WiFi at version 1.0 in folder: S:\Skydrive\devt\Arduino\hardware\esp8266com\esp8266\libraries\ESP8266WiFi 
exit status 1
Error compiling for board WeMos D1 R2 & mini.

Workaround was (may be better solution) to rename all aes_encrypt() to limc_aes_encrypt() to avoid target error due to existing function.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions