//===-------- RuntimeState.cpp ------------------------------------ C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// Contains managing the OpenACC runtime state.
//
//===----------------------------------------------------------------------===//

#include "RuntimeState.h"
#include "Debug.h"

#include <cassert>
#include <mutex>

namespace llvm::acc::target {
PluginManager *PM = nullptr;
} // namespace llvm::acc::target

using namespace llvm::acc::target;

static std::mutex &getInitMutex() {
  static std::mutex Mutex;
  return Mutex;
}
static int32_t InitRefCount = 0;

void initAccRuntime() {
  std::scoped_lock<std::mutex> Lock(getInitMutex());
  assert(InitRefCount >= 0 && "Ref count cannot be negative.");

  if (InitRefCount++ == 0) {
    ODBG(ADT_Init) << "Init OpenACC runtime";
    assert(!PM && "PM is present");
    PM = new PluginManager();
    PM->init();
    PM->initializeAllDevices();
  }
}

void deinitAccRuntime() {
  std::scoped_lock<std::mutex> Lock(getInitMutex());
  assert(PM && "OpenACC runtime not initialized");
  assert(InitRefCount > 0 && "Ref count cannot be negative.");

  if (--InitRefCount == 0) {
    ODBG(ADT_Init) << "Deinit OpenACC runtime";
    PM->deinit();
    delete PM;
    PM = nullptr;
  }
}
