#[[
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
]]

message("Running in src/encoding directory")

# aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} storage_tsfile_encode_SRC_LIST)
# set(storage_tsfile_encode_INC_LIST )
# set(storage_tsfile_encode_DEFINE_OPTIONS )
# set(storage_tsfile_encode_COMPILE_OPTIONS )
# set(storage_tsfile_encode_LINK_OPTIONS )
# 
# add_statis_objtarget(storage_tsfile_encoding storage_tsfile_encode_SRC_LIST
#                                              storage_tsfile_encode_INC_LIST
#                                           "${storage_tsfile_encode_DEFINE_OPTIONS}"
#                                           "${storage_tsfile_encode_COMPILE_OPTIONS}"
#                                           "${storage_tsfile_encode_LINK_OPTIONS}")
