STM32F072 discovery board with libopencm3

Great thanks for your detailed answer!

Why did you use nucleo_f072rb.json over disco_f072rb.json?

I changed the function merge_ld_scripts in ~\.platformio\platforms\ststm32\builder\frameworks\libopencm3\libopencm3.py to:

def merge_ld_scripts(main_ld_file):

    def _include_callback(match):
        incre = re.compile(r"^INCLUDE\s+\"?([^\.]+\.ld)\"?", re.M)
        included_ld_file = match.group(1)
        # search included ld file in lib directories
        for root, _, files in walk(join(FRAMEWORK_DIR, "lib")):
            if included_ld_file not in files:
                continue
            with open(join(root, included_ld_file)) as fp:
                #return fp.read()
                return incre.sub(r'_INCLUDE_ \1', fp.read())
        return match.group(0)

    content = ""
    with open(main_ld_file) as f:
        content = f.read()

    incre = re.compile(r"^INCLUDE\s+\"?([^\.]+\.ld)\"?", re.M)
    with open(main_ld_file, "w") as f:
        f.write(incre.sub(_include_callback, content))

Furthermore, I updated the platformio.ini to:

[env:disco_f072rb]
board = nucleo_f072rb_libopencm
platform = https://github.com/platformio/platform-ststm32.git
platform_packages = framework-libopencm3 @ https://github.com/libopencm3/libopencm3#master
framework = libopencm3
debug_tool = stlink
upload_protocol = stlink

platformio run fails with:

KeyError: "Invalid board option 'build.core'":
  File "/Users/bodokaiser/.pyenv/versions/3.8.1/Python.framework/Versions/3.8/lib/python3.8/site-packages/platformio/builder/main.py", line 156:
    env.SConscript("$BUILD_SCRIPT")
  File "/Users/bodokaiser/.platformio/packages/tool-scons/script/../engine/SCons/Script/SConscript.py", line 597:
    return _SConscript(self.fs, *files, **subst_kw)
  File "/Users/bodokaiser/.platformio/packages/tool-scons/script/../engine/SCons/Script/SConscript.py", line 286:
    exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
  File "/Users/bodokaiser/.platformio/platforms/ststm32@src-15e0e87f41a00aa2f9602f71367ac29c/builder/main.py", line 98:
    target_elf = env.BuildProgram()
  File "/Users/bodokaiser/.platformio/packages/tool-scons/script/../engine/SCons/Environment.py", line 219:
    return self.method(*nargs, **kwargs)
  File "/Users/bodokaiser/.pyenv/versions/3.8.1/Python.framework/Versions/3.8/lib/python3.8/site-packages/platformio/builder/tools/platformio.py", line 61:
    env.ProcessProgramDeps()
  File "/Users/bodokaiser/.platformio/packages/tool-scons/script/../engine/SCons/Environment.py", line 219:
    return self.method(*nargs, **kwargs)
  File "/Users/bodokaiser/.pyenv/versions/3.8.1/Python.framework/Versions/3.8/lib/python3.8/site-packages/platformio/builder/tools/platformio.py", line 118:
    env.BuildFrameworks(env.get("PIOFRAMEWORK"))
  File "/Users/bodokaiser/.platformio/packages/tool-scons/script/../engine/SCons/Environment.py", line 219:
    return self.method(*nargs, **kwargs)
  File "/Users/bodokaiser/.pyenv/versions/3.8.1/Python.framework/Versions/3.8/lib/python3.8/site-packages/platformio/builder/tools/platformio.py", line 330:
    SConscript(env.GetFrameworkScript(f), exports="env")
  File "/Users/bodokaiser/.platformio/packages/tool-scons/script/../engine/SCons/Script/SConscript.py", line 660:
    return method(*args, **kw)
  File "/Users/bodokaiser/.platformio/packages/tool-scons/script/../engine/SCons/Script/SConscript.py", line 597:
    return _SConscript(self.fs, *files, **subst_kw)
  File "/Users/bodokaiser/.platformio/packages/tool-scons/script/../engine/SCons/Script/SConscript.py", line 286:
    exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
  File "/Users/bodokaiser/.platformio/platforms/ststm32@src-15e0e87f41a00aa2f9602f71367ac29c/builder/frameworks/libopencm3/libopencm3.py", line 147:
    if board.get("build.core") == "tivac":
  File "/Users/bodokaiser/.pyenv/versions/3.8.1/Python.framework/Versions/3.8/lib/python3.8/site-packages/platformio/managers/platform.py", line 795:
    raise KeyError("Invalid board option '%s'" % path)

Can it be that we are missing a core property in the build block of ~/.platformio/boards/nucleo_f072rb_libopencm.json?