Compile part of a matter application as static library

This question is analog to  Compile part of application as static library but related to a Matter application. In this case, I'd like to separate the compilation of all Matter/CHIP related application parts from my own application code, e.g., to use strict compiler flags for my own code which fail for the Matter/CHIP application parts.

My CMakeLists.txt looks as follows:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cmake_minimum_required(VERSION 3.20.0)
set(CHIP_CFLAGS
-DDUMMY_VALUE=0xDEADBEEF
)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(
Empty
VERSION 0.1
DESCRIPTION "empty matter application."
)
include(${ZEPHYR_CONNECTEDHOMEIP_MODULE_DIR}/config/nrfconnect/app/enable-gnu-std.cmake)
include(${ZEPHYR_CONNECTEDHOMEIP_MODULE_DIR}/src/app/chip_data_model.cmake)
set(zap_file "${CMAKE_CURRENT_SOURCE_DIR}/src/zap/template.zap")
set(zap_gen_dir "${CMAKE_CURRENT_SOURCE_DIR}/src/zap-generated")
target_sources(
app
PRIVATE
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

The last part is the relevant bit: chip_configure_data_model adds files from the Matter/CHIP repository to the given target, in this case still "app". What I'd like to do is the following (only repeating the relevant bits):

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<...>
target_sources(
app
PRIVATE
<my-sources>
)
<...>
add_library(app-chip STATIC "")
target_link_libraries(app-chip PUBLIC zephyr_interface)
target_link_libraries(app PUBLIC app-chip)
chip_configure_data_model(
app-chip
INCLUDE_SERVER
BYPASS_IDL
GEN_DIR ${zap_gen_dir}
ZAP_FILE ${zap_file}
)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

CMake detects the files and adds them to the library "app-chip", but it doesn't find the include paths for the Zephyr module Matter/CHIP. I can resolve it by copying the corresponding part from the "kernel.cmake", but I was wondering if there's a cleaner way to provide the required paths for a module to an application library:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<...>
target_sources(
app
PRIVATE
<my-sources>
)
<...>
add_library(app-chip STATIC "")
target_link_libraries(app-chip PUBLIC zephyr_interface)
target_link_libraries(app PUBLIC app-chip)
get_property(ZEPHYR_INTERFACE_LIBS_PROPERTY GLOBAL PROPERTY ZEPHYR_INTERFACE_LIBS)
foreach(boilerplate_lib ${ZEPHYR_INTERFACE_LIBS_PROPERTY})
string(TOUPPER ${boilerplate_lib} boilerplate_lib_upper_case)
target_link_libraries_ifdef(
CONFIG_APP_LINK_WITH_${boilerplate_lib_upper_case}
app-chip
PUBLIC
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

This isn't very clean since it breaks immediately if "kernel.cmake" or some module setup in Zephyr breaks. Is there something like "target_link_libraries(app-chip PUBLIC zephyr_interface)" for Zephyr modules?