< prev index next >
src/java.base/share/native/libjava/jni_util.h
Print this page
rev 12879 : 8136556: Add the ability to perform static builds of MacOSX x64 binaries
Reviewed-by: ihse, bdelsart, gadams, lfoltan, rriggs, hseigel, twisti
*** 1,7 ****
/*
! * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 387,396 ****
--- 387,507 ----
void buildJniFunctionName(const char *sym, const char *cname,
char *jniEntryName);
extern size_t getLastErrorString(char *buf, size_t len);
extern int getErrorString(int err, char *buf, size_t len);
+
+ #ifdef STATIC_BUILD
+ /* Macros for handling declaration of static/dynamic
+ * JNI library Load/Unload functions
+ *
+ * Use DEF_JNI_On{Un}Load when you want a static and non-static entry points.
+ * Use DEF_STATIC_JNI_On{Un}Load when you only want a static one.
+ *
+ * LIBRARY_NAME must be set to the name of the library
+ */
+
+ /* These three macros are needed to get proper concatenation of
+ * the LIBRARY_NAME
+ *
+ * NOTE: LIBRARY_NAME must be set for static builds.
+ */
+ #define ADD_LIB_NAME3(name, lib) name ## lib
+ #define ADD_LIB_NAME2(name, lib) ADD_LIB_NAME3(name, lib)
+ #define ADD_LIB_NAME(entry) ADD_LIB_NAME2(entry, LIBRARY_NAME)
+
+ #define DEF_JNI_OnLoad \
+ ADD_LIB_NAME(JNI_OnLoad_)(JavaVM *vm, void *reserved) \
+ { \
+ jint JNICALL ADD_LIB_NAME(JNI_OnLoad_dynamic_)(JavaVM *vm, void *reserved); \
+ ADD_LIB_NAME(JNI_OnLoad_dynamic_)(vm, reserved); \
+ return JNI_VERSION_1_8; \
+ } \
+ jint JNICALL ADD_LIB_NAME(JNI_OnLoad_dynamic_)
+
+ #define DEF_STATIC_JNI_OnLoad \
+ JNIEXPORT jint JNICALL ADD_LIB_NAME(JNI_OnLoad_)(JavaVM *vm, void *reserved) { \
+ return JNI_VERSION_1_8; \
+ }
+
+ #define DEF_JNI_OnUnload \
+ ADD_LIB_NAME(JNI_OnUnload_)(JavaVM *vm, void *reserved) \
+ { \
+ void JNICALL ADD_LIB_NAME(JNI_OnUnload_dynamic_)(JavaVM *vm, void *reserved); \
+ ADD_LIB_NAME(JNI_OnUnload_dynamic_)(vm, reserved); \
+ } \
+ void JNICALL ADD_LIB_NAME(JNI_OnUnload_dynamic_)
+
+ #define DEF_STATIC_JNI_OnUnload \
+ ADD_LIB_NAME(JNI_OnUnload_)
+
+ #else
+
+ #define DEF_JNI_OnLoad JNI_OnLoad
+ #define DEF_STATIC_JNI_OnLoad
+ #define DEF_JNI_OnUnload JNI_OnUnload
+ #define DEF_STATIC_JNI_OnUnload
+ #endif
+
+ #ifdef STATIC_BUILD
+ /* Macros for handling declaration of static/dynamic
+ * Agent library Load/Attach/Unload functions
+ *
+ * Use DEF_Agent_OnLoad, DEF_Agent_OnAttach or DEF_Agent_OnUnload
+ * when you want both static and non-static entry points.
+ * Use DEF_STATIC_Agent_OnLoad, DEF_STATIC_Agent_OnAttach or
+ * DEF_STATIC_Agent_OnUnload when you only want a static one.
+ *
+ * LIBRARY_NAME must be set to the name of the library for static builds.
+ */
+
+ #define DEF_Agent_OnLoad \
+ ADD_LIB_NAME(Agent_OnLoad_)(JavaVM *vm, char *options, void *reserved) \
+ { \
+ jint JNICALL ADD_LIB_NAME(Agent_OnLoad_dynamic_)(JavaVM *vm, char *options, void *reserved); \
+ return ADD_LIB_NAME(Agent_OnLoad_dynamic_)(vm, options, reserved); \
+ } \
+ jint JNICALL ADD_LIB_NAME(Agent_OnLoad_dynamic_)
+
+ #define DEF_STATIC_Agent_OnLoad \
+ JNIEXPORT jint JNICALL ADD_LIB_NAME(Agent_OnLoad_)(JavaVM *vm, char *options, void *reserved) { \
+ return JNI_FALSE; \
+ }
+
+ #define DEF_Agent_OnAttach \
+ ADD_LIB_NAME(Agent_OnAttach_)(JavaVM *vm, char *options, void *reserved) \
+ { \
+ jint JNICALL ADD_LIB_NAME(Agent_OnAttach_dynamic_)(JavaVM *vm, char *options, void *reserved); \
+ return ADD_LIB_NAME(Agent_OnAttach_dynamic_)(vm, options, reserved); \
+ } \
+ jint JNICALL ADD_LIB_NAME(Agent_OnAttach_dynamic_)
+
+ #define DEF_STATIC_Agent_OnAttach \
+ JNIEXPORT jint JNICALL ADD_LIB_NAME(Agent_OnLoad_)(JavaVM *vm, char *options, void *reserved) { \
+ return JNI_FALSE; \
+ }
+
+ #define DEF_Agent_OnUnload \
+ ADD_LIB_NAME(Agent_OnUnload_)(JavaVM *vm) \
+ { \
+ void JNICALL ADD_LIB_NAME(Agent_OnUnload_dynamic_)(JavaVM *vm); \
+ ADD_LIB_NAME(Agent_OnUnload_dynamic_)(vm); \
+ } \
+ void JNICALL ADD_LIB_NAME(Agent_OnUnload_dynamic_)
+
+ #define DEF_STATIC_Agent_OnUnload \
+ ADD_LIB_NAME(Agent_OnUnload_)
+
+ #else
+ #define DEF_Agent_OnLoad Agent_OnLoad
+ #define DEF_Agent_OnAttach Agent_OnAttach
+ #define DEF_Agent_OnUnload Agent_OnUnload
+ #define DEF_STATIC_Agent_OnLoad
+ #define DEF_STATIC_Agent_OnAttach
+ #define DEF_STATIC_Agent_OnUnload
+ #endif
+
#ifdef __cplusplus
} /* extern "C" */
#endif /* __cplusplus */
#endif /* JNI_UTIL_H */
< prev index next >