Skip to content

Commit e5f51ab

Browse files
committed
Fix CMake targets to avoid useless rebuilds
Use add_custom_command to ensure we don't rebuild files Signed-off-by: Paul Guyot <pguyot@kallisys.net>
1 parent 65f16e8 commit e5f51ab

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)