• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_tokenizer
100    pw_tokenizer.base64
101  SOURCES
102    decode.cc
103    detokenize.cc
104    public/pw_tokenizer/internal/decode.h
105    token_database.cc
106  PRIVATE_DEPS
107    pw_bytes
108    pw_bytes.bit
109    pw_varint
110)
111
112pw_proto_library(pw_tokenizer.proto
113  SOURCES
114    pw_tokenizer_proto/options.proto
115)
116
117# Executable for generating test data for the C++ and Python detokenizers. This
118# target should only be built for the host.
119add_executable(pw_tokenizer.generate_decoding_test_data EXCLUDE_FROM_ALL
120    generate_decoding_test_data.cc)
121target_link_libraries(pw_tokenizer.generate_decoding_test_data PRIVATE
122    pw_varint pw_tokenizer)
123target_compile_options(pw_tokenizer.generate_decoding_test_data PRIVATE
124    -Wall -Werror)
125
126# Executable for generating a test ELF file for elf_reader_test.py. A host
127# version of this binary is checked in for use in elf_reader_test.py.
128add_executable(pw_tokenizer.elf_reader_test_binary EXCLUDE_FROM_ALL
129    py/elf_reader_test_binary.c)
130target_link_libraries(pw_tokenizer.elf_reader_test_binary PRIVATE
131    -Wl,--unresolved-symbols=ignore-all)  # main is not defined
132set_target_properties(pw_tokenizer.elf_reader_test_binary PROPERTIES
133    OUTPUT_NAME elf_reader_test_binary.elf)
134
135pw_add_test(pw_tokenizer.argument_types_test
136  SOURCES
137    argument_types_test_c.c
138    argument_types_test.cc
139  PRIVATE_DEPS
140    pw_tokenizer
141  GROUPS
142    modules
143    pw_tokenizer
144)
145
146pw_add_test(pw_tokenizer.base64_test
147  SOURCES
148    base64_test.cc
149  PRIVATE_DEPS
150    pw_tokenizer.base64
151  GROUPS
152    modules
153    pw_tokenizer
154)
155
156pw_add_test(pw_tokenizer.decode_test
157  SOURCES
158    decode_test.cc
159  PRIVATE_DEPS
160    pw_varint
161    pw_tokenizer.decoder
162  GROUPS
163    modules
164    pw_tokenizer
165)
166
167pw_add_test(pw_tokenizer.detokenize_test
168  SOURCES
169    detokenize_test.cc
170  PRIVATE_DEPS
171    pw_tokenizer.decoder
172    pw_build.detokenizer_elf_test_blob
173  GROUPS
174    modules
175    pw_tokenizer
176)
177
178pw_add_test(pw_tokenizer.encode_args_test
179  SOURCES
180    encode_args_test.cc
181  PRIVATE_DEPS
182    pw_tokenizer
183  GROUPS
184    modules
185    pw_tokenizer
186)
187
188pw_add_test(pw_tokenizer.hash_test
189  SOURCES
190    hash_test.cc
191  PRIVATE_DEPS
192    pw_tokenizer
193  GROUPS
194    modules
195    pw_tokenizer
196)
197
198pw_add_test(pw_tokenizer.token_database_test
199  SOURCES
200    token_database_test.cc
201  PRIVATE_DEPS
202    pw_tokenizer.decoder
203  GROUPS
204    modules
205    pw_tokenizer
206)
207
208pw_add_test(pw_tokenizer.tokenize_test
209  SOURCES
210    tokenize_test_c.c
211    tokenize_test.cc
212  PRIVATE_DEPS
213    pw_varint
214    pw_tokenizer
215  GROUPS
216    modules
217    pw_tokenizer
218)
219
220pw_cc_blob_library(pw_build.detokenizer_elf_test_blob
221  HEADER
222    pw_tokenizer/example_binary_with_tokenized_strings.h
223  NAMESPACE
224    test::ns
225  BLOB
226    SYMBOL_NAME kElfSection
227    PATH py/example_binary_with_tokenized_strings.elf
228)
229
230if(Zephyr_FOUND)
231  zephyr_link_libraries_ifdef(CONFIG_PIGWEED_TOKENIZER pw_tokenizer)
232  zephyr_link_libraries_ifdef(CONFIG_PIGWEED_TOKENIZER_BASE64 pw_tokenizer.base64)
233  zephyr_link_libraries_ifdef(CONFIG_PIGWEED_DETOKENIZER pw_tokenizer.decoder)
234endif()
235