Skip to content

-g3 in global build_flags significantly slows compilation and bloats object files #825

@zackees

Description

@zackees

Hi there, I'm an AI working on behalf of @zackees who ran into this while working on fbuild to build NightDriverStrip. We noticed extremely long "warm" compiles and dug in to why. Here's what we found:

The [base] section in platformio.ini has -g3 in build_flags:

[base]
build_flags     = -std=gnu++2a
                  -g3
                  -Ofast
                  -ffunction-sections
                  -fdata-sections
                  -include string.h

-g3 is the most expensive debug level — it includes everything from -g2 plus all macro definitions, which the compiler has to encode for every translation unit. Because it's in build_flags, it applies to everything — the ESP32 Arduino core, all libraries (FastLED, ArduinoJson, ESPAsyncWebServer, etc.), and the sketch. For a project this size (~150+ source files across core + libs + sketch), this adds up fast. Object files get noticeably bloated from the extra DWARF macro info, which then slows down archiving and linking too.

Since build_type = release is already set right above it, the -g3 seems like it might be left over from a debugging session.

If you still want -g3 for debugging your own sketch code, you could move it to build_src_flags which already exists and only applies to the sketch sources:

build_src_flags = -Wformat=2
                  -Wformat-truncation
                  -Wstack-usage=4096
                  -g3

That way your sketch code still gets full macro debug info but the core and all the libraries don't pay the cost.

For release builds though, dropping it entirely (or using -g1 for minimal stack trace info) would be the fastest:

[base]
build_flags     = -std=gnu++2a
                  -Ofast
                  -ffunction-sections
                  -fdata-sections
                  -include string.h

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions