Skip to content

Commit 3d8ecda

Browse files
committed
Use atomvm_packbeam instead of built-in C packbeam
Signed-off-by: Paul Guyot <[email protected]>
1 parent 3b6901b commit 3d8ecda

File tree

10 files changed

+80
-667
lines changed

10 files changed

+80
-667
lines changed

.github/workflows/build-and-test-other.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ jobs:
159159
mkdir -p build &&
160160
cd build &&
161161
cmake .. ${{ matrix.cmake_opts }} &&
162-
make PackBEAM &&
163162
cp ../build_tests/tests/erlang_tests/*.beam tests/erlang_tests/ &&
164163
cp ../build_tests/tests/erlang_tests/code_load/*.{avm,beam,hrl} tests/erlang_tests/code_load/ &&
165164
mkdir -p tests/erlang_tests/code_load/beams/ &&

CMakeModules/BuildElixir.cmake

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,15 @@ macro(pack_archive avm_name)
3838
)
3939

4040
if(AVM_RELEASE)
41-
set(INCLUDE_LINES "")
41+
set(INCLUDE_LINES "--remove_lines")
4242
else()
43-
set(INCLUDE_LINES "-i")
43+
set(INCLUDE_LINES "")
4444
endif()
4545

4646
add_custom_command(
4747
OUTPUT ${avm_name}.avm
4848
DEPENDS ${avm_name}_beams PackBEAM
49-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS}
49+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS}
5050
COMMENT "Packing archive ${avm_name}.avm"
5151
VERBATIM
5252
)
@@ -74,9 +74,9 @@ macro(pack_runnable avm_name main)
7474
)
7575

7676
if(AVM_RELEASE)
77-
set(INCLUDE_LINES "")
77+
set(INCLUDE_LINES "--remove_lines")
7878
else()
79-
set(INCLUDE_LINES "-i")
79+
set(INCLUDE_LINES "")
8080
endif()
8181

8282
foreach(archive_name ${ARGN})
@@ -91,7 +91,7 @@ macro(pack_runnable avm_name main)
9191
add_custom_command(
9292
OUTPUT ${avm_name}.avm
9393
DEPENDS ${avm_name}_main ${ARCHIVE_TARGETS} PackBEAM
94-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${ARCHIVES}
94+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -p -s Elixir.${main} ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${ARCHIVES}
9595
COMMENT "Packing runnable ${avm_name}.avm"
9696
VERBATIM
9797
)
@@ -139,9 +139,9 @@ macro(pack_test avm_name main)
139139
)
140140

141141
if(AVM_RELEASE)
142-
set(INCLUDE_LINES "")
142+
set(INCLUDE_LINES "--remove_lines")
143143
else()
144-
set(INCLUDE_LINES "-i")
144+
set(INCLUDE_LINES "")
145145
endif()
146146

147147
# Set up standard libraries
@@ -157,7 +157,7 @@ macro(pack_test avm_name main)
157157
add_custom_command(
158158
OUTPUT ${avm_name}.avm
159159
DEPENDS ${avm_name}_main ${avm_name}_tests ${ARCHIVE_TARGETS} PackBEAM
160-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${TEST_BEAMS} ${ARCHIVES}
160+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${TEST_BEAMS} ${ARCHIVES}
161161
COMMENT "Packing test ${avm_name}.avm"
162162
VERBATIM
163163
)

CMakeModules/BuildErlang.cmake

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,15 @@ macro(pack_archive avm_name)
4141
endforeach()
4242

4343
if(AVM_RELEASE)
44-
set(INCLUDE_LINES "")
44+
set(INCLUDE_LINES "--remove_lines")
4545
else()
46-
set(INCLUDE_LINES "-i")
46+
set(INCLUDE_LINES "")
4747
endif()
4848

4949
add_custom_command(
5050
OUTPUT ${avm_name}.avm
5151
DEPENDS ${pack_archive_${avm_name}_beams} PackBEAM
52-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}.avm ${pack_archive_${avm_name}_beams}
52+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${pack_archive_${avm_name}_beams}
5353
COMMENT "Packing archive ${avm_name}.avm"
5454
VERBATIM
5555
)
@@ -74,15 +74,15 @@ macro(pack_lib avm_name)
7474
endforeach()
7575

7676
if(AVM_RELEASE)
77-
set(INCLUDE_LINES "")
77+
set(INCLUDE_LINES "--remove_lines")
7878
else()
79-
set(INCLUDE_LINES "-i")
79+
set(INCLUDE_LINES "")
8080
endif()
8181

8282
add_custom_command(
8383
OUTPUT ${avm_name}.avm
8484
DEPENDS ${pack_lib_${avm_name}_archive_targets} PackBEAM
85-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}.avm ${pack_lib_${avm_name}_archives}
85+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${pack_lib_${avm_name}_archives}
8686
COMMENT "Packing runnable ${avm_name}.avm"
8787
VERBATIM
8888
)
@@ -151,15 +151,15 @@ macro(pack_runnable avm_name main)
151151
endif()
152152

153153
if(AVM_RELEASE)
154-
set(INCLUDE_LINES "")
154+
set(INCLUDE_LINES "--remove_lines")
155155
else()
156-
set(INCLUDE_LINES "-i")
156+
set(INCLUDE_LINES "")
157157
endif()
158158

159159
add_custom_command(
160160
OUTPUT ${avm_name}.avm
161161
DEPENDS ${avm_name}_main ${pack_runnable_${avm_name}_archive_targets} PackBEAM
162-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives}
162+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -p -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives}
163163
COMMENT "Packing runnable ${avm_name}.avm"
164164
VERBATIM
165165
)
@@ -181,9 +181,9 @@ macro(pack_test test_avm_name)
181181
endforeach()
182182

183183
if(AVM_RELEASE)
184-
set(INCLUDE_LINES "")
184+
set(INCLUDE_LINES "--remove_lines")
185185
else()
186-
set(INCLUDE_LINES "-i")
186+
set(INCLUDE_LINES "")
187187
endif()
188188

189189
add_custom_command(
@@ -196,7 +196,7 @@ macro(pack_test test_avm_name)
196196
add_custom_command(
197197
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${test_avm_name}.avm
198198
DEPENDS ${pack_test_${test_avm_name}_archive_targets} PackBEAM tests.beam
199-
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}
199+
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}
200200
COMMENT "Packing runnable ${test_avm_name}.avm"
201201
VERBATIM
202202
)
@@ -217,15 +217,15 @@ macro(pack_eunit test_avm_name)
217217
endforeach()
218218

219219
if(AVM_RELEASE)
220-
set(INCLUDE_LINES "")
220+
set(INCLUDE_LINES "--remove_lines")
221221
else()
222-
set(INCLUDE_LINES "-i")
222+
set(INCLUDE_LINES "")
223223
endif()
224224

225225
add_custom_command(
226226
OUTPUT ${test_avm_name}.avm
227227
DEPENDS ${pack_eunit_${test_avm_name}_archive_targets} PackBEAM ${CMAKE_BINARY_DIR}/libs/etest/src/beams/eunit.beam
228-
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}
228+
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}
229229
COMMENT "Packing runnable ${test_avm_name}.avm"
230230
VERBATIM
231231
)
@@ -263,7 +263,7 @@ macro(pack_uf2 avm_name main)
263263
add_custom_command(
264264
OUTPUT ${avm_name}.avm
265265
DEPENDS ${avm_name}_main ${pack_uf2_${avm_name}_archive_targets} PackBEAM
266-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives}
266+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -p -s ${main} ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives}
267267
COMMENT "Packing runnable ${avm_name}.avm"
268268
VERBATIM
269269
)

CMakeModules/BuildGleam.cmake

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ macro(pack_gleam_archive avm_name)
2828
endforeach()
2929

3030
if(AVM_RELEASE)
31-
set(INCLUDE_LINES "")
31+
set(INCLUDE_LINES "--remove_lines")
3232
else()
33-
set(INCLUDE_LINES "-i")
33+
set(INCLUDE_LINES "")
3434
endif()
3535

3636
add_custom_command(
@@ -39,7 +39,7 @@ macro(pack_gleam_archive avm_name)
3939
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gleam.toml ${CMAKE_CURRENT_SOURCE_DIR}/manifest.toml ${CMAKE_CURRENT_BINARY_DIR}/
4040
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src
4141
COMMAND gleam export erlang-shipment
42-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS}
42+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS}
4343
COMMENT "Packing gleam archive ${avm_name}.avm"
4444
VERBATIM
4545
)
@@ -54,9 +54,9 @@ macro(pack_gleam_runnable avm_name main)
5454
list(APPEND BEAMS ${CMAKE_CURRENT_BINARY_DIR}/build/prod/erlang/${main}/ebin/${main}.beam)
5555

5656
if(AVM_RELEASE)
57-
set(INCLUDE_LINES "")
57+
set(INCLUDE_LINES "--remove_lines")
5858
else()
59-
set(INCLUDE_LINES "-i")
59+
set(INCLUDE_LINES "")
6060
endif()
6161

6262
foreach(archive_name ${ARGN})
@@ -74,7 +74,7 @@ macro(pack_gleam_runnable avm_name main)
7474
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gleam.toml ${CMAKE_CURRENT_SOURCE_DIR}/manifest.toml ${CMAKE_CURRENT_BINARY_DIR}/
7575
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src
7676
COMMAND gleam export erlang-shipment
77-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS} build/prod/erlang/gleam_stdlib/ebin/*.beam ${ARCHIVES}
77+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS} build/prod/erlang/gleam_stdlib/ebin/*.beam ${ARCHIVES}
7878
COMMENT "Packing gleam runnable ${avm_name}.avm"
7979
)
8080

src/platforms/esp32/test/main/test_erl_sources/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ compile_erlang(test_tz)
5757

5858
add_custom_command(
5959
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/esp32_test_modules.avm"
60-
COMMAND HostAtomVM-prefix/src/HostAtomVM-build/tools/packbeam/PackBEAM -i esp32_test_modules.avm
60+
COMMAND HostAtomVM-prefix/src/HostAtomVM-build/tools/packbeam/packbeam create esp32_test_modules.avm
6161
HostAtomVM-prefix/src/HostAtomVM-build/libs/atomvmlib.avm
6262
test_esp_partition.beam
6363
test_file.beam

src/platforms/rp2/tests/test_erl_sources/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ compile_erlang(test_crypto ../../../esp32/test/main/test_erl_sources/)
4343

4444
add_custom_command(
4545
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/rp2_test_modules.avm"
46-
COMMAND HostAtomVM-prefix/src/HostAtomVM-build/tools/packbeam/PackBEAM -i rp2_test_modules.avm
46+
COMMAND HostAtomVM-prefix/src/HostAtomVM-build/tools/packbeam/packbeam create rp2_test_modules.avm
4747
HostAtomVM-prefix/src/HostAtomVM-build/libs/atomvmlib.avm
4848
test_clocks.beam
4949
test_smp.beam

tools/packbeam/CMakeLists.txt

Lines changed: 21 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#
22
# This file is part of AtomVM.
33
#
4-
# Copyright 2018-2020 Davide Bettio <[email protected]>
4+
# Copyright 2025 Paul Guyot <[email protected]>
55
#
66
# Licensed under the Apache License, Version 2.0 (the "License");
77
# you may not use this file except in compliance with the License.
@@ -21,41 +21,30 @@
2121
cmake_minimum_required (VERSION 3.13)
2222
project (PackBEAM)
2323

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

28-
add_executable(PackBEAM ${PACKBEAM_SOURCES})
29-
target_compile_features(PackBEAM PUBLIC c_std_11)
30-
if(CMAKE_COMPILER_IS_GNUCC)
31-
target_compile_options(PackBEAM PUBLIC -Wall -pedantic -Wextra -ggdb)
26+
if(NOT PACKBEAM_PATH STREQUAL "")
27+
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/_checkouts)
28+
file(CREATE_LINK ${PACKBEAM_PATH} ${CMAKE_CURRENT_BINARY_DIR}/_checkouts/packbeam SYMBOLIC)
3229
endif()
3330

34-
find_package(ZLIB)
35-
if (ZLIB_FOUND)
36-
target_compile_definitions(PackBEAM PUBLIC WITH_ZLIB)
37-
target_link_libraries(PackBEAM PRIVATE ${ZLIB_LIBRARIES})
38-
endif (ZLIB_FOUND)
31+
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/rebar.config
32+
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
33+
)
3934

40-
if((${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") OR
41-
(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") OR
42-
(${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") OR
43-
(${CMAKE_SYSTEM_NAME} STREQUAL "DragonFly"))
44-
target_include_directories(PackBEAM PRIVATE ../../src/platforms/generic_unix/lib)
45-
else()
46-
message(FATAL_ERROR "Unsupported platform: ${CMAKE_SYSTEM_NAME}")
47-
endif()
48-
set(
49-
PLATFORM_LIB_SUFFIX
50-
${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}
35+
add_custom_command(
36+
OUTPUT packbeam
37+
COMMAND rebar3 escriptize && cp _build/default/bin/packbeam .
38+
VERBATIM
5139
)
52-
target_link_libraries(PackBEAM PRIVATE libAtomVM${PLATFORM_LIB_SUFFIX})
5340

54-
target_include_directories(PackBEAM PUBLIC ../../src/libAtomVM)
55-
target_link_libraries(PackBEAM PRIVATE libAtomVM)
41+
add_custom_target(
42+
PackBEAM ALL
43+
DEPENDS packbeam
44+
)
5645

57-
if (COVERAGE)
58-
include(CodeCoverage)
59-
append_coverage_compiler_flags_to_target(PackBEAM)
60-
append_coverage_linker_flags_to_target(PackBEAM)
61-
endif()
46+
install(
47+
FILES ${CMAKE_CURRENT_BINARY_DIR}/packbeam
48+
DESTINATION bin
49+
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
50+
)

0 commit comments

Comments
 (0)