11c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang/*
21c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * Copyright 2012, The Android Open Source Project
31c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang *
41c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * Licensed under the Apache License, Version 2.0 (the "License");
51c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * you may not use this file except in compliance with the License.
61c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * You may obtain a copy of the License at
71c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang *
81c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang *     http://www.apache.org/licenses/LICENSE-2.0
91c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang *
101c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * Unless required by applicable law or agreed to in writing, software
111c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * distributed under the License is distributed on an "AS IS" BASIS,
121c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * See the License for the specific language governing permissions and
141c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * limitations under the License.
151c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang */
161c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
17c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#ifndef BCC_CONTEXT_H
18c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#define BCC_CONTEXT_H
191c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
201c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Changnamespace llvm {
211c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  class LLVMContext;
221c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang}
231c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
241c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Changnamespace bcc {
251c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
261c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Changclass BCCContextImpl;
27d2a5a0eab7a1273797029702652e50b2ed9e6a6dShih-wei Liaoclass Source;
281c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
291c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang/*
301c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang * class BCCContext manages the global data across the libbcc infrastructure.
311c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang */
321c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Changclass BCCContext {
331c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Changpublic:
341c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  BCCContextImpl *const mImpl;
351c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
361c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  BCCContext();
371c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  ~BCCContext();
381c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
391c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  llvm::LLVMContext &getLLVMContext();
401c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  const llvm::LLVMContext &getLLVMContext() const;
411c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
42d2a5a0eab7a1273797029702652e50b2ed9e6a6dShih-wei Liao  void addSource(Source &pSource);
43d2a5a0eab7a1273797029702652e50b2ed9e6a6dShih-wei Liao  void removeSource(Source &pSource);
44d2a5a0eab7a1273797029702652e50b2ed9e6a6dShih-wei Liao
451c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  // Global BCCContext
461c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  static BCCContext *GetOrCreateGlobalContext();
471c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang  static void DestroyGlobalContext();
481c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang};
491c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
501c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang} // namespace bcc
511c30cee77f9a148215a0dacee2d922d1ec1b3baeZonr Chang
52c72c4ddfcd79c74f70713da91a69569451b5c19eZonr Chang#endif  // BCC_CONTEXT_H
53