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