xref: /aosp_15_r20/external/pigweed/pw_tokenizer/CMakeLists.txt (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1# Copyright 2020 The Pigweed Authors
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4# use this file except in compliance with the License. You may obtain a copy of
5# the License at
6#
7#     https://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations under
13# the License.
14
15include($ENV{PW_ROOT}/pw_build/pigweed.cmake)
16include($ENV{PW_ROOT}/pw_protobuf_compiler/proto.cmake)
17include($ENV{PW_ROOT}/pw_build/cc_blob_library.cmake)
18
19pw_add_module_config(pw_tokenizer_CONFIG)
20
21pw_add_library(pw_tokenizer.config INTERFACE
22  HEADERS
23    public/pw_tokenizer/config.h
24  PUBLIC_INCLUDES
25    public
26  PUBLIC_DEPS
27    ${pw_tokenizer_CONFIG}
28)
29
30pw_add_library(pw_tokenizer STATIC
31  HEADERS
32    public/pw_tokenizer/encode_args.h
33    public/pw_tokenizer/hash.h
34    public/pw_tokenizer/nested_tokenization.h
35    public/pw_tokenizer/tokenize.h
36  PUBLIC_INCLUDES
37    public
38  PUBLIC_DEPS
39    pw_base64
40    pw_containers
41    pw_result
42    pw_span
43    pw_preprocessor
44    pw_tokenizer.config
45    pw_varint
46  SOURCES
47    encode_args.cc
48    hash.cc
49    public/pw_tokenizer/internal/argument_types.h
50    public/pw_tokenizer/internal/argument_types_macro_4_byte.h
51    public/pw_tokenizer/internal/argument_types_macro_8_byte.h
52    public/pw_tokenizer/internal/pw_tokenizer_65599_fixed_length_128_hash_macro.h
53    public/pw_tokenizer/internal/pw_tokenizer_65599_fixed_length_256_hash_macro.h
54    public/pw_tokenizer/internal/pw_tokenizer_65599_fixed_length_80_hash_macro.h
55    public/pw_tokenizer/internal/pw_tokenizer_65599_fixed_length_96_hash_macro.h
56    public/pw_tokenizer/internal/tokenize_string.h
57    tokenize.cc
58)
59
60if(Zephyr_FOUND AND CONFIG_PIGWEED_TOKENIZER)
61  zephyr_linker_sources(SECTIONS "${CMAKE_CURRENT_SOURCE_DIR}/pw_tokenizer_zephyr.ld")
62elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "")
63  target_link_options(pw_tokenizer
64    PUBLIC
65      "-T${CMAKE_CURRENT_SOURCE_DIR}/pw_tokenizer_linker_sections.ld"
66      "-L${CMAKE_CURRENT_SOURCE_DIR}"
67  )
68elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
69  target_link_options(pw_tokenizer
70    PUBLIC
71      "-T${CMAKE_CURRENT_SOURCE_DIR}/add_tokenizer_sections_to_default_script.ld"
72      "-L${CMAKE_CURRENT_SOURCE_DIR}"
73  )
74endif()
75
76pw_add_library(pw_tokenizer.base64 STATIC
77  HEADERS
78    public/pw_tokenizer/base64.h
79  PUBLIC_INCLUDES
80    public
81  PUBLIC_DEPS
82    pw_base64
83    pw_span
84    pw_string.string
85    pw_tokenizer
86    pw_tokenizer.config
87  SOURCES
88    base64.cc
89)
90
91pw_add_library(pw_tokenizer.decoder STATIC
92  HEADERS
93    public/pw_tokenizer/detokenize.h
94    public/pw_tokenizer/token_database.h
95  PUBLIC_INCLUDES
96    public
97  PUBLIC_DEPS
98    pw_span
99    pw_stream
100    pw_tokenizer
101    pw_tokenizer.base64
102  SOURCES
103    decode.cc
104    detokenize.cc
105    public/pw_tokenizer/internal/decode.h
106    token_database.cc
107  PRIVATE_DEPS
108    pw_bytes
109    pw_bytes.bit
110    pw_elf.reader
111    pw_varint
112)
113
114pw_proto_library(pw_tokenizer.proto
115  SOURCES
116    pw_tokenizer_proto/options.proto
117)
118
119# Executable for generating test data for the C++ and Python detokenizers. This
120# target should only be built for the host.
121add_executable(pw_tokenizer.generate_decoding_test_data EXCLUDE_FROM_ALL
122    generate_decoding_test_data.cc)
123target_link_libraries(pw_tokenizer.generate_decoding_test_data PRIVATE
124    pw_varint pw_tokenizer)
125target_compile_options(pw_tokenizer.generate_decoding_test_data PRIVATE
126    -Wall -Werror)
127
128# Executable for generating a test ELF file for elf_reader_test.py. A host
129# version of this binary is checked in for use in elf_reader_test.py.
130add_executable(pw_tokenizer.elf_reader_test_binary EXCLUDE_FROM_ALL
131    py/elf_reader_test_binary.c)
132target_link_libraries(pw_tokenizer.elf_reader_test_binary PRIVATE
133    -Wl,--unresolved-symbols=ignore-all)  # main is not defined
134set_target_properties(pw_tokenizer.elf_reader_test_binary PROPERTIES
135    OUTPUT_NAME elf_reader_test_binary.elf)
136
137pw_add_test(pw_tokenizer.argument_types_test
138  SOURCES
139    argument_types_test_c.c
140    argument_types_test.cc
141  PRIVATE_DEPS
142    pw_tokenizer
143  GROUPS
144    modules
145    pw_tokenizer
146)
147
148pw_add_test(pw_tokenizer.base64_test
149  SOURCES
150    base64_test.cc
151  PRIVATE_DEPS
152    pw_tokenizer.base64
153  GROUPS
154    modules
155    pw_tokenizer
156)
157
158pw_add_test(pw_tokenizer.decode_test
159  SOURCES
160    decode_test.cc
161  PRIVATE_DEPS
162    pw_varint
163    pw_tokenizer.decoder
164  GROUPS
165    modules
166    pw_tokenizer
167)
168
169pw_add_test(pw_tokenizer.detokenize_test
170  SOURCES
171    detokenize_test.cc
172  PRIVATE_DEPS
173    pw_tokenizer.decoder
174    pw_build.detokenizer_elf_test_blob
175    pw_stream
176  GROUPS
177    modules
178    pw_tokenizer
179)
180
181pw_add_test(pw_tokenizer.encode_args_test
182  SOURCES
183    encode_args_test.cc
184  PRIVATE_DEPS
185    pw_tokenizer
186  GROUPS
187    modules
188    pw_tokenizer
189)
190
191pw_add_test(pw_tokenizer.hash_test
192  SOURCES
193    hash_test.cc
194  PRIVATE_DEPS
195    pw_tokenizer
196  GROUPS
197    modules
198    pw_tokenizer
199)
200
201pw_add_test(pw_tokenizer.token_database_test
202  SOURCES
203    token_database_test.cc
204  PRIVATE_DEPS
205    pw_tokenizer.decoder
206  GROUPS
207    modules
208    pw_tokenizer
209)
210
211pw_add_test(pw_tokenizer.tokenize_test
212  SOURCES
213    tokenize_test_c.c
214    tokenize_test.cc
215  PRIVATE_DEPS
216    pw_varint
217    pw_tokenizer
218  GROUPS
219    modules
220    pw_tokenizer
221)
222
223pw_cc_blob_library(pw_build.detokenizer_elf_test_blob
224  HEADER
225    pw_tokenizer/example_binary_with_tokenized_strings.h
226  NAMESPACE
227    test::ns
228  BLOB
229    SYMBOL_NAME kElfSection
230    PATH py/example_binary_with_tokenized_strings.elf
231)
232
233if(Zephyr_FOUND)
234  zephyr_link_libraries_ifdef(CONFIG_PIGWEED_TOKENIZER pw_tokenizer)
235  zephyr_link_libraries_ifdef(CONFIG_PIGWEED_TOKENIZER_BASE64 pw_tokenizer.base64)
236  zephyr_link_libraries_ifdef(CONFIG_PIGWEED_DETOKENIZER pw_tokenizer.decoder)
237endif()
238