12#ifndef ARCANE_IMPL_ARCANEMAIN_H
13#define ARCANE_IMPL_ARCANEMAIN_H
17#include "arcane/utils/List.h"
18#include "arcane/utils/IFunctor.h"
19#include "arcane/core/IArcaneMain.h"
36class ServiceFactoryInfo;
43class ARCANE_IMPL_EXPORT ArcaneMainExecutionOverrideFunctor
45 friend class ArcaneMain;
46 friend class ArcaneMainExecInfo;
50 explicit ArcaneMainExecutionOverrideFunctor(
IFunctor* functor)
52 , m_application(
nullptr)
54 IFunctor* functor() {
return m_functor; }
87class ARCANE_IMPL_EXPORT ArcaneMain
90 friend class ArcaneMainExecInfo;
91 friend class ArcaneLauncher;
92 friend class ArcaneMainAutoDetectRuntimeHelper;
106 ~ArcaneMain()
override;
255 bool is_print =
true);
310 static void redirectSignals();
311 static bool isMasterIO() {
return m_is_master_io; }
312 static void setUseTestLogger(
bool v);
316 void build()
override;
337 IDirectSubDomainExecuteFunctor* _directExecuteFunctor()
const {
return m_direct_sub_domain_execute_functor; }
341 IApplication* _application() {
return m_application; }
342 ApplicationBuildInfo& _applicationBuildInfo();
343 static int _internalRun(IDirectSubDomainExecuteFunctor* func);
348 IMainFactory* m_main_factory =
nullptr;
349 IApplication* m_application =
nullptr;
350 int m_error_code = 0;
351 IDirectSubDomainExecuteFunctor* m_direct_sub_domain_execute_functor =
nullptr;
352 static bool m_has_garbage_collector;
353 static bool m_is_master_io;
354 static bool m_is_use_test_logger;
355 static IMainFactory* m_default_main_factory;
356 static ArcaneMainExecutionOverrideFunctor* m_exec_override_functor;
360 static int _arcaneMain(
const ApplicationInfo&, IMainFactory*);
362 void _parseApplicationBuildInfoArgs();
367 static void _launchMissingInitException();
368 static void _checkHasInit();
369 static int _runDotNet();
370 static void _checkAutoDetectMPI();
372 static void _setArcaneLibraryPath();
373 static int _initRuntimes();
374 static int _checkTestLoggerResult();
Information for accelerator initialization.
Information for constructing an instance of IApplication.
static int arcaneMain(const ApplicationInfo &app_info, IMainFactory *factory=nullptr)
Entry point of the executable in Arcane.
static ApplicationBuildInfo & defaultApplicationBuildInfo()
Information for accelerator initialization.
static AcceleratorRuntimeInitialisationInfo & defaultAcceleratorRuntimeInitialisationInfo()
Information for accelerator initialization.
static std::atomic< Int32 > m_nb_arcane_init
Number of times arcaneInitialize() has been called.
static DotNetRuntimeInitialisationInfo & defaultDotNetRuntimeInitialisationInfo()
Information for .Net runtime initialization.
static void arcaneInitialize()
Initializes Arcane.
static void addApplicationBuildInfoVisitor(IApplicationBuildInfoVisitor *visitor)
Adds a visitor to fill ApplicationBuildInfo.
static int _checkAutoDetectAccelerator(bool &has_accelerator)
Detects and loads accelerator runtime management.
static void arcaneFinalize()
Terminates Arcane usage.
static Real initializationTimeForAccelerator()
Returns the time (in seconds) for the initialization of accelerator runtimes for this process.
bool hasGarbageCollector() const override
Indicates that certain objects are managed via a garbage collector.
static int callFunctorWithCatchedException(IFunctor *functor, IArcaneMain *amain, bool *clean_abort, bool is_print=true)
Calls the functor functor while catching possible exceptions.
void setErrorCode(int errcode) override
Sets the return code.
void finalize() override
Performs the last operations before instance destruction.
static void setHasDotNETRuntime()
Indicates that we are running in the .NET runtime.
IApplication * application() const override
Application.
static void setHasGarbageCollector()
Indicates that certain objects are managed by a garbage collector.
static std::atomic< Int32 > m_is_init_done
1 if init finished, 0 otherwise
static int run()
Entry point of the executable in Arcane.
static void addServiceFactoryInfo(IServiceFactoryInfo *factory)
Adds a service factory.
void build() override
Constructs the class members. The instance is not usable until this method has been called....
static ApplicationInfo & defaultApplicationInfo()
Default application info.
static void setExecuteOverrideFunctor(ArcaneMainExecutionOverrideFunctor *functor)
static bool hasDotNetWrapper()
Indicates if a '.Net' assembly is being executed from a C++ main.
int execute() override
Starts execution. This method only returns when the program exits.
void doAbort() override
Performs an abort.
int errorCode() const override
Execution error code.
static void setDefaultMainFactory(IMainFactory *mf)
Sets the default factory.
void initialize() override
Initializes the instance. The instance is not usable until this method has been called.
IMainFactory * mainFactory() const override
Main factory.
bool parseArgs(StringList args) override
Parses arguments.
static void addModuleFactoryInfo(IModuleFactoryInfo *factory)
Adds a module factory.
Information for the initialization of the '.Net' runtime.
Interface of the code management class.
Interface of a case loader.
Interface of a functor to execute code directly after the creation of a subdomain without going throu...
Factory for Arcane classes.
Information about a module factory.
Information about a service factory.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Collection< IServiceFactoryInfo * > ServiceFactoryInfoCollection
Collection of service factory information.
List< String > StringList
Unicode string list.
Collection< IModuleFactoryInfo * > ModuleFactoryInfoCollection
Collection of module factory information.
double Real
Type representing a real number.