diff options
author | David 'Digit' Turner <digit@google.com> | 2015-03-20 22:16:47 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-03-20 22:16:47 +0000 |
commit | 654f070478a652eebbf6560f593e8e7c97388e80 (patch) | |
tree | 842029b9ec6fc084ddf70997e603a7bd8e530a8c /emulator/opengl/shared/emugl/common/shared_library.h | |
parent | 5b69bb42bbdd028daae30d1b1258914f9cb9fa59 (diff) | |
parent | a268ba5f6bbbc67904124f7368f617dbb3fae6ef (diff) | |
download | sdk-654f070478a652eebbf6560f593e8e7c97388e80.zip sdk-654f070478a652eebbf6560f593e8e7c97388e80.tar.gz sdk-654f070478a652eebbf6560f593e8e7c97388e80.tar.bz2 |
am a268ba5f: am c245592b: Merge changes I551e0f3d,I26d84cf5,I27c993d1 into idea133 automerge: 4e42336
* commit 'a268ba5f6bbbc67904124f7368f617dbb3fae6ef':
emulator/opengl: Remove out-of-process handling code.
emulator/opengl: refactor Thread class.
emulator/opengl: refactor shared library handling.
Diffstat (limited to 'emulator/opengl/shared/emugl/common/shared_library.h')
-rw-r--r-- | emulator/opengl/shared/emugl/common/shared_library.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/emulator/opengl/shared/emugl/common/shared_library.h b/emulator/opengl/shared/emugl/common/shared_library.h new file mode 100644 index 0000000..38d25bd --- /dev/null +++ b/emulator/opengl/shared/emugl/common/shared_library.h @@ -0,0 +1,85 @@ +// Copyright (C) 2014 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef EMUGL_COMMON_SHARED_LIBRARY_H +#define EMUGL_COMMON_SHARED_LIBRARY_H + +#ifdef _WIN32 +#include <windows.h> +#endif + +namespace emugl { + +// A class used to open a platform-specific shared library, and probe +// it for symbols. Usage is the following: +// +// // Open the library. +// SharedLibrary* library = SharedLibrary::open("libFoo"); +// if (!library) { +// ... could not find / open library! +// } +// +// //Probe for function symbol. +// FunctionPtr my_func = library->findSymbol("my_func"); +// +// // Closes library/ +// delete library; +// +class SharedLibrary { +public: + // Open a given library. |libraryName| can be either a full library + // path, or a simple name without an extension. On success, returns + // a new SharedLibrary instance that must be deleted by the caller. + static SharedLibrary* open(const char* libraryName); + + // Closes an existing SharedLibrary instance. + ~SharedLibrary(); + + // Generic function pointer type, for values returned by the + // findSymbol() method. + typedef void (*FunctionPtr)(void); + + // Probe a given SharedLibrary instance to find a symbol named + // |symbolName| in it. Return its address as a FunctionPtr, or + // NULL if the symbol is not found. + FunctionPtr findSymbol(const char* symbolName); + +private: +#ifdef _WIN32 + typedef HMODULE HandleType; +#else + typedef void* HandleType; +#endif + + // Constructor intentionally hidden. + SharedLibrary(HandleType); + + HandleType mLib; +}; + +// Macro to compose emugl shared library name under various OS and bitness +// eg. +// on x86_64, EMUGL_LIBNAME("foo") --> "lib64foo" + +#if defined(__x86_64__) +# define EMUGL_LIBNAME(name) "lib64" name +#elif defined(__i386__) +# define EMUGL_LIBNAME(name) "lib" name +#else +/* This header is included by target w/o using EMUGL_LIBNAME(). Don't #error, leave it undefined */ +#endif + +} // namespace emugl + +#endif // EMUGL_COMMON_SHARED_LIBRARY_H |