Skip to content

Commit 378d6f3

Browse files
committed
Use atomvm_packbeam instead of built-in C packbeam
Signed-off-by: Paul Guyot <pguyot@kallisys.net>
1 parent 80d41d8 commit 378d6f3

9 files changed

Lines changed: 80 additions & 674 deletions

File tree

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: 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
)
@@ -146,15 +146,15 @@ macro(pack_lib avm_name)
146146
endforeach()
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
add_custom_command(
155155
OUTPUT ${avm_name}.avm
156156
DEPENDS ${pack_lib_${avm_name}_archive_targets} ${pack_lib_${avm_name}_emu_archives} ${pack_lib_${avm_name}_archives} PackBEAM
157-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}.avm ${pack_lib_${avm_name}_emu_archives} ${pack_lib_${avm_name}_archives}
157+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${pack_lib_${avm_name}_emu_archives} ${pack_lib_${avm_name}_archives}
158158
COMMENT "Packing lib ${avm_name}.avm"
159159
VERBATIM
160160
)
@@ -281,15 +281,15 @@ macro(pack_runnable avm_name main)
281281
endif()
282282

283283
if(AVM_RELEASE)
284-
set(INCLUDE_LINES "")
284+
set(INCLUDE_LINES "--remove_lines")
285285
else()
286-
set(INCLUDE_LINES "-i")
286+
set(INCLUDE_LINES "")
287287
endif()
288288

289289
add_custom_command(
290290
OUTPUT ${avm_name}.avm
291291
DEPENDS ${avm_name}_main ${pack_runnable_${avm_name}_archive_targets} PackBEAM
292-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives}
292+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -p -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives}
293293
COMMENT "Packing runnable ${avm_name}.avm"
294294
VERBATIM
295295
)
@@ -322,9 +322,9 @@ macro(pack_test test_avm_name)
322322
endforeach()
323323

324324
if(AVM_RELEASE)
325-
set(INCLUDE_LINES "")
325+
set(INCLUDE_LINES "--remove_lines")
326326
else()
327-
set(INCLUDE_LINES "-i")
327+
set(INCLUDE_LINES "")
328328
endif()
329329

330330
add_custom_command(
@@ -337,7 +337,7 @@ macro(pack_test test_avm_name)
337337
add_custom_command(
338338
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${test_avm_name}.avm
339339
DEPENDS ${pack_test_${test_avm_name}_archive_targets} PackBEAM tests.beam
340-
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}
340+
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}
341341
COMMENT "Packing runnable ${test_avm_name}.avm"
342342
VERBATIM
343343
)
@@ -369,15 +369,15 @@ macro(pack_eunit test_avm_name)
369369
endforeach()
370370

371371
if(AVM_RELEASE)
372-
set(INCLUDE_LINES "")
372+
set(INCLUDE_LINES "--remove_lines")
373373
else()
374-
set(INCLUDE_LINES "-i")
374+
set(INCLUDE_LINES "")
375375
endif()
376376

377377
add_custom_command(
378378
OUTPUT ${test_avm_name}.avm
379379
DEPENDS ${pack_eunit_${test_avm_name}_archive_targets} PackBEAM ${CMAKE_BINARY_DIR}/libs/etest/src/beams/eunit.beam
380-
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}
380+
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}
381381
COMMENT "Packing runnable ${test_avm_name}.avm"
382382
VERBATIM
383383
)
@@ -415,7 +415,7 @@ macro(pack_uf2 avm_name main)
415415
add_custom_command(
416416
OUTPUT ${avm_name}.avm
417417
DEPENDS ${avm_name}_main ${pack_uf2_${avm_name}_archive_targets} PackBEAM
418-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives}
418+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create -p -s ${main} ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives}
419419
COMMENT "Packing runnable ${avm_name}.avm"
420420
VERBATIM
421421
)

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
)
@@ -55,9 +55,9 @@ macro(pack_gleam_runnable avm_name main)
5555
list(APPEND BEAMS ${CMAKE_CURRENT_BINARY_DIR}/build/prod/erlang/*/ebin/*.beam)
5656

5757
if(AVM_RELEASE)
58-
set(INCLUDE_LINES "")
58+
set(INCLUDE_LINES "--remove_lines")
5959
else()
60-
set(INCLUDE_LINES "-i")
60+
set(INCLUDE_LINES "")
6161
endif()
6262

6363
foreach(archive_name ${ARGN})
@@ -75,7 +75,7 @@ macro(pack_gleam_runnable avm_name main)
7575
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/gleam.toml ${CMAKE_CURRENT_SOURCE_DIR}/manifest.toml ${CMAKE_CURRENT_BINARY_DIR}/
7676
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_BINARY_DIR}/src
7777
COMMAND gleam export erlang-shipment
78-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS} ${ARCHIVES}
78+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS} ${ARCHIVES}
7979
COMMENT "Packing gleam runnable ${avm_name}.avm"
8080
)
8181

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
@@ -74,7 +74,7 @@ endif()
7474

7575
add_custom_command(
7676
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/rp2_test_modules.avm"
77-
COMMAND HostAtomVM-prefix/src/HostAtomVM-build/tools/packbeam/PackBEAM -i rp2_test_modules.avm
77+
COMMAND HostAtomVM-prefix/src/HostAtomVM-build/tools/packbeam/packbeam create rp2_test_modules.avm
7878
HostAtomVM-prefix/src/HostAtomVM-build/libs/atomvmlib.avm
7979
${erlang_test_beams}
8080
DEPENDS

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 <davide@uninstall.it>
4+
# Copyright 2025 Paul Guyot <pguyot@kallisys.net>
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)