From 1aac532a155caa689bfb15d71ece07dbcf4a16f1 Mon Sep 17 00:00:00 2001 From: Peter M Date: Sat, 7 Mar 2026 07:09:54 +0100 Subject: [PATCH 1/2] Fix: broken builds - back out prune Backs out the prune option from https://github.com/atomvm/AtomVM/pull/2133 We need to be careful about exactly what and why we prune. Build artifacts were incomplete. Signed-off-by: Peter M --- CMakeModules/BuildElixir.cmake | 2 +- CMakeModules/BuildErlang.cmake | 4 ++-- CMakeModules/BuildGleam.cmake | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeModules/BuildElixir.cmake b/CMakeModules/BuildElixir.cmake index 6dcc912e66..e007b6023d 100644 --- a/CMakeModules/BuildElixir.cmake +++ b/CMakeModules/BuildElixir.cmake @@ -94,7 +94,7 @@ macro(pack_runnable avm_name main) add_custom_command( OUTPUT ${avm_name}.avm DEPENDS ${avm_name}_main ${ARCHIVE_TARGETS} PackBEAM Elixir.${main}.beam ${ARCHIVES} - COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -p -s Elixir.${main} ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${ARCHIVES} + COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -s Elixir.${main} ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${ARCHIVES} COMMENT "Packing runnable ${avm_name}.avm" VERBATIM ) diff --git a/CMakeModules/BuildErlang.cmake b/CMakeModules/BuildErlang.cmake index aa72718840..00e5b83a3f 100644 --- a/CMakeModules/BuildErlang.cmake +++ b/CMakeModules/BuildErlang.cmake @@ -289,7 +289,7 @@ macro(pack_runnable avm_name main) add_custom_command( OUTPUT ${avm_name}.avm DEPENDS ${avm_name}_main ${main}.beam ${pack_runnable_${avm_name}_archives} ${pack_runnable_${avm_name}_archive_targets} PackBEAM - COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -p -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives} + COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives} COMMENT "Packing runnable ${avm_name}.avm" VERBATIM ) @@ -421,7 +421,7 @@ macro(pack_uf2 avm_name main) add_custom_command( OUTPUT ${avm_name}.avm DEPENDS ${avm_name}_main ${main}.beam ${pack_uf2_${avm_name}_archives} ${pack_uf2_${avm_name}_archive_targets} PackBEAM - COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} -p -s ${main} ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives} + COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} -s ${main} ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives} COMMENT "Packing runnable ${avm_name}.avm" VERBATIM ) diff --git a/CMakeModules/BuildGleam.cmake b/CMakeModules/BuildGleam.cmake index f63fd98c63..e461696920 100644 --- a/CMakeModules/BuildGleam.cmake +++ b/CMakeModules/BuildGleam.cmake @@ -75,7 +75,7 @@ macro(pack_gleam_runnable avm_name main) COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gleam.toml ${CMAKE_CURRENT_SOURCE_DIR}/manifest.toml ${CMAKE_CURRENT_BINARY_DIR}/ COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src COMMAND gleam export erlang-shipment - COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -p -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS} ${ARCHIVES} + COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS} ${ARCHIVES} COMMENT "Packing gleam runnable ${avm_name}.avm" ) From 8d827403f314d3cc64768e4f9012cbbd6930bace Mon Sep 17 00:00:00 2001 From: Peter M Date: Sat, 7 Mar 2026 10:54:39 +0100 Subject: [PATCH 2/2] Scope prune to STM32 runnable examples Reintroduce runnable pruning for STM32 examples only, to reduce AVM size on flash-constrained STM32 targets without changing behavior for other platforms. Signed-off-by: Peter M --- CMakeModules/BuildElixir.cmake | 6 +++++- CMakeModules/BuildErlang.cmake | 12 ++++++++++-- CMakeModules/BuildGleam.cmake | 6 +++++- examples/elixir/stm32/CMakeLists.txt | 3 +++ examples/erlang/stm32/CMakeLists.txt | 3 +++ 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/CMakeModules/BuildElixir.cmake b/CMakeModules/BuildElixir.cmake index e007b6023d..9aa0f9df90 100644 --- a/CMakeModules/BuildElixir.cmake +++ b/CMakeModules/BuildElixir.cmake @@ -81,6 +81,10 @@ macro(pack_runnable avm_name main) else() set(INCLUDE_LINES "") endif() + set(PACKBEAM_PRUNE_ARGS "") + if(AVM_PRUNE_RUNNABLES) + set(PACKBEAM_PRUNE_ARGS "-p") + endif() foreach(archive_name ${ARGN}) if(${archive_name} STREQUAL "exavmlib") @@ -94,7 +98,7 @@ macro(pack_runnable avm_name main) add_custom_command( OUTPUT ${avm_name}.avm DEPENDS ${avm_name}_main ${ARCHIVE_TARGETS} PackBEAM Elixir.${main}.beam ${ARCHIVES} - COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -s Elixir.${main} ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${ARCHIVES} + COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${PACKBEAM_PRUNE_ARGS} -s Elixir.${main} ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${ARCHIVES} COMMENT "Packing runnable ${avm_name}.avm" VERBATIM ) diff --git a/CMakeModules/BuildErlang.cmake b/CMakeModules/BuildErlang.cmake index 00e5b83a3f..509cc8bd70 100644 --- a/CMakeModules/BuildErlang.cmake +++ b/CMakeModules/BuildErlang.cmake @@ -285,11 +285,15 @@ macro(pack_runnable avm_name main) else() set(INCLUDE_LINES "") endif() + set(PACKBEAM_PRUNE_ARGS "") + if(AVM_PRUNE_RUNNABLES) + set(PACKBEAM_PRUNE_ARGS "-p") + endif() add_custom_command( OUTPUT ${avm_name}.avm DEPENDS ${avm_name}_main ${main}.beam ${pack_runnable_${avm_name}_archives} ${pack_runnable_${avm_name}_archive_targets} PackBEAM - COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives} + COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${PACKBEAM_PRUNE_ARGS} -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives} COMMENT "Packing runnable ${avm_name}.avm" VERBATIM ) @@ -417,11 +421,15 @@ macro(pack_uf2 avm_name main) else() set(INCLUDE_LINES "") endif() + set(PACKBEAM_PRUNE_ARGS "") + if(AVM_PRUNE_RUNNABLES) + set(PACKBEAM_PRUNE_ARGS "-p") + endif() add_custom_command( OUTPUT ${avm_name}.avm DEPENDS ${avm_name}_main ${main}.beam ${pack_uf2_${avm_name}_archives} ${pack_uf2_${avm_name}_archive_targets} PackBEAM - COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} -s ${main} ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives} + COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${PACKBEAM_PRUNE_ARGS} -s ${main} ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives} COMMENT "Packing runnable ${avm_name}.avm" VERBATIM ) diff --git a/CMakeModules/BuildGleam.cmake b/CMakeModules/BuildGleam.cmake index e461696920..d911c4bb06 100644 --- a/CMakeModules/BuildGleam.cmake +++ b/CMakeModules/BuildGleam.cmake @@ -59,6 +59,10 @@ macro(pack_gleam_runnable avm_name main) else() set(INCLUDE_LINES "") endif() + set(PACKBEAM_PRUNE_ARGS "") + if(AVM_PRUNE_RUNNABLES) + set(PACKBEAM_PRUNE_ARGS "-p") + endif() foreach(archive_name ${ARGN}) if(${archive_name} STREQUAL "gleam_avm") @@ -75,7 +79,7 @@ macro(pack_gleam_runnable avm_name main) COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gleam.toml ${CMAKE_CURRENT_SOURCE_DIR}/manifest.toml ${CMAKE_CURRENT_BINARY_DIR}/ COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src COMMAND gleam export erlang-shipment - COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS} ${ARCHIVES} + COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${PACKBEAM_PRUNE_ARGS} -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS} ${ARCHIVES} COMMENT "Packing gleam runnable ${avm_name}.avm" ) diff --git a/examples/elixir/stm32/CMakeLists.txt b/examples/elixir/stm32/CMakeLists.txt index cf15d0b46a..fe94a28c12 100644 --- a/examples/elixir/stm32/CMakeLists.txt +++ b/examples/elixir/stm32/CMakeLists.txt @@ -22,4 +22,7 @@ project(examples_elixir_stm32) include(BuildElixir) +# STM32 examples bundle runtime libs in the same AVM and targets are flash-constrained. +set(AVM_PRUNE_RUNNABLES ON) + pack_runnable(MultiBlink MultiBlink estdlib eavmlib exavmlib) diff --git a/examples/erlang/stm32/CMakeLists.txt b/examples/erlang/stm32/CMakeLists.txt index cac029a7eb..fb46e75f27 100644 --- a/examples/erlang/stm32/CMakeLists.txt +++ b/examples/erlang/stm32/CMakeLists.txt @@ -22,6 +22,9 @@ project(examples_erlang_stm32) include(BuildErlang) +# STM32 examples bundle runtime libs in the same AVM and targets are flash-constrained. +set(AVM_PRUNE_RUNNABLES ON) + pack_runnable(blink_weact_studio_blackpill blink_weact_studio_blackpill eavmlib) pack_runnable(blink_weact_studio_h562 blink_weact_studio_h562 eavmlib) pack_runnable(blink_weact_studio_h743 blink_weact_studio_h743 eavmlib)