aui icon indicating copy to clipboard operation
aui copied to clipboard

Speed up builds for both AUI and AUI-based applications

Open Alex2772 opened this issue 5 months ago • 2 comments

As the project grows, the build times too. Due to my insane love for template metaprogramming, it contributes to build times, too. A cpp file that includes AForEachUI.h compiles considerably slower.

We need to research additional ways to improve compilation speeds. There are ways I know:

  • precompiled headers
  • cmake unity builds
    • aui has many ODR violations, i.e, static constexpr auto LOG_TAG
  • clang has build time profiling flag; should recognize and fix time consuming headers

Alex2772 avatar Aug 02 '25 15:08 Alex2772

clang + -ftime-trace

Cmdline:

 /usr/bin/clang++ -DAPI_AUI_CORE=AUI_IMPORT -DAPI_AUI_IMAGE=AUI_IMPORT -DAPI_AUI_VIEWS=AUI_IMPORT -DAPI_AUI_XML=AUI_IMPORT -DAUI_ARCH_ARM_64=0 -DAUI_ARCH_ARM_V7=0 -DAUI_ARCH_X86=0 -DAUI_ARCH_X86_64=1 -DAUI_CATCH_UNHANDLED=1 -DAUI_CMAKE_PROJECT_VERSION= -DAUI_COMPILER_CLANG=1 -DAUI_COMPILER_GCC=0 -DAUI_COMPILER_MSVC=0 -DAUI_DEBUG=0 -DAUI_ENABLE_DEATH_TESTS=1 -DAUI_MODULE_NAME=aui.example.contacts -DAUI_PLATFORM_ANDROID=0 -DAUI_PLATFORM_APPLE=0 -DAUI_PLATFORM_EMSCRIPTEN=0 -DAUI_PLATFORM_IOS=0 -DAUI_PLATFORM_LINUX=1 -DAUI_PLATFORM_MACOS=0 -DAUI_PLATFORM_UNIX=1 -DAUI_PLATFORM_WIN=0 -DAUI_STATIC -DFMT_HEADER_ONLY=1 -DGLEW_STATIC -DGLM_ENABLE_EXPERIMENTAL=1 -DGLM_FORCE_INLINE=1 -DLUNASVG_BUILD_STATIC -DNOMINMAX=1 -I/home/alex2772/CLionProjects/aui/examples/ui/contacts/src -I/home/alex2772/CLionProjects/aui/aui.core/src -I/home/alex2772/CLionProjects/aui/aui.core/3rdparty/glm -I/home/alex2772/CLionProjects/aui/aui.views/src -I/home/alex2772/CLionProjects/aui/aui.image/src -I/home/alex2772/CLionProjects/aui/aui.xml/src -isystem /home/alex2772/.aui/prefix/fmt/8b0508f8572980283f6e590d25714517/include -isystem /home/alex2772/.aui/prefix/glew/42c11f0fbd0183c3c75d291ed49d8125/include -isystem /home/alex2772/.aui/prefix/backtrace/ef67e760345b5f1846603c2b1814f70d/include -isystem /home/alex2772/.aui/prefix/zlib/7747cb8ecb6a5317cd6cedcdeef924ac/include -isystem /home/alex2772/.aui/prefix/range-v3/539d56c1d49742675f4968ad19c75921/include -isystem /usr/lib64/pkgconfig/../../include/dbus-1.0 -isystem /usr/lib64/pkgconfig/../../lib64/dbus-1.0/include -isystem /usr/include/glib-2.0 -isystem /usr/lib64/glib-2.0/include -isystem /usr/include/sysprof-6 -isystem /usr/include/libmount -isystem /usr/include/blkid -isystem /home/alex2772/.aui/prefix/lunasvg/4b4c8c6f81ae8da44076cc14f411421a/include/lunasvg -isystem /home/alex2772/.aui/prefix/webp/21d087c0e38ed7cfa324a0a23d16f952/include -isystem /home/alex2772/.aui/prefix/webp/21d087c0e38ed7cfa324a0a23d16f952/include/webp -isystem /home/alex2772/.aui/prefix/freetype/72e8d52cee34addb9759691b56bf96e4/include/freetype2 -O2 -g -DNDEBUG -std=gnu++20 -fPIE -fcolor-diagnostics -pthread -DWITH_GZFILEOP -Winvalid-pch -Xclang -include-pch -Xclang /home/alex2772/CLionProjects/aui/cmake-build-relwithdebinfo-clang/examples/ui/contacts/CMakeFiles/aui.example.contacts.dir/cmake_pch.hxx.pch -Xclang -include -Xclang /home/alex2772/CLionProjects/aui/cmake-build-relwithdebinfo-clang/examples/ui/contacts/CMakeFiles/aui.example.contacts.dir/cmake_pch.hxx -MD -MT examples/ui/contacts/CMakeFiles/aui.example.contacts.dir/src/main.cpp.o -MF examples/ui/contacts/CMakeFiles/aui.example.contacts.dir/src/main.cpp.o.d -o examples/ui/contacts/CMakeFiles/aui.example.contacts.dir/src/main.cpp.o -c /home/alex2772/CLionProjects/aui/examples/ui/contacts/src/main.cpp -ftime-trace

Use chrome://tracing to investigate the file.

main.cpp.json

Alex2772 avatar Aug 02 '25 17:08 Alex2772

Same file as above:

Without pch: 17s With pch: 12s -g flag omitted: 10s

not such a big deal.

Alex2772 avatar Aug 02 '25 17:08 Alex2772