Skip to content

Commit 63b49ac

Browse files
Merge branch 'master' into YAML-Updates-2-23-2024
2 parents 6597aba + 003a5eb commit 63b49ac

File tree

6 files changed

+108
-96
lines changed

6 files changed

+108
-96
lines changed

.github/workflows/build.yaml

+2-8
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ jobs:
223223
run: |
224224
./scripts/run_in_build_env.sh "./scripts/codepregen.py ./zzz_pregenerated"
225225
mv scripts/codegen.py scripts/codegen.py.renamed
226+
mv scripts/tools/zap/generate.py scripts/tools/zap/generate.py.renamed
226227
- name: Clean output
227228
run: rm -rf ./out
228229
- name: Build using build_examples.py (pregen)
@@ -234,18 +235,11 @@ jobs:
234235
--pregen-dir ./zzz_pregenerated \
235236
build \
236237
"
237-
- name: Check no code generation in output
238-
run: |
239-
CNT=$(find out -name "CHIPClusters.h" | wc -l)
240-
if [ "${CNT}" != "0" ]; then
241-
echo "ERROR: found unexpected generated files:"
242-
find out -name "CHIPClusters.h"
243-
exit 1
244-
fi
245238
- name: Undo code pre-generation changes (make compile time codegen work again)
246239
run: |
247240
rm -rf ./zzz_pregenerated
248241
mv scripts/codegen.py.renamed scripts/codegen.py
242+
mv scripts/tools/zap/generate.py.renamed scripts/tools/zap/generate.py
249243
- name: Run fake linux tests with build_examples
250244
run: |
251245
./scripts/run_in_build_env.sh \

.github/workflows/cirque.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ jobs:
7171
- name: Get Cirque Bootstrap cache key
7272
id: cirque-bootstrap-cache-key
7373
run: echo "val=$(scripts/tests/cirque_tests.sh cachekeyhash)" >> $GITHUB_OUTPUT
74-
- uses: Wandalen/wretry.action@v1.4.4
74+
- uses: Wandalen/wretry.action@v1.4.5
7575
name: Cirque Bootstrap cache
7676
if: ${{ !env.ACT }}
7777
continue-on-error: true

.github/workflows/examples-esp32.yaml

+2-8
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ jobs:
7171
run: |
7272
./scripts/run_in_build_env.sh "./scripts/codepregen.py ./zzz_pregenerated"
7373
mv scripts/codegen.py scripts/codegen.py.renamed
74+
mv scripts/tools/zap/generate.py scripts/tools/zap/generate.py.renamed
7475
- name: Clean output
7576
run: rm -rf ./out
7677
- name: Build some M5Stack variations with pregen
@@ -84,18 +85,11 @@ jobs:
8485
build \
8586
--copy-artifacts-to out/artifacts \
8687
"
87-
- name: Check no code generation in output
88-
run: |
89-
CNT=$(find out -name "CHIPClusters.h" | wc -l)
90-
if [ "${CNT}" != "0" ]; then
91-
echo "ERROR: found unexpected generated files:"
92-
find out -name "CHIPClusters.h"
93-
exit 1
94-
fi
9588
- name: Undo code pregeneration changes
9689
run: |
9790
rm -rf ./zzz_pregenerated
9891
mv scripts/codegen.py.renamed scripts/codegen.py
92+
mv scripts/tools/zap/generate.py.renamed scripts/tools/zap/generate.py
9993
- name: Build example All Clusters App C3
10094
run: scripts/examples/esp_example.sh all-clusters-app sdkconfig_c3devkit.defaults
10195
- name: Copy aside build products

.github/workflows/gradle-wrapper-validation.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ jobs:
77
runs-on: ubuntu-latest
88
steps:
99
- uses: actions/checkout@v4
10-
- uses: Wandalen/wretry.action@v1.4.4
10+
- uses: Wandalen/wretry.action@v1.4.5
1111
name: Gradle Validation
1212
continue-on-error: true
1313
with:

build/chip/chip_codegen.gni

+76-34
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@ template("_chip_build_time_codegen") {
3131
_name = target_name
3232
_generator = invoker.generator
3333

34-
config("${_name}_config") {
35-
include_dirs = [ target_gen_dir ]
36-
}
37-
3834
pw_python_action("${_name}_generate") {
3935
script = "${chip_root}/scripts/codegen.py"
4036

@@ -124,10 +120,6 @@ template("_chip_build_time_zapgen") {
124120
_name = target_name
125121
_generator = invoker.generator
126122

127-
config("${_name}_config") {
128-
include_dirs = [ "${target_gen_dir}/zapgen/" ]
129-
}
130-
131123
assert(_generator == "app-templates")
132124

133125
if (_generator == "app-templates") {
@@ -225,6 +217,9 @@ template("_chip_build_time_zapgen") {
225217
# generator
226218
# Name of the generator to use (e.g. java-jni, java-class, cpp-app)
227219
#
220+
# outputs MUST share the same directory prefix (e.g. 'app/' or 'tlv/meta'
221+
# or 'jni')
222+
#
228223
# outputs
229224
# Explicit names of the expected outputs. Enforced to validate that
230225
# expected outputs are generated when processing input files.
@@ -265,7 +260,17 @@ template("_chip_build_time_zapgen") {
265260
# ]
266261
# }
267262
#
263+
# Guarantees a target named "${target_name}_generate" exists and contains all
264+
# generated files (this works even in the case of using a pre-generated directory
265+
# by using a copy target to import pre-generated data)
266+
#
268267
template("chip_codegen") {
268+
_name = target_name
269+
270+
config("${_name}_config") {
271+
include_dirs = [ target_gen_dir ]
272+
}
273+
269274
if (chip_code_pre_generated_directory == "") {
270275
_chip_build_time_codegen(target_name) {
271276
forward_variables_from(invoker,
@@ -279,8 +284,6 @@ template("chip_codegen") {
279284
])
280285
}
281286
} else {
282-
_name = target_name
283-
284287
not_needed(invoker, [ "options" ])
285288

286289
# This constructs a path like:
@@ -292,8 +295,21 @@ template("chip_codegen") {
292295
string_replace(rebase_path(invoker.input, chip_root), ".matter", "") +
293296
"/codegen/" + invoker.generator
294297

295-
config("${_name}_config") {
296-
include_dirs = [ "${_generation_dir}" ]
298+
# Generation in this case just involves some files copying
299+
copy("${_name}_generate") {
300+
sources = []
301+
302+
foreach(name, invoker.outputs) {
303+
sources += [ "${_generation_dir}/${name}" ]
304+
}
305+
306+
# NOTE: we assume ALL outputs have a common subdir. This is generally the case with
307+
# paths like "app/callback-stub.cpp" and "app/PluginApplicationCallbacks.h"
308+
_outputs = invoker.outputs
309+
_dir_name = get_path_info(_outputs[0], "dir")
310+
outputs = [ "${target_gen_dir}/${_dir_name}/{{source_file_part}}" ]
311+
312+
public_configs = [ ":${_name}_config" ]
297313
}
298314

299315
source_set(_name) {
@@ -302,13 +318,13 @@ template("chip_codegen") {
302318
if (defined(invoker.public_configs)) {
303319
public_configs += invoker.public_configs
304320
}
321+
sources = get_target_outputs(":${_name}_generate")
305322

306323
forward_variables_from(invoker, [ "deps" ])
307-
308-
sources = []
309-
foreach(name, invoker.outputs) {
310-
sources += [ "${_generation_dir}/${name}" ]
324+
if (!defined(deps)) {
325+
deps = []
311326
}
327+
deps += [ ":${_name}_generate" ]
312328
}
313329
}
314330
}
@@ -327,6 +343,9 @@ template("chip_codegen") {
327343
# Explicit names of the expected outputs. Enforced to validate that
328344
# expected outputs are generated when processing input files.
329345
#
346+
# outputs MUST share the same directory prefix (e.g. 'app/' or 'tlv/meta'
347+
# or 'jni')
348+
#
330349
# deps, public_configs
331350
# Forwarded to the resulting source set
332351
#
@@ -352,18 +371,28 @@ template("chip_codegen") {
352371
#
353372
# Example usage:
354373
#
355-
# chip_codegen("java-jni-generate") {
356-
# input = "controller-clusters.matter"
357-
# generator = "java-jni"
374+
# chip_zapgen("controller-clusters-zap") {
375+
# input = "controller-clusters.zap"
376+
# generator = "app-templates"
358377
#
359-
# outputs = [
360-
# "jni/IdentifyClient-ReadImpl.cpp",
361-
# "jni/IdentifyClient-InvokeSubscribeImpl.cpp",
362-
# # ... more to follow
363-
# ]
364-
# }
378+
# outputs = [
379+
# "zap-generated/access.h",
380+
# "zap-generated/gen_config.h",
381+
# "zap-generated/endpoint_config.h",
382+
# ]
383+
# }
384+
#
385+
# Guarantees a target named "${target_name}_generate" exists and contains all
386+
# generated files (this works even in the case of using a pre-generated directory
387+
# by using a copy target to import pre-generated data)
365388
#
366389
template("chip_zapgen") {
390+
_name = target_name
391+
392+
config("${_name}_config") {
393+
include_dirs = [ "${target_gen_dir}/zapgen/" ]
394+
}
395+
367396
if (chip_code_pre_generated_directory == "") {
368397
_chip_build_time_zapgen(target_name) {
369398
forward_variables_from(invoker,
@@ -376,8 +405,6 @@ template("chip_zapgen") {
376405
])
377406
}
378407
} else {
379-
_name = target_name
380-
381408
# This contstructs a path like:
382409
# FROM all-clusters-app.zap (inside examples/all-clusters-app/all-clusters-common/)
383410
# USING "cpp-app" for generator:
@@ -387,10 +414,6 @@ template("chip_zapgen") {
387414
string_replace(rebase_path(invoker.input, chip_root), ".zap", "") +
388415
"/zap/" + invoker.generator
389416

390-
config("${_name}_config") {
391-
include_dirs = [ "${_generation_dir}" ]
392-
}
393-
394417
# Pick up only the headers and mark them available to use
395418
# Specifically controller seems to require header files but NOT cpp (does)
396419
# not want to include cpp compilation of IM command handler data
@@ -429,6 +452,23 @@ template("chip_zapgen") {
429452
public_deps = [ ":${_name}_headers" ]
430453
}
431454

455+
# Generation in this case just involves some files copying
456+
copy("${_name}_generate") {
457+
sources = []
458+
459+
foreach(name, invoker.outputs) {
460+
sources += [ "${_generation_dir}/${name}" ]
461+
}
462+
463+
# NOTE: we assume ALL outputs have a common subdir. This is generally the case with
464+
# paths like "app/callback-stub.cpp" and "app/PluginApplicationCallbacks.h"
465+
_outputs = invoker.outputs
466+
_dir_name = get_path_info(_outputs[0], "dir")
467+
outputs = [ "${target_gen_dir}/zapgen/${_dir_name}/{{source_file_part}}" ]
468+
469+
public_configs = [ ":${_name}_config" ]
470+
}
471+
432472
source_set(_name) {
433473
forward_variables_from(invoker,
434474
[
@@ -440,10 +480,12 @@ template("chip_zapgen") {
440480
}
441481
public_configs += [ ":${_name}_config" ]
442482

443-
sources = []
444-
foreach(name, invoker.outputs) {
445-
sources += [ "${_generation_dir}/${name}" ]
483+
if (!defined(public_deps)) {
484+
public_deps = []
446485
}
486+
public_deps += [ ":${_name}_generate" ]
487+
488+
sources = get_target_outputs(":${_name}_generate")
447489

448490
# Ugly, but references WILL reference back into main code.
449491
check_includes = false

src/app/chip_data_model.gni

+26-44
Original file line numberDiff line numberDiff line change
@@ -107,64 +107,50 @@ template("chip_data_model") {
107107
]
108108
}
109109

110-
# where generated files reside
111-
# TODO: where can this reside?
112-
if (chip_code_pre_generated_directory == "") {
113-
_zapgen_gen_dir = "${target_gen_dir}/zapgen"
114-
_codegen_gen_dir = "${target_gen_dir}"
115-
} else {
116-
# NOTE: if zap and matter file will reside in different locations
117-
# this path will change between zapgen and codegen
118-
_pregen_dir =
119-
chip_code_pre_generated_directory + "/" +
120-
string_replace(rebase_path(invoker.zap_file, chip_root), ".zap", "")
121-
122-
_zapgen_gen_dir = "${_pregen_dir}/zap/app-templates"
123-
_codegen_gen_dir = "${_pregen_dir}/codegen/cpp-app"
124-
}
125-
126110
# Fixed source sets for allowing reasonable dependencies on things:
127111
source_set("${_data_model_name}-endpoint-metadata") {
128-
sources = [
129-
"${_codegen_gen_dir}/app/PluginApplicationCallbacks.h",
130-
"${_zapgen_gen_dir}/zap-generated/access.h",
131-
"${_zapgen_gen_dir}/zap-generated/endpoint_config.h",
132-
"${_zapgen_gen_dir}/zap-generated/gen_config.h",
133-
]
112+
sources = filter_include(
113+
get_target_outputs(":${_data_model_name}_codegen_generate"),
114+
[ "*/PluginApplicationCallbacks.h" ])
115+
sources += filter_include(
116+
get_target_outputs(":${_data_model_name}_zapgen_generate"),
117+
[
118+
"*/access.h",
119+
"*/endpoint_config.h",
120+
"*/gen_config.h",
121+
])
134122

135-
deps = [ "${chip_root}/src/lib/core:chip_config_header" ]
136-
137-
if (chip_code_pre_generated_directory == "") {
138-
deps += [
139-
":${_data_model_name}_codegen_generate",
140-
":${_data_model_name}_zapgen_generate",
141-
]
142-
}
123+
deps = [
124+
":${_data_model_name}_codegen_generate",
125+
":${_data_model_name}_zapgen_generate",
126+
"${chip_root}/src/lib/core:chip_config_header",
127+
]
143128
}
144129

145130
source_set("${_data_model_name}-callbacks") {
146-
sources = [
147-
"${_codegen_gen_dir}/app/callback-stub.cpp",
148-
"${_codegen_gen_dir}/app/cluster-init-callback.cpp",
149-
]
131+
sources = filter_include(
132+
get_target_outputs(":${_data_model_name}_codegen_generate"),
133+
[
134+
"*/callback-stup.cpp",
135+
"*/cluster-init-callback.cpp",
136+
])
150137

151138
deps = [
139+
":${_data_model_name}_codegen_generate",
152140
"${chip_root}/src/app/common:ids",
153141
"${chip_root}/src/lib/support:span",
154142
"${chip_root}/src/protocols/interaction_model",
155143
]
156-
157-
if (chip_code_pre_generated_directory == "") {
158-
deps += [ ":${_data_model_name}_codegen_generate" ]
159-
}
160144
}
161145

162146
if (!chip_build_controller_dynamic_server) {
163147
source_set("${_data_model_name}-command-dispatch") {
164-
sources =
165-
[ "${_zapgen_gen_dir}/zap-generated/IMClusterCommandHandler.cpp" ]
148+
sources = filter_include(
149+
get_target_outputs(":${_data_model_name}_zapgen_generate"),
150+
[ "*/IMClusterCommandHandler.cpp" ])
166151

167152
deps = [
153+
":${_data_model_name}_zapgen_generate",
168154
"${chip_root}/src/app",
169155
"${chip_root}/src/app:interaction-model",
170156
"${chip_root}/src/app/common:cluster-objects",
@@ -173,10 +159,6 @@ template("chip_data_model") {
173159
"${chip_root}/src/lib/core",
174160
"${chip_root}/src/lib/support",
175161
]
176-
177-
if (chip_code_pre_generated_directory == "") {
178-
deps += [ ":${_data_model_name}_zapgen_generate" ]
179-
}
180162
}
181163
}
182164

0 commit comments

Comments
 (0)