platformio / platform-ststm32

ST STM32: development platform for PlatformIO
https://registry.platformio.org/platforms/platformio/ststm32
Apache License 2.0
394 stars 308 forks source link

.DS_Store files breaks PlatformIO gccarmnoneeabi toolchain #531

Closed Unturned3 closed 3 years ago

Unturned3 commented 3 years ago

What kind of issue is this?


Configuration

Operating system: Mac OS 10.12

PlatformIO Version (platformio --version): 5.1.1

Description of problem

I used Mac OS's Finder to view some files in the ~/.platformio/packages/framework-stm32cubel0 directories. When I tried to compile my project again, PlatformIO gave the error shown below. It seems like the .DS_Store files created by Finder in these directories break some scripts used in PlatformIO?

Edit: I can't even create a new project for STM32L0 MCUs now; upon project creation platform IO gives a similar error, where toolchain-gccarmnoneeabi gives "Not a directory" errors when running into .DS_Store files.

> Executing task in folder L031K6_CLEAN_HAL: platformio run --environment nucleo_l031k6 <

Processing nucleo_l031k6 (platform: ststm32; board: nucleo_l031k6; framework: stm32cube)
------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/ststm32/nucleo_l031k6.html
PLATFORM: ST STM32 (14.0.0) > ST Nucleo L031K6
HARDWARE: STM32L031K6T6 32MHz, 8KB RAM, 32KB Flash
DEBUG: Current (stlink) On-board (stlink) External (blackmagic, cmsis-dap, jlink)
PACKAGES: 
 - framework-stm32cubel0 1.11.3 
 - tool-ldscripts-ststm32 0.1.0 
 - toolchain-gccarmnoneeabi 1.70201.0 (7.2.1)
NotADirectoryError: [Errno 20] Not a directory: '/Users/richard/.platformio/packages/framework-stm32cubel0/Utilities/.DS_Store':
  File "/Users/richard/.platformio/penv/lib/python3.7/site-packages/platformio/builder/main.py", line 177:
    env.SConscript("$BUILD_SCRIPT")
  File "/Users/richard/.platformio/packages/tool-scons/scons-local-4.1.0/SCons/Script/SConscript.py", line 591:
    return _SConscript(self.fs, *files, **subst_kw)
  File "/Users/richard/.platformio/packages/tool-scons/scons-local-4.1.0/SCons/Script/SConscript.py", line 280:
    exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
  File "/Users/richard/.platformio/platforms/ststm32/builder/main.py", line 120:
    target_elf = env.BuildProgram()
  File "/Users/richard/.platformio/packages/tool-scons/scons-local-4.1.0/SCons/Util.py", line 658:
    return self.method(*nargs, **kwargs)
  File "/Users/richard/.platformio/penv/lib/python3.7/site-packages/platformio/builder/tools/platformio.py", line 61:
    env.ProcessProgramDeps()
  File "/Users/richard/.platformio/packages/tool-scons/scons-local-4.1.0/SCons/Util.py", line 658:
    return self.method(*nargs, **kwargs)
  File "/Users/richard/.platformio/penv/lib/python3.7/site-packages/platformio/builder/tools/platformio.py", line 127:
    env.BuildFrameworks(env.get("PIOFRAMEWORK"))
  File "/Users/richard/.platformio/packages/tool-scons/scons-local-4.1.0/SCons/Util.py", line 658:
    return self.method(*nargs, **kwargs)
  File "/Users/richard/.platformio/penv/lib/python3.7/site-packages/platformio/builder/tools/platformio.py", line 342:
    SConscript(env.GetFrameworkScript(f), exports="env")
  File "/Users/richard/.platformio/packages/tool-scons/scons-local-4.1.0/SCons/Script/SConscript.py", line 654:
    return method(*args, **kw)
  File "/Users/richard/.platformio/packages/tool-scons/scons-local-4.1.0/SCons/Script/SConscript.py", line 591:
    return _SConscript(self.fs, *files, **subst_kw)
  File "/Users/richard/.platformio/packages/tool-scons/scons-local-4.1.0/SCons/Script/SConscript.py", line 280:
    exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
  File "/Users/richard/.platformio/platforms/ststm32/builder/frameworks/stm32cube.py", line 272:
    if not any(f.endswith((".c", ".h")) for f in os.listdir(util_dir)):
================================================================ [FAILED] Took 1.15 seconds ================================================================

Steps to Reproduce

  1. Start a STM32L0 project
  2. Use Finder to browse some folders in ~/.platformio/packages/framework-stm32cubel0
  3. Build project

If problems with PlatformIO Build System:

The content of platformio.ini:

[env:nucleo_l031k6]
platform = ststm32
board = nucleo_l031k6
framework = stm32cube
upload_protocol = stlink

Source file to reproduce issue:


#include "stm32l0xx_hal.h"

#define LED_PIN                                GPIO_PIN_3
#define LED_GPIO_PORT                          GPIOB
#define LED_GPIO_CLK_ENABLE()                  __HAL_RCC_GPIOB_CLK_ENABLE()

void SysTick_Handler(void);

int main(void)
{
  HAL_Init();

  LED_GPIO_CLK_ENABLE();

  GPIO_InitTypeDef GPIO_InitStruct;

  GPIO_InitStruct.Pin = LED_PIN;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);

  while (1){
    HAL_GPIO_TogglePin(LED_GPIO_PORT, LED_PIN);
    HAL_Delay(500);
  }
}
void SysTick_Handler(void)
{
  HAL_IncTick();
}

void NMI_Handler(void)
{
}

void HardFault_Handler(void)
{
  while (1) {}
}

void MemManage_Handler(void)
{
  while (1) {}
}

void BusFault_Handler(void)
{
  while (1) {}
}

void UsageFault_Handler(void)
{
  while (1) {}
}

void SVC_Handler(void)
{
}

void DebugMon_Handler(void)
{
}

void PendSV_Handler(void)
{
}
Unturned3 commented 3 years ago

Temporary Solution:

Run this in Terminal to remove all .DS_Store files from the ~/.platformio folder:

cd ~/.platformio
rm $(find . | grep .DS_Store)
valeros commented 3 years ago

Thanks for reporting. Should be fixed in the development branch, please retest with the following configuration:

[env:nucleo_l031k6]
platform = https://github.com/platformio/platform-ststm32.git
board = nucleo_l031k6
framework = stm32cube
upload_protocol = stlink