Skip to content

Commit 22ca4a2

Browse files
committed
Use atomvm_packbeam instead of built-in C packbeam
Signed-off-by: Paul Guyot <[email protected]>
1 parent 80d41d8 commit 22ca4a2

File tree

12 files changed

+95
-687
lines changed

12 files changed

+95
-687
lines changed

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 --lib ${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 --lib ${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
)
@@ -173,7 +173,7 @@ macro(pack_lib avm_name)
173173
add_custom_command(
174174
OUTPUT ${avm_name}-${jit_target_arch_variant}.avm
175175
DEPENDS ${pack_lib_${avm_name}_archive_targets} ${pack_lib_${avm_name}_jit_archives_${jit_target_arch_variant}} PackBEAM
176-
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}-${jit_target_arch_variant}.avm ${pack_lib_${avm_name}_jit_archives_${jit_target_arch_variant}} ${pack_lib_${avm_name}_archives}
176+
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/packbeam create --lib ${INCLUDE_LINES} ${avm_name}-${jit_target_arch_variant}.avm ${pack_lib_${avm_name}_jit_archives_${jit_target_arch_variant}} ${pack_lib_${avm_name}_archives}
177177
COMMENT "Packing lib ${avm_name}-${jit_target_arch_variant}.avm"
178178
VERBATIM
179179
)
@@ -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 --lib ${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 -p -s ${main} ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS} ${ARCHIVES}
7979
COMMENT "Packing gleam runnable ${avm_name}.avm"
8080
)
8181

doc/src/build-instructions.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ Source code is organized as follows:
6464

6565
* `src` Contains the core AtomVM virtual machine source code;
6666
* `lib` Contains the Erlang and Elixir core library source code;
67-
* `tools` Contains AtomVM tooling, including the `PackBEAM` executable, as well as build support tooling;
67+
* `tools` Contains build support tooling;
6868
* `examples` Contains sample programs for demonstration purposes;
6969
* `tests` Contains test code run as part of test qualification;
7070
* `doc` Contains documentation source code and content.
@@ -73,11 +73,17 @@ The `src` directory is broken up into the core platform-independent AtomVM libra
7373

7474
## External dependencies
7575

76+
### `packbeam`
77+
78+
AtomVM depends on `packbeam`. It is used to pack beams as well as assets into AtomVM pack format, `.avm`. `packbeam` source code is downloaded automatically by `rebar3` from `hex` mirrors, and it is then escriptized.
79+
80+
It is possible to use a local copy of `packbeam` source code by setting `PACKBEAM_PATH` variable to a path to a source checkout of [`atomvm_packbeam`](https://github.com/atomvm/atomvm_packbeam) when invoking CMake.
81+
7682
### `uf2tool`
7783

78-
AtomVM depends on `uf2tool`. It is used to pack both native and Erlang/Elixir/Gleam code for RP2. uf2tool is downloaded automatically by `rebar3` from `hex` mirrors.
84+
AtomVM depends on `uf2tool`. It is used to pack both native and Erlang/Elixir/Gleam code for RP2. `uf2tool` source code is downloaded automatically by `rebar3` from `hex` mirrors.
7985

80-
It is possible to use a local copy of uf2tool by setting `UF2TOOL_PATH` variable to a path to a source checkout of [`uf2tool`](https://github.com/pguyot/uf2tool) when invoking CMake.
86+
It is possible to use a local copy of `uf2tool` source code by setting `UF2TOOL_PATH` variable to a path to a source checkout of [`uf2tool`](https://github.com/pguyot/uf2tool) when invoking CMake.
8187

8288
## Platform Specific Build Instructions
8389

libs/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,25 +59,25 @@ if (Dialyzer_FOUND)
5959
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/estdlib_beams.txt
6060
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/estdlib/src/estdlib.avm PackBEAM
6161
COMMAND
62-
${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -l ${CMAKE_CURRENT_BINARY_DIR}/estdlib/src/estdlib.avm | sed -e 's|^|${CMAKE_CURRENT_BINARY_DIR}/estdlib/src/beams/|g' > ${CMAKE_CURRENT_BINARY_DIR}/estdlib_beams.txt
62+
${CMAKE_BINARY_DIR}/tools/packbeam/packbeam list -f bare ${CMAKE_CURRENT_BINARY_DIR}/estdlib/src/estdlib.avm | sed -e 's|^|${CMAKE_CURRENT_BINARY_DIR}/estdlib/src/beams/|g' > ${CMAKE_CURRENT_BINARY_DIR}/estdlib_beams.txt
6363
)
6464
add_custom_command(
6565
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/eavmlib_beams.txt
6666
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/eavmlib/src/eavmlib.avm PackBEAM
6767
COMMAND
68-
${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -l ${CMAKE_CURRENT_BINARY_DIR}/eavmlib/src/eavmlib.avm | sed -e 's|^|${CMAKE_CURRENT_BINARY_DIR}/eavmlib/src/beams/|g' > ${CMAKE_CURRENT_BINARY_DIR}/eavmlib_beams.txt
68+
${CMAKE_BINARY_DIR}/tools/packbeam/packbeam list -f bare ${CMAKE_CURRENT_BINARY_DIR}/eavmlib/src/eavmlib.avm | sed -e 's|^|${CMAKE_CURRENT_BINARY_DIR}/eavmlib/src/beams/|g' > ${CMAKE_CURRENT_BINARY_DIR}/eavmlib_beams.txt
6969
)
7070
add_custom_command(
7171
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/alisp_beams.txt
7272
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/alisp/src/alisp.avm PackBEAM
7373
COMMAND
74-
${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -l ${CMAKE_CURRENT_BINARY_DIR}/alisp/src/alisp.avm | sed -e 's|^|${CMAKE_CURRENT_BINARY_DIR}/alisp/src/beams/|g' > ${CMAKE_CURRENT_BINARY_DIR}/alisp_beams.txt
74+
${CMAKE_BINARY_DIR}/tools/packbeam/packbeam list -f bare ${CMAKE_CURRENT_BINARY_DIR}/alisp/src/alisp.avm | sed -e 's|^|${CMAKE_CURRENT_BINARY_DIR}/alisp/src/beams/|g' > ${CMAKE_CURRENT_BINARY_DIR}/alisp_beams.txt
7575
)
7676
add_custom_command(
7777
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/jit_beams.txt
7878
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/jit/src/jit.avm PackBEAM
7979
COMMAND
80-
${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -l ${CMAKE_CURRENT_BINARY_DIR}/jit/src/jit.avm | sed -e 's|^|${CMAKE_CURRENT_BINARY_DIR}/jit/src/beams/|g' | grep -v jit_precompile > ${CMAKE_CURRENT_BINARY_DIR}/jit_beams.txt
80+
${CMAKE_BINARY_DIR}/tools/packbeam/packbeam list -f bare ${CMAKE_CURRENT_BINARY_DIR}/jit/src/jit.avm | sed -e 's|^|${CMAKE_CURRENT_BINARY_DIR}/jit/src/beams/|g' | grep -v jit_precompile > ${CMAKE_CURRENT_BINARY_DIR}/jit_beams.txt
8181
)
8282
set(dialyzer_lists
8383
${CMAKE_CURRENT_BINARY_DIR}/estdlib_beams.txt

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: 20 additions & 33 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,28 @@
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)
39-
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}
31+
add_custom_command(
32+
OUTPUT packbeam
33+
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/rebar.config
34+
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/rebar.config rebar.config
35+
COMMAND rebar3 escriptize && cp _build/default/bin/packbeam .
36+
VERBATIM
5137
)
52-
target_link_libraries(PackBEAM PRIVATE libAtomVM${PLATFORM_LIB_SUFFIX})
5338

54-
target_include_directories(PackBEAM PUBLIC ../../src/libAtomVM)
55-
target_link_libraries(PackBEAM PRIVATE libAtomVM)
39+
add_custom_target(
40+
PackBEAM ALL
41+
DEPENDS packbeam
42+
)
5643

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

0 commit comments

Comments
 (0)