Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/build-and-test-other.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ jobs:
build_tests/**/*.avm
build_tests/**/*.beam
build_tests/**/*.hrl
build_tests/tools/packbeam/packbeam
retention-days: 1

build-and-test-other:
Expand Down Expand Up @@ -159,7 +160,6 @@ jobs:
mkdir -p build &&
cd build &&
cmake .. ${{ matrix.cmake_opts }} &&
make PackBEAM &&
cp ../build_tests/tests/erlang_tests/*.beam tests/erlang_tests/ &&
cp ../build_tests/tests/erlang_tests/code_load/*.{avm,beam,hrl} tests/erlang_tests/code_load/ &&
mkdir -p tests/erlang_tests/code_load/beams/ &&
Expand All @@ -168,6 +168,7 @@ jobs:
cp ../build_tests/tests/libs/estdlib/*.avm tests/libs/estdlib/ &&
cp ../build_tests/tests/libs/eavmlib/*.avm tests/libs/eavmlib/ &&
cp ../build_tests/tests/libs/alisp/*.avm tests/libs/alisp/ &&
cp ../build_tests/tools/packbeam/packbeam tools/packbeam/packbeam &&
touch tests/erlang_tests/code_load/code_load_pack.avm &&
touch tests/erlang_tests/code_load/code_load_pack_data.hrl &&
make AtomVM &&
Expand Down
18 changes: 9 additions & 9 deletions CMakeModules/BuildElixir.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ macro(pack_archive avm_name)
)

if(AVM_RELEASE)
set(INCLUDE_LINES "")
set(INCLUDE_LINES "--remove_lines")
else()
set(INCLUDE_LINES "-i")
set(INCLUDE_LINES "")
endif()

add_custom_command(
OUTPUT ${avm_name}.avm
DEPENDS ${avm_name}_beams PackBEAM
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS}
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS}
COMMENT "Packing archive ${avm_name}.avm"
VERBATIM
)
Expand Down Expand Up @@ -74,9 +74,9 @@ macro(pack_runnable avm_name main)
)

if(AVM_RELEASE)
set(INCLUDE_LINES "")
set(INCLUDE_LINES "--remove_lines")
else()
set(INCLUDE_LINES "-i")
set(INCLUDE_LINES "")
endif()

foreach(archive_name ${ARGN})
Expand All @@ -91,7 +91,7 @@ macro(pack_runnable avm_name main)
add_custom_command(
OUTPUT ${avm_name}.avm
DEPENDS ${avm_name}_main ${ARCHIVE_TARGETS} PackBEAM
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm 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}
COMMENT "Packing runnable ${avm_name}.avm"
VERBATIM
)
Expand Down Expand Up @@ -146,9 +146,9 @@ macro(pack_test avm_name main)
)

if(AVM_RELEASE)
set(INCLUDE_LINES "")
set(INCLUDE_LINES "--remove_lines")
else()
set(INCLUDE_LINES "-i")
set(INCLUDE_LINES "")
endif()

# Set up standard libraries
Expand All @@ -168,7 +168,7 @@ macro(pack_test avm_name main)
add_custom_command(
OUTPUT ${avm_name}.avm
DEPENDS ${avm_name}_main ${avm_name}_tests ${ARCHIVE_TARGETS} PackBEAM
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${TEST_BEAMS} ${ARCHIVES}
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${TEST_BEAMS} ${ARCHIVES}
COMMENT "Packing test ${avm_name}.avm"
VERBATIM
)
Expand Down
34 changes: 17 additions & 17 deletions CMakeModules/BuildErlang.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ macro(pack_archive avm_name)
endforeach()

if(AVM_RELEASE)
set(INCLUDE_LINES "")
set(INCLUDE_LINES "--remove_lines")
else()
set(INCLUDE_LINES "-i")
set(INCLUDE_LINES "")
endif()

add_custom_command(
OUTPUT ${avm_name}.avm
DEPENDS ${pack_archive_${avm_name}_beams} PackBEAM
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}.avm ${pack_archive_${avm_name}_beams}
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${pack_archive_${avm_name}_beams}
COMMENT "Packing archive ${avm_name}.avm"
VERBATIM
)
Expand Down Expand Up @@ -135,16 +135,16 @@ macro(pack_lib avm_name)
endforeach()

if(AVM_RELEASE)
set(INCLUDE_LINES "")
set(INCLUDE_LINES "--remove_lines")
else()
set(INCLUDE_LINES "-i")
set(INCLUDE_LINES "")
endif()

add_custom_command(
OUTPUT ${avm_name}.avm
DEPENDS ${pack_lib_${avm_name}_archive_targets} PackBEAM
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}.avm ${pack_lib_${avm_name}_emu_archives} ${pack_lib_${avm_name}_archives}
COMMENT "Packing lib ${avm_name}.avm"
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${pack_lib_${avm_name}_archives}
COMMENT "Packing runnable ${avm_name}.avm"
VERBATIM
)
if(NOT AVM_DISABLE_JIT)
Expand Down Expand Up @@ -225,15 +225,15 @@ macro(pack_runnable avm_name main)
endif()

if(AVM_RELEASE)
set(INCLUDE_LINES "")
set(INCLUDE_LINES "--remove_lines")
else()
set(INCLUDE_LINES "-i")
set(INCLUDE_LINES "")
endif()

add_custom_command(
OUTPUT ${avm_name}.avm
DEPENDS ${avm_name}_main ${pack_runnable_${avm_name}_archive_targets} PackBEAM
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives}
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -p -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives}
COMMENT "Packing runnable ${avm_name}.avm"
VERBATIM
)
Expand Down Expand Up @@ -266,9 +266,9 @@ macro(pack_test test_avm_name)
endforeach()

if(AVM_RELEASE)
set(INCLUDE_LINES "")
set(INCLUDE_LINES "--remove_lines")
else()
set(INCLUDE_LINES "-i")
set(INCLUDE_LINES "")
endif()

add_custom_command(
Expand All @@ -281,7 +281,7 @@ macro(pack_test test_avm_name)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${test_avm_name}.avm
DEPENDS ${pack_test_${test_avm_name}_archive_targets} PackBEAM tests.beam
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${CMAKE_CURRENT_BINARY_DIR}/${test_avm_name}.avm ${CMAKE_CURRENT_BINARY_DIR}/tests.beam ${pack_test_${test_avm_name}_archives}
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${CMAKE_CURRENT_BINARY_DIR}/${test_avm_name}.avm ${CMAKE_CURRENT_BINARY_DIR}/tests.beam ${pack_test_${test_avm_name}_archives}
COMMENT "Packing runnable ${test_avm_name}.avm"
VERBATIM
)
Expand Down Expand Up @@ -313,15 +313,15 @@ macro(pack_eunit test_avm_name)
endforeach()

if(AVM_RELEASE)
set(INCLUDE_LINES "")
set(INCLUDE_LINES "--remove_lines")
else()
set(INCLUDE_LINES "-i")
set(INCLUDE_LINES "")
endif()

add_custom_command(
OUTPUT ${test_avm_name}.avm
DEPENDS ${pack_eunit_${test_avm_name}_archive_targets} PackBEAM ${CMAKE_BINARY_DIR}/libs/etest/src/beams/eunit.beam
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${CMAKE_CURRENT_BINARY_DIR}/${test_avm_name}.avm ${CMAKE_BINARY_DIR}/libs/etest/src/beams/eunit.beam ${pack_eunit_${test_avm_name}_archives}
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${CMAKE_CURRENT_BINARY_DIR}/${test_avm_name}.avm ${CMAKE_BINARY_DIR}/libs/etest/src/beams/eunit.beam ${pack_eunit_${test_avm_name}_archives}
COMMENT "Packing runnable ${test_avm_name}.avm"
VERBATIM
)
Expand Down Expand Up @@ -359,7 +359,7 @@ macro(pack_uf2 avm_name main)
add_custom_command(
OUTPUT ${avm_name}.avm
DEPENDS ${avm_name}_main ${pack_uf2_${avm_name}_archive_targets} PackBEAM
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives}
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -p -s ${main} ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives}
COMMENT "Packing runnable ${avm_name}.avm"
VERBATIM
)
Expand Down
12 changes: 6 additions & 6 deletions CMakeModules/BuildGleam.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ macro(pack_gleam_archive avm_name)
endforeach()

if(AVM_RELEASE)
set(INCLUDE_LINES "")
set(INCLUDE_LINES "--remove_lines")
else()
set(INCLUDE_LINES "-i")
set(INCLUDE_LINES "")
endif()

add_custom_command(
Expand All @@ -39,7 +39,7 @@ macro(pack_gleam_archive avm_name)
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 -a ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS}
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS}
COMMENT "Packing gleam archive ${avm_name}.avm"
VERBATIM
)
Expand All @@ -54,9 +54,9 @@ macro(pack_gleam_runnable avm_name main)
list(APPEND BEAMS ${CMAKE_CURRENT_BINARY_DIR}/build/prod/erlang/${main}/ebin/${main}.beam)

if(AVM_RELEASE)
set(INCLUDE_LINES "")
set(INCLUDE_LINES "--remove_lines")
else()
set(INCLUDE_LINES "-i")
set(INCLUDE_LINES "")
endif()

foreach(archive_name ${ARGN})
Expand All @@ -74,7 +74,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 ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS} build/prod/erlang/gleam_stdlib/ebin/*.beam ${ARCHIVES}
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS} build/prod/erlang/gleam_stdlib/ebin/*.beam ${ARCHIVES}
COMMENT "Packing gleam runnable ${avm_name}.avm"
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ compile_erlang(test_tz)

add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/esp32_test_modules.avm"
COMMAND HostAtomVM-prefix/src/HostAtomVM-build/tools/packbeam/PackBEAM -i esp32_test_modules.avm
COMMAND HostAtomVM-prefix/src/HostAtomVM-build/tools/packbeam/packbeam create esp32_test_modules.avm
HostAtomVM-prefix/src/HostAtomVM-build/libs/atomvmlib.avm
test_esp_partition.beam
test_file.beam
Expand Down
2 changes: 1 addition & 1 deletion src/platforms/rp2/tests/test_erl_sources/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ compile_erlang(test_crypto ../../../esp32/test/main/test_erl_sources/)

add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/rp2_test_modules.avm"
COMMAND HostAtomVM-prefix/src/HostAtomVM-build/tools/packbeam/PackBEAM -i rp2_test_modules.avm
COMMAND HostAtomVM-prefix/src/HostAtomVM-build/tools/packbeam/packbeam create rp2_test_modules.avm
HostAtomVM-prefix/src/HostAtomVM-build/libs/atomvmlib.avm
test_clocks.beam
test_smp.beam
Expand Down
53 changes: 21 additions & 32 deletions tools/packbeam/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#
# This file is part of AtomVM.
#
# Copyright 2018-2020 Davide Bettio <[email protected]>
# Copyright 2025 Paul Guyot <[email protected]>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
Expand All @@ -21,41 +21,30 @@
cmake_minimum_required (VERSION 3.13)
project (PackBEAM)

set(PACKBEAM_SOURCES
packbeam.c
)
set(PACKBEAM_PATH "" CACHE PATH "Path to PackBEAM source tree. If unset, hex package will be used")

add_executable(PackBEAM ${PACKBEAM_SOURCES})
target_compile_features(PackBEAM PUBLIC c_std_11)
if(CMAKE_COMPILER_IS_GNUCC)
target_compile_options(PackBEAM PUBLIC -Wall -pedantic -Wextra -ggdb)
if(NOT PACKBEAM_PATH STREQUAL "")
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/_checkouts)
file(CREATE_LINK ${PACKBEAM_PATH} ${CMAKE_CURRENT_BINARY_DIR}/_checkouts/packbeam SYMBOLIC)
endif()

find_package(ZLIB)
if (ZLIB_FOUND)
target_compile_definitions(PackBEAM PUBLIC WITH_ZLIB)
target_link_libraries(PackBEAM PRIVATE ${ZLIB_LIBRARIES})
endif (ZLIB_FOUND)
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/rebar.config
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
)

if((${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") OR
(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") OR
(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") OR
(${CMAKE_SYSTEM_NAME} STREQUAL "DragonFly"))
target_include_directories(PackBEAM PRIVATE ../../src/platforms/generic_unix/lib)
else()
message(FATAL_ERROR "Unsupported platform: ${CMAKE_SYSTEM_NAME}")
endif()
set(
PLATFORM_LIB_SUFFIX
${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}
add_custom_command(
OUTPUT packbeam
COMMAND rebar3 escriptize && cp _build/default/bin/packbeam .
VERBATIM
)
target_link_libraries(PackBEAM PRIVATE libAtomVM${PLATFORM_LIB_SUFFIX})

target_include_directories(PackBEAM PUBLIC ../../src/libAtomVM)
target_link_libraries(PackBEAM PRIVATE libAtomVM)
add_custom_target(
PackBEAM ALL
DEPENDS packbeam
)

if (COVERAGE)
include(CodeCoverage)
append_coverage_compiler_flags_to_target(PackBEAM)
append_coverage_linker_flags_to_target(PackBEAM)
endif()
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/packbeam
DESTINATION bin
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
)
Loading
Loading