177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao/*
2932648d528f333d43defdf16b3f8e84afa865cc8Zonr Chang * Copyright (C) 2010 The Android Open Source Project
377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao *
477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License");
577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * you may not use this file except in compliance with the License.
677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * You may obtain a copy of the License at
777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao *
877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao *      http://www.apache.org/licenses/LICENSE-2.0
977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao *
1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * Unless required by applicable law or agreed to in writing, software
1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * distributed under the License is distributed on an "AS IS" BASIS,
1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * See the License for the specific language governing permissions and
1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * limitations under the License.
1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao */
1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#ifndef ANDROID_BCC_BCC_H
1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define ANDROID_BCC_BCC_H
1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
20f340bf71ff377979d279132dcf5a801d76747d1fLogan#include <stddef.h>
214dcd6798f3db374a056ea6acc6b425f544c5207cLogan#include <stdint.h>
2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
23f340bf71ff377979d279132dcf5a801d76747d1fLogan/*-------------------------------------------------------------------------*/
24f340bf71ff377979d279132dcf5a801d76747d1fLogan
25f340bf71ff377979d279132dcf5a801d76747d1fLogan/* libbcc script opaque type */
26f340bf71ff377979d279132dcf5a801d76747d1fLogantypedef struct BCCOpaqueScript *BCCScriptRef;
27f340bf71ff377979d279132dcf5a801d76747d1fLogan
28f340bf71ff377979d279132dcf5a801d76747d1fLogan
29f340bf71ff377979d279132dcf5a801d76747d1fLogan/* Symbol lookup function type */
30f340bf71ff377979d279132dcf5a801d76747d1fLogantypedef void *(*BCCSymbolLookupFn)(void *context, char const *symbolName);
313f3d31fc9eac3d82ed9d04690aafb58f1715b8d8Logan
323f3d31fc9eac3d82ed9d04690aafb58f1715b8d8Logan
33f340bf71ff377979d279132dcf5a801d76747d1fLogan/* llvm::Module (see <llvm>/include/llvm-c/Core.h for details) */
34f340bf71ff377979d279132dcf5a801d76747d1fLogantypedef struct LLVMOpaqueModule *LLVMModuleRef;
353f3d31fc9eac3d82ed9d04690aafb58f1715b8d8Logan
363f3d31fc9eac3d82ed9d04690aafb58f1715b8d8Logan
37f340bf71ff377979d279132dcf5a801d76747d1fLogan/*-------------------------------------------------------------------------*/
38f340bf71ff377979d279132dcf5a801d76747d1fLogan
3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
40f340bf71ff377979d279132dcf5a801d76747d1fLogan#define BCC_NO_ERROR          0x0000
41f340bf71ff377979d279132dcf5a801d76747d1fLogan#define BCC_INVALID_ENUM      0x0500
42f340bf71ff377979d279132dcf5a801d76747d1fLogan#define BCC_INVALID_OPERATION 0x0502
43f340bf71ff377979d279132dcf5a801d76747d1fLogan#define BCC_INVALID_VALUE     0x0501
44f340bf71ff377979d279132dcf5a801d76747d1fLogan#define BCC_OUT_OF_MEMORY     0x0505
4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
47f340bf71ff377979d279132dcf5a801d76747d1fLogan/*-------------------------------------------------------------------------*/
48f340bf71ff377979d279132dcf5a801d76747d1fLogan
4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
50474cbd2fde362e63375f7a5099ca38b5c67835cfLogan/* Optional Flags for bccReadBC, bccReadFile, bccLinkBC, bccLinkFile */
51474cbd2fde362e63375f7a5099ca38b5c67835cfLogan#define BCC_SKIP_DEP_SHA1 (1 << 0)
52474cbd2fde362e63375f7a5099ca38b5c67835cfLogan
53474cbd2fde362e63375f7a5099ca38b5c67835cfLogan
54474cbd2fde362e63375f7a5099ca38b5c67835cfLogan/*-------------------------------------------------------------------------*/
55474cbd2fde362e63375f7a5099ca38b5c67835cfLogan
56474cbd2fde362e63375f7a5099ca38b5c67835cfLogan
5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#ifdef __cplusplus
5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liaoextern "C" {
5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
61f340bf71ff377979d279132dcf5a801d76747d1fLoganBCCScriptRef bccCreateScript();
6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
63f340bf71ff377979d279132dcf5a801d76747d1fLoganvoid bccDisposeScript(BCCScriptRef script);
6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
65ce82d492bbcc4da2d5358275c27ec38eef060fbdShih-wei Liaoint bccRegisterSymbolCallback(BCCScriptRef script,
66ce82d492bbcc4da2d5358275c27ec38eef060fbdShih-wei Liao                              BCCSymbolLookupFn pFn,
67ce82d492bbcc4da2d5358275c27ec38eef060fbdShih-wei Liao                              void *pContext);
68f340bf71ff377979d279132dcf5a801d76747d1fLogan
69f340bf71ff377979d279132dcf5a801d76747d1fLoganint bccGetError(BCCScriptRef script); /* deprecated */
70f340bf71ff377979d279132dcf5a801d76747d1fLogan
71f340bf71ff377979d279132dcf5a801d76747d1fLogan
72f340bf71ff377979d279132dcf5a801d76747d1fLogan
73f340bf71ff377979d279132dcf5a801d76747d1fLoganint bccReadBC(BCCScriptRef script,
74f340bf71ff377979d279132dcf5a801d76747d1fLogan              char const *resName,
75f340bf71ff377979d279132dcf5a801d76747d1fLogan              char const *bitcode,
76f340bf71ff377979d279132dcf5a801d76747d1fLogan              size_t bitcodeSize,
77f340bf71ff377979d279132dcf5a801d76747d1fLogan              unsigned long flags);
78f340bf71ff377979d279132dcf5a801d76747d1fLogan
79f340bf71ff377979d279132dcf5a801d76747d1fLoganint bccReadModule(BCCScriptRef script,
80f340bf71ff377979d279132dcf5a801d76747d1fLogan                  char const *resName,
81f340bf71ff377979d279132dcf5a801d76747d1fLogan                  LLVMModuleRef module,
82f340bf71ff377979d279132dcf5a801d76747d1fLogan                  unsigned long flags);
83f340bf71ff377979d279132dcf5a801d76747d1fLogan
84474cbd2fde362e63375f7a5099ca38b5c67835cfLoganint bccReadFile(BCCScriptRef script,
85474cbd2fde362e63375f7a5099ca38b5c67835cfLogan                char const *path,
86474cbd2fde362e63375f7a5099ca38b5c67835cfLogan                unsigned long flags);
87474cbd2fde362e63375f7a5099ca38b5c67835cfLogan
88f340bf71ff377979d279132dcf5a801d76747d1fLoganint bccLinkBC(BCCScriptRef script,
89f340bf71ff377979d279132dcf5a801d76747d1fLogan              char const *resName,
90f340bf71ff377979d279132dcf5a801d76747d1fLogan              char const *bitcode,
91f340bf71ff377979d279132dcf5a801d76747d1fLogan              size_t bitcodeSize,
92f340bf71ff377979d279132dcf5a801d76747d1fLogan              unsigned long flags);
93f340bf71ff377979d279132dcf5a801d76747d1fLogan
94474cbd2fde362e63375f7a5099ca38b5c67835cfLoganint bccLinkFile(BCCScriptRef script,
95474cbd2fde362e63375f7a5099ca38b5c67835cfLogan                char const *path,
96474cbd2fde362e63375f7a5099ca38b5c67835cfLogan                unsigned long flags);
97474cbd2fde362e63375f7a5099ca38b5c67835cfLogan
987890d437030c1594bc9c9f61fa1e80a57754b078Logan Chienvoid bccMarkExternalSymbol(BCCScriptRef script, char const *name);
997890d437030c1594bc9c9f61fa1e80a57754b078Logan Chien
1004928104ef3aad39e00d22ac81fd2aad6d41a25bfJoseph Wenint bccPrepareSharedObject(BCCScriptRef script,
1014928104ef3aad39e00d22ac81fd2aad6d41a25bfJoseph Wen                         char const *cacheDir,
1024928104ef3aad39e00d22ac81fd2aad6d41a25bfJoseph Wen                         char const *cacheName,
1034928104ef3aad39e00d22ac81fd2aad6d41a25bfJoseph Wen                         unsigned long flags);
1044928104ef3aad39e00d22ac81fd2aad6d41a25bfJoseph Wen
105f340bf71ff377979d279132dcf5a801d76747d1fLoganint bccPrepareExecutable(BCCScriptRef script,
106c2be0a15b2dfcc6f471527a0112ac42d51a0bf2fLogan Chien                         char const *cacheDir,
107c2be0a15b2dfcc6f471527a0112ac42d51a0bf2fLogan Chien                         char const *cacheName,
108c2be0a15b2dfcc6f471527a0112ac42d51a0bf2fLogan Chien                         unsigned long flags);
109f340bf71ff377979d279132dcf5a801d76747d1fLogan
110f340bf71ff377979d279132dcf5a801d76747d1fLoganvoid *bccGetFuncAddr(BCCScriptRef script, char const *funcname);
111f340bf71ff377979d279132dcf5a801d76747d1fLogan
112f340bf71ff377979d279132dcf5a801d76747d1fLoganvoid bccGetExportVarList(BCCScriptRef script,
113f340bf71ff377979d279132dcf5a801d76747d1fLogan                         size_t varListSize,
114f340bf71ff377979d279132dcf5a801d76747d1fLogan                         void **varList);
115f340bf71ff377979d279132dcf5a801d76747d1fLogan
116f340bf71ff377979d279132dcf5a801d76747d1fLoganvoid bccGetExportFuncList(BCCScriptRef script,
117f340bf71ff377979d279132dcf5a801d76747d1fLogan                          size_t funcListSize,
118f340bf71ff377979d279132dcf5a801d76747d1fLogan                          void **funcList);
119f340bf71ff377979d279132dcf5a801d76747d1fLogan
12048dc01db0b865b73f41cef53bcb72f65fd027af4Logan Chienchar const *bccGetBuildTime();
12148dc01db0b865b73f41cef53bcb72f65fd027af4Logan Chien
12248dc01db0b865b73f41cef53bcb72f65fd027af4Logan Chienchar const *bccGetBuildRev();
12348dc01db0b865b73f41cef53bcb72f65fd027af4Logan Chien
12448dc01db0b865b73f41cef53bcb72f65fd027af4Logan Chienchar const *bccGetBuildSHA1();
12548dc01db0b865b73f41cef53bcb72f65fd027af4Logan Chien
12677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#ifdef __cplusplus
12777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao};
12877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
12977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
130f340bf71ff377979d279132dcf5a801d76747d1fLogan/*-------------------------------------------------------------------------*/
13177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao
13277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif
133