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