#pragma once #include #include #include #include namespace divine { namespace rt { struct DiosCC : divcc::driver { using Options = divcc::Options; inline static const string_vec default_libs = { "c++", "c++abi", "pthread", "c" }; explicit DiosCC( context_ptr ctx ) : driver( Options(), ctx ) { map_files( rt::each ); } explicit DiosCC( Options opts = Options(), context_ptr ctx = nullptr ); DiosCC( DiosCC&& ) = default; DiosCC& operator=( DiosCC&& ) = default; void setup( Options opts ) { this->opts = opts; } void link_dios_config( std::string cfg, std::string lamp = "" ); void build( divcc::ParsedOpts po ); }; void add_dios_header_paths( std::vector< std::string >& paths ); struct NativeDiosCC : divcc::Native { NativeDiosCC( const std::vector< std::string >& opts ); auto link_dios_native( bool cxx ); std::unique_ptr< llvm::Module > link_bitcode() override; void link() override; const char* tool_name() override { return "dioscc"; } }; } // rt } // divine