Skip to content

Commit cdef344

Browse files
committed
Merge pull request #1668 from pguyot/w20/fix-cmake-targets
Fix CMake targets to avoid useless rebuilds These changes are made under both the "Apache 2.0" and the "GNU Lesser General Public License 2.1 or later" license terms (dual license). SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
2 parents 65f16e8 + e5f51ab commit cdef344

File tree

5 files changed

+93
-54
lines changed

5 files changed

+93
-54
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ jobs:
159159
mkdir -p build &&
160160
cd build &&
161161
cmake .. ${{ matrix.cmake_opts }} &&
162+
make PackBEAM &&
162163
cp ../build_tests/tests/erlang_tests/*.beam tests/erlang_tests/ &&
163164
cp ../build_tests/tests/erlang_tests/code_load/*.{avm,beam,hrl} tests/erlang_tests/code_load/ &&
164165
mkdir -p tests/erlang_tests/code_load/beams/ &&
@@ -167,6 +168,8 @@ jobs:
167168
cp ../build_tests/tests/libs/estdlib/*.avm tests/libs/estdlib/ &&
168169
cp ../build_tests/tests/libs/eavmlib/*.avm tests/libs/eavmlib/ &&
169170
cp ../build_tests/tests/libs/alisp/*.avm tests/libs/alisp/ &&
171+
touch tests/erlang_tests/code_load/code_load_pack.avm &&
172+
touch tests/erlang_tests/code_load/code_load_pack_data.hrl &&
170173
make AtomVM &&
171174
make test-erlang &&
172175
make test-enif &&

CMakeModules/BuildElixir.cmake

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,18 @@ macro(pack_archive avm_name)
4343
set(INCLUDE_LINES "-i")
4444
endif()
4545

46-
add_custom_target(
47-
${avm_name} ALL
46+
add_custom_command(
47+
OUTPUT ${avm_name}.avm
4848
DEPENDS ${avm_name}_beams PackBEAM
4949
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}.avm ${BEAMS}
5050
COMMENT "Packing archive ${avm_name}.avm"
5151
VERBATIM
5252
)
53-
add_dependencies(${avm_name} ${avm_name}_beams PackBEAM)
5453

54+
add_custom_target(
55+
${avm_name} ALL
56+
DEPENDS ${avm_name}.avm
57+
)
5558
endmacro()
5659

5760
macro(pack_runnable avm_name main)
@@ -85,13 +88,18 @@ macro(pack_runnable avm_name main)
8588
set(ARCHIVE_TARGETS ${ARCHIVE_TARGETS} ${archive_name})
8689
endforeach()
8790

88-
add_custom_target(
89-
${avm_name} ALL
91+
add_custom_command(
92+
OUTPUT ${avm_name}.avm
93+
DEPENDS ${avm_name}_main ${ARCHIVE_TARGETS} PackBEAM
9094
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${ARCHIVES}
9195
COMMENT "Packing runnable ${avm_name}.avm"
9296
VERBATIM
9397
)
94-
add_dependencies(${avm_name} ${avm_name}_main ${ARCHIVE_TARGETS} PackBEAM)
98+
99+
add_custom_target(
100+
${avm_name} ALL
101+
DEPENDS ${avm_name}.avm
102+
)
95103

96104
endmacro()
97105

@@ -146,12 +154,16 @@ macro(pack_test avm_name main)
146154
endif()
147155
endforeach()
148156

149-
add_custom_target(
150-
${avm_name} ALL
157+
add_custom_command(
158+
OUTPUT ${avm_name}.avm
159+
DEPENDS ${avm_name}_main ${avm_name}_tests ${ARCHIVE_TARGETS} PackBEAM
151160
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm Elixir.${main}.beam ${TEST_BEAMS} ${ARCHIVES}
152161
COMMENT "Packing test ${avm_name}.avm"
153162
VERBATIM
154163
)
155-
add_dependencies(${avm_name} ${avm_name}_main ${avm_name}_tests ${ARCHIVE_TARGETS} PackBEAM)
156164

165+
add_custom_target(
166+
${avm_name} ALL
167+
DEPENDS ${avm_name}.avm
168+
)
157169
endmacro()

CMakeModules/BuildErlang.cmake

Lines changed: 62 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -34,27 +34,23 @@ macro(pack_archive avm_name)
3434
set(pack_archive_${avm_name}_beams ${pack_archive_${avm_name}_beams} ${CMAKE_CURRENT_BINARY_DIR}/beams/${module_name}.beam)
3535
endforeach()
3636

37-
add_custom_target(
38-
${avm_name}_beams ALL
39-
DEPENDS ${pack_archive_${avm_name}_beams}
40-
)
41-
4237
if(AVM_RELEASE)
4338
set(INCLUDE_LINES "")
4439
else()
4540
set(INCLUDE_LINES "-i")
4641
endif()
4742

48-
add_custom_target(
49-
${avm_name} ALL
50-
DEPENDS ${avm_name}_beams PackBEAM
51-
#DEPENDS ${pack_archive_${avm_name}_beams}
43+
add_custom_command(
44+
OUTPUT ${avm_name}.avm
45+
DEPENDS ${pack_archive_${avm_name}_beams} PackBEAM
5246
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}.avm ${pack_archive_${avm_name}_beams}
5347
COMMENT "Packing archive ${avm_name}.avm"
5448
VERBATIM
5549
)
56-
add_dependencies(${avm_name} ${avm_name}_beams PackBEAM)
57-
50+
add_custom_target(
51+
${avm_name} ALL
52+
DEPENDS ${avm_name}.avm
53+
)
5854
endmacro()
5955

6056

@@ -77,32 +73,36 @@ macro(pack_lib avm_name)
7773
set(INCLUDE_LINES "-i")
7874
endif()
7975

80-
add_custom_target(
81-
${avm_name} ALL
76+
add_custom_command(
77+
OUTPUT ${avm_name}.avm
78+
DEPENDS ${pack_lib_${avm_name}_archive_targets} PackBEAM
8279
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM -a ${INCLUDE_LINES} ${avm_name}.avm ${pack_lib_${avm_name}_archives}
8380
COMMENT "Packing runnable ${avm_name}.avm"
8481
VERBATIM
8582
)
86-
add_dependencies(${avm_name} ${pack_lib_${avm_name}_archive_targets} PackBEAM)
87-
if(TARGET ${avm_name}_main)
88-
add_dependencies(${avm_name} ${avm_name}_main)
89-
endif()
90-
91-
add_custom_target(
92-
${avm_name}-pico.uf2 ALL
83+
add_custom_command(
84+
OUTPUT ${avm_name}-pico.uf2
85+
DEPENDS ${avm_name}.avm UF2Tool
9386
COMMAND ${CMAKE_BINARY_DIR}/tools/uf2tool/uf2tool create -o ${avm_name}-pico.uf2 -s 0x10100000 ${avm_name}.avm
9487
COMMENT "Creating UF2 file ${avm_name}.uf2"
9588
VERBATIM
9689
)
97-
add_dependencies(${avm_name}-pico.uf2 ${avm_name} uf2tool)
9890

99-
add_custom_target(
100-
${avm_name}-pico2.uf2 ALL
91+
add_custom_command(
92+
OUTPUT ${avm_name}-pico2.uf2
93+
DEPENDS ${avm_name}.avm UF2Tool
10194
COMMAND ${CMAKE_BINARY_DIR}/tools/uf2tool/uf2tool create -o ${avm_name}-pico2.uf2 -f data -s 0x10100000 ${avm_name}.avm
10295
COMMENT "Creating UF2 file ${avm_name}.uf2"
10396
VERBATIM
10497
)
105-
add_dependencies(${avm_name}-pico2.uf2 ${avm_name} uf2tool)
98+
99+
add_custom_target(
100+
${avm_name} ALL
101+
DEPENDS ${avm_name}.avm ${avm_name}-pico.uf2 ${avm_name}-pico2.uf2
102+
)
103+
if(TARGET ${avm_name}_main)
104+
add_dependencies(${avm_name} ${avm_name}_main)
105+
endif()
106106

107107
endmacro()
108108

@@ -150,13 +150,18 @@ macro(pack_runnable avm_name main)
150150
set(INCLUDE_LINES "-i")
151151
endif()
152152

153-
add_custom_target(
154-
${avm_name} ALL
153+
add_custom_command(
154+
OUTPUT ${avm_name}.avm
155+
DEPENDS ${avm_name}_main ${pack_runnable_${avm_name}_archive_targets} PackBEAM
155156
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${INCLUDE_LINES} ${avm_name}.avm ${main}.beam ${pack_runnable_${avm_name}_archives}
156157
COMMENT "Packing runnable ${avm_name}.avm"
157158
VERBATIM
158159
)
159-
add_dependencies(${avm_name} ${avm_name}_main ${pack_runnable_${avm_name}_archive_targets} PackBEAM)
160+
161+
add_custom_target(
162+
${avm_name} ALL
163+
DEPENDS ${avm_name}.avm
164+
)
160165
endmacro()
161166

162167

@@ -175,16 +180,25 @@ macro(pack_test test_avm_name)
175180
set(INCLUDE_LINES "-i")
176181
endif()
177182

178-
add_custom_target(
179-
${test_avm_name} ALL
183+
add_custom_command(
184+
OUTPUT tests.beam
185+
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tests.erl
180186
COMMAND erlc +debug_info -I ${CMAKE_SOURCE_DIR}/libs/include ${CMAKE_CURRENT_SOURCE_DIR}/tests.erl
187+
VERBATIM
188+
)
189+
190+
add_custom_command(
191+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${test_avm_name}.avm
192+
DEPENDS ${pack_test_${test_avm_name}_archive_targets} PackBEAM tests.beam
181193
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}
182-
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/tests.erl
183194
COMMENT "Packing runnable ${test_avm_name}.avm"
184195
VERBATIM
185196
)
186-
add_dependencies(${test_avm_name} ${pack_test_${test_avm_name}_archive_targets} PackBEAM)
187197

198+
add_custom_target(
199+
${test_avm_name} ALL
200+
DEPENDS ${test_avm_name}.avm
201+
)
188202
endmacro()
189203

190204
macro(pack_eunit test_avm_name)
@@ -202,15 +216,18 @@ macro(pack_eunit test_avm_name)
202216
set(INCLUDE_LINES "-i")
203217
endif()
204218

205-
add_custom_target(
206-
${test_avm_name} ALL
219+
add_custom_command(
220+
OUTPUT ${test_avm_name}.avm
221+
DEPENDS ${pack_eunit_${test_avm_name}_archive_targets} PackBEAM ${CMAKE_BINARY_DIR}/libs/etest/src/beams/eunit.beam
207222
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}
208-
DEPENDS ${CMAKE_BINARY_DIR}/libs/etest/src/beams/eunit.beam
209223
COMMENT "Packing runnable ${test_avm_name}.avm"
210224
VERBATIM
211225
)
212-
add_dependencies(${test_avm_name} ${pack_eunit_${test_avm_name}_archive_targets} PackBEAM)
213226

227+
add_custom_target(
228+
${test_avm_name} ALL
229+
DEPENDS ${test_avm_name}.avm etest
230+
)
214231
endmacro()
215232

216233
macro(pack_uf2 avm_name main)
@@ -237,20 +254,24 @@ macro(pack_uf2 avm_name main)
237254
set(pack_uf2_${avm_name}_archive_targets ${pack_uf2_${avm_name}_archive_targets} ${archive_name})
238255
endforeach()
239256

240-
add_custom_target(
241-
${avm_name}.avm ALL
257+
add_custom_command(
258+
OUTPUT ${avm_name}.avm
259+
DEPENDS ${avm_name}_main ${pack_uf2_${avm_name}_archive_targets} PackBEAM
242260
COMMAND ${CMAKE_BINARY_DIR}/tools/packbeam/PackBEAM ${avm_name}.avm ${main}.beam ${pack_uf2_${avm_name}_archives}
243261
COMMENT "Packing runnable ${avm_name}.avm"
244262
VERBATIM
245263
)
246-
add_dependencies(${avm_name}.avm ${avm_name}_main ${pack_uf2_${avm_name}_archive_targets} PackBEAM)
247264

248-
add_custom_target(
249-
${avm_name}.uf2 ALL
265+
add_custom_command(
266+
OUTPUT ${avm_name}.uf2
267+
DEPENDS ${avm_name}.avm UF2Tool
250268
COMMAND ${CMAKE_BINARY_DIR}/tools/uf2tool/uf2tool create -o ${avm_name}.uf2 -f universal -s 0x10180000 ${avm_name}.avm
251269
COMMENT "Creating UF2 file ${avm_name}.uf2"
252270
VERBATIM
253271
)
254-
add_dependencies(${avm_name}.uf2 ${avm_name}.avm uf2tool)
255272

273+
add_custom_target(
274+
${avm_name} ALL
275+
DEPENDS ${avm_name}.uf2
276+
)
256277
endmacro()

tests/erlang_tests/code_load/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ compile_erlang(export_test_module)
2727
generate_hrl(export_test_module_data.hrl EXPORT_TEST_MODULE_DATA export_test_module.beam)
2828

2929
pack_archive(code_load_pack export_test_module)
30-
# workaround since generate_hrl requires a file name, but pack_archive target is not
31-
add_custom_target(code_load_pack.avm DEPENDS code_load_pack)
3230
generate_hrl(code_load_pack_data.hrl CODE_LOAD_PACK_DATA code_load_pack.avm)
3331

3432
add_custom_target(code_load_files DEPENDS

tools/uf2tool/CMakeLists.txt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,13 @@ file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/rebar.config
3232
DESTINATION ${CMAKE_CURRENT_BINARY_DIR}
3333
)
3434

35-
add_custom_target(
36-
uf2tool ALL
35+
add_custom_command(
36+
OUTPUT uf2tool
3737
COMMAND rebar3 escriptize && cp _build/default/bin/uf2tool .
3838
VERBATIM
3939
)
40+
41+
add_custom_target(
42+
UF2Tool ALL
43+
DEPENDS uf2tool
44+
)

0 commit comments

Comments
 (0)