# 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
#
#   http://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.

# Generated by Cargo
# will have compiled files and executables
**/target

# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock

# These are backup files generated by rustfmt
**/*.rs.bk

# rust sysroot
**/sysroot

# optimized_libs
**/optimized_libs

# macos
.DS_Store
.idea

# object file
*.o

# library
*.a

# share object
*.so
*.so.*

# samplecode
samplecode/**/*_u.c
samplecode/**/*_u.h
samplecode/**/*_t.c
samplecode/**/*_t.h
samplecode/**/bin/app
samplecode/**/bin/client
samplecode/**/bin/server

# tests
tests/**/*_u.c
tests/**/*_u.h
tests/**/*_t.c
tests/**/*_t.h
tests/**/bin/test

#libunwind
sgx_unwind/libunwind/INSTALL
sgx_unwind/libunwind/m4/*
sgx_unwind/libunwind/config/*
sgx_unwind/libunwind/include/config.h.*
sgx_unwind/libunwind/Makefile.in
sgx_unwind/libunwind/aclocal.m4
sgx_unwind/libunwind/autom4te.cache/*
sgx_unwind/libunwind/configure
sgx_unwind/libunwind/src/Makefile.in
