/*
 Copyright 2019 Alain Dargelas

 Licensed 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.
 */

/*
 * File:   Surelog.h
 * Author: alain
 *
 * Created on November 21, 2019, 10:09 PM
 */

#ifndef SURELOG_H
#define SURELOG_H

namespace SURELOG {
  struct scompiler;
  SURELOG::scompiler* start_compiler (SURELOG::CommandLineParser* clp); 
  SURELOG::Design*    get_design(SURELOG::scompiler* compiler);
  void       shutdown_compiler(SURELOG::scompiler* compiler);
}  //

#endif
