Skip to content

Commit a4d5477

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

File tree

10 files changed

+83
-676
lines changed

10 files changed

+83
-676
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ jobs:
5959
build_tests/**/*.avm
6060
build_tests/**/*.beam
6161
build_tests/**/*.hrl
62+
build_tests/tools/packbeam/packbeam
6263
retention-days: 1
6364

6465
build-and-test-other:
@@ -159,7 +160,6 @@ jobs:
159160
mkdir -p build &&
160161
cd build &&
161162
cmake .. ${{ matrix.cmake_opts }} &&
162-
make PackBEAM &&
163163
cp ../build_tests/tests/erlang_tests/*.beam tests/erlang_tests/ &&
164164
cp ../build_tests/tests/erlang_tests/code_load/*.{avm,beam,hrl} tests/erlang_tests/code_load/ &&
165165
mkdir -p tests/erlang_tests/code_load/beams/ &&
@@ -168,6 +168,7 @@ jobs:
168168
cp ../build_tests/tests/libs/estdlib/*.avm tests/libs/estdlib/ &&
169169
cp ../build_tests/tests/libs/eavmlib/*.avm tests/libs/eavmlib/ &&
170170
cp ../build_tests/tests/libs/alisp/*.avm tests/libs/alisp/ &&
171+
cp ../build_tests/tools/packbeam/packbeam tools/packbeam/packbeam &&
171172
touch tests/erlang_tests/code_load/code_load_pack.avm &&
172173
touch tests/erlang_tests/code_load/code_load_pack_data.hrl &&
173174
make AtomVM &&

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
)
@@ -146,9 +146,9 @@ macro(pack_test avm_name main)
146146
)
147147

148148
if(AVM_RELEASE)
149-
set(INCLUDE_LINES "")
149+
set(INCLUDE_LINES "--remove_lines")
150150
else()
151-
set(INCLUDE_LINES "-i")
151+
set(INCLUDE_LINES "")
152152
endif()
153153

154154
# Set up standard libraries
@@ -168,7 +168,7 @@ macro(pack_test avm_name main)
168168
add_custom_command(
169169
OUTPUT ${avm_name}.avm
170170
DEPENDS ${avm_name}_main ${avm_name}_tests ${ARCHIVE_TARGETS} PackBEAM
171-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${TEST_BEAMS} ${ARCHIVES}
171+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${TEST_BEAMS} ${ARCHIVES}
172172
COMMENT "Packing test ${avm_name}.avm"
173173
VERBATIM
174174
)

CMakeModules/BuildErlang.cmake

Lines changed: 17 additions & 17 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
)
@@ -135,16 +135,16 @@ macro(pack_lib avm_name)
135135
endforeach()
136136

137137
if(AVM_RELEASE)
138-
set(INCLUDE_LINES "")
138+
set(INCLUDE_LINES "--remove_lines")
139139
else()
140-
set(INCLUDE_LINES "-i")
140+
set(INCLUDE_LINES "")
141141
endif()
142142

143143
add_custom_command(
144144
OUTPUT ${avm_name}.avm
145145
DEPENDS ${pack_lib_${avm_name}_archive_targets} PackBEAM
146-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}.avm ${pack_lib_${avm_name}_emu_archives} ${pack_lib_${avm_name}_archives}
147-
COMMENT "Packing lib ${avm_name}.avm"
146+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${pack_lib_${avm_name}_archives}
147+
COMMENT "Packing runnable ${avm_name}.avm"
148148
VERBATIM
149149
)
150150
if(NOT AVM_DISABLE_JIT)
@@ -225,15 +225,15 @@ macro(pack_runnable avm_name main)
225225
endif()
226226

227227
if(AVM_RELEASE)
228-
set(INCLUDE_LINES "")
228+
set(INCLUDE_LINES "--remove_lines")
229229
else()
230-
set(INCLUDE_LINES "-i")
230+
set(INCLUDE_LINES "")
231231
endif()
232232

233233
add_custom_command(
234234
OUTPUT ${avm_name}.avm
235235
DEPENDS ${avm_name}_main ${pack_runnable_${avm_name}_archive_targets} PackBEAM
236-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives}
236+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -p -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives}
237237
COMMENT "Packing runnable ${avm_name}.avm"
238238
VERBATIM
239239
)
@@ -266,9 +266,9 @@ macro(pack_test test_avm_name)
266266
endforeach()
267267

268268
if(AVM_RELEASE)
269-
set(INCLUDE_LINES "")
269+
set(INCLUDE_LINES "--remove_lines")
270270
else()
271-
set(INCLUDE_LINES "-i")
271+
set(INCLUDE_LINES "")
272272
endif()
273273

274274
add_custom_command(
@@ -281,7 +281,7 @@ macro(pack_test test_avm_name)
281281
add_custom_command(
282282
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${test_avm_name}.avm
283283
DEPENDS ${pack_test_${test_avm_name}_archive_targets} PackBEAM tests.beam
284-
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}
284+
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}
285285
COMMENT "Packing runnable ${test_avm_name}.avm"
286286
VERBATIM
287287
)
@@ -313,15 +313,15 @@ macro(pack_eunit test_avm_name)
313313
endforeach()
314314

315315
if(AVM_RELEASE)
316-
set(INCLUDE_LINES "")
316+
set(INCLUDE_LINES "--remove_lines")
317317
else()
318-
set(INCLUDE_LINES "-i")
318+
set(INCLUDE_LINES "")
319319
endif()
320320

321321
add_custom_command(
322322
OUTPUT ${test_avm_name}.avm
323323
DEPENDS ${pack_eunit_${test_avm_name}_archive_targets} PackBEAM ${CMAKE_BINARY_DIR}/libs/etest/src/beams/eunit.beam
324-
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}
324+
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}
325325
COMMENT "Packing runnable ${test_avm_name}.avm"
326326
VERBATIM
327327
)
@@ -359,7 +359,7 @@ macro(pack_uf2 avm_name main)
359359
add_custom_command(
360360
OUTPUT ${avm_name}.avm
361361
DEPENDS ${avm_name}_main ${pack_uf2_${avm_name}_archive_targets} PackBEAM
362-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives}
362+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -p -s ${main} ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives}
363363
COMMENT "Packing runnable ${avm_name}.avm"
364364
VERBATIM
365365
)

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)