diff --git a/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Frameworks b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Frameworks
new file mode 120000
index 000000000..dc3d02e21
--- /dev/null
+++ b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Frameworks
@@ -0,0 +1 @@
+Versions/A/Frameworks
\ No newline at end of file
diff --git a/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework/Headers b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework/Headers
new file mode 120000
index 000000000..d5ab97c5c
--- /dev/null
+++ b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework/Headers
@@ -0,0 +1 @@
+Versions/A/Headers
\ No newline at end of file
diff --git a/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework/Versions/A/Headers b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework/Versions/A/Headers
new file mode 120000
index 000000000..ffb18a286
--- /dev/null
+++ b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework/Versions/A/Headers
@@ -0,0 +1 @@
+../../../../../../../../../../../../../../../../src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation
\ No newline at end of file
diff --git a/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework/Versions/Current b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework/Versions/Current
new file mode 120000
index 000000000..8c7e5a667
--- /dev/null
+++ b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework/Versions/Current
@@ -0,0 +1 @@
+A
\ No newline at end of file
diff --git a/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaRuntimeSupport.framework/Headers b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaRuntimeSupport.framework/Headers
new file mode 120000
index 000000000..d5ab97c5c
--- /dev/null
+++ b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaRuntimeSupport.framework/Headers
@@ -0,0 +1 @@
+Versions/A/Headers
\ No newline at end of file
diff --git a/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaRuntimeSupport.framework/Versions/A/Headers b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaRuntimeSupport.framework/Versions/A/Headers
new file mode 120000
index 000000000..917219067
--- /dev/null
+++ b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaRuntimeSupport.framework/Versions/A/Headers
@@ -0,0 +1 @@
+../../../../../../../../../../../../../../../../src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport
\ No newline at end of file
diff --git a/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaRuntimeSupport.framework/Versions/Current b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaRuntimeSupport.framework/Versions/Current
new file mode 120000
index 000000000..8c7e5a667
--- /dev/null
+++ b/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaRuntimeSupport.framework/Versions/Current
@@ -0,0 +1 @@
+A
\ No newline at end of file
diff --git a/framework-include/JavaNativeFoundation b/framework-include/JavaNativeFoundation
new file mode 120000
index 000000000..d45719cf5
--- /dev/null
+++ b/framework-include/JavaNativeFoundation
@@ -0,0 +1 @@
+../Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaNativeFoundation.framework/Headers
\ No newline at end of file
diff --git a/framework-include/JavaRuntimeSupport b/framework-include/JavaRuntimeSupport
new file mode 120000
index 000000000..8c365b7f4
--- /dev/null
+++ b/framework-include/JavaRuntimeSupport
@@ -0,0 +1 @@
+../Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Headers
\ No newline at end of file
diff --git a/src/frameworks/CMakeLists.txt b/src/frameworks/CMakeLists.txt
index 48a70cf03..e4acdc05b 100644
--- a/src/frameworks/CMakeLists.txt
+++ b/src/frameworks/CMakeLists.txt
@@ -29,6 +29,8 @@ add_subdirectory(GameController)
add_subdirectory(ImageIO)
add_subdirectory(IOBluetooth)
add_subdirectory(IOSurface)
+add_subdirectory(JavaNativeFoundation)
+add_subdirectory(JavaRuntimeSupport)
add_subdirectory(JavaVM)
add_subdirectory(LocalAuthentication)
add_subdirectory(MapKit)
diff --git a/src/frameworks/JavaNativeFoundation/CMakeLists.txt b/src/frameworks/JavaNativeFoundation/CMakeLists.txt
new file mode 100644
index 000000000..226905a71
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/CMakeLists.txt
@@ -0,0 +1,34 @@
+project(JavaNativeFoundation)
+
+set(DYLIB_COMPAT_VERSION "1.0.0")
+set(DYLIB_CURRENT_VERSION "1.0.0")
+
+add_framework(JavaNativeFoundation
+ FAT
+ CURRENT_VERSION
+ PARENT "JavaVM"
+ VERSION "A"
+
+ SOURCES
+ src/JavaNativeFoundation.m
+ src/JNFException.m
+ src/JNFTypeCoercer.m
+ src/JNFInternalJavaClassToCoersionHolder.m
+ src/JNFStringCoercion.m
+ src/JNFNumberCoercion.m
+ src/JNFDateCoercion.m
+ src/JNFMapCoercion.m
+ src/JNFListCoercion.m
+ src/JNFSetCoercion.m
+ src/JNFDefaultCoercions.m
+ src/JNFJObjectWrapper.m
+ src/JNFWeakJObjectWrapper.m
+ src/JNFRunLoop.m
+ src/JNFRunnableWrapper.m
+ src/JNFRunnable.m
+
+ DEPENDENCIES
+ system
+ objc
+ Foundation
+)
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFDateCoercion.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFDateCoercion.h
new file mode 100644
index 000000000..5d80f16d9
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFDateCoercion.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFDateCoercion : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFDefaultCoercions.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFDefaultCoercions.h
new file mode 100644
index 000000000..723284619
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFDefaultCoercions.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFDefaultCoercions : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFException.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFException.h
new file mode 100644
index 000000000..6f7302fac
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFException.h
@@ -0,0 +1,33 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+extern const char* kOutOfMemoryError;
+extern const char* kClassNotFoundException;
+extern const char* kNullPointerException;
+extern const char* kIllegalAccessException;
+extern const char* kIllegalArgumentException;
+extern const char* kNoSuchFieldException;
+extern const char* kNoSuchMethodException;
+extern const char* kRuntimeException;
+
+@interface JNFException : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFInternalJavaClassToCoersionHolder.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFInternalJavaClassToCoersionHolder.h
new file mode 100644
index 000000000..398226752
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFInternalJavaClassToCoersionHolder.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFInternalJavaClassToCoersionHolder : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFJObjectWrapper.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFJObjectWrapper.h
new file mode 100644
index 000000000..78193add5
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFJObjectWrapper.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFJObjectWrapper : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFListCoercion.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFListCoercion.h
new file mode 100644
index 000000000..b0aa4119b
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFListCoercion.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFListCoercion : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFMapCoercion.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFMapCoercion.h
new file mode 100644
index 000000000..1e9b3e082
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFMapCoercion.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFMapCoercion : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFNumberCoercion.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFNumberCoercion.h
new file mode 100644
index 000000000..4188bf5e7
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFNumberCoercion.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFNumberCoercion : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFRunLoop.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFRunLoop.h
new file mode 100644
index 000000000..4c39b08d5
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFRunLoop.h
@@ -0,0 +1,26 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+extern NSString* JNFRunLoopDidStartNotification;
+
+@interface JNFRunLoop : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFRunnable.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFRunnable.h
new file mode 100644
index 000000000..6f7609cba
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFRunnable.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFRunnable : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFRunnableWrapper.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFRunnableWrapper.h
new file mode 100644
index 000000000..3625f651a
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFRunnableWrapper.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFRunnableWrapper : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFSetCoercion.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFSetCoercion.h
new file mode 100644
index 000000000..9dba96cfc
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFSetCoercion.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFSetCoercion : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFStringCoercion.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFStringCoercion.h
new file mode 100644
index 000000000..6b745db03
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFStringCoercion.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFStringCoercion : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFTypeCoercer.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFTypeCoercer.h
new file mode 100644
index 000000000..b016f1837
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFTypeCoercer.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFTypeCoercer : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFTypeCoercion.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFTypeCoercion.h
new file mode 100644
index 000000000..f588b88ea
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFTypeCoercion.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@protocol JNFTypeCoercion
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFWeakJObjectWrapper.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFWeakJObjectWrapper.h
new file mode 100644
index 000000000..6a1ad06d1
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JNFWeakJObjectWrapper.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JNFWeakJObjectWrapper : NSObject
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JavaNativeFoundation.h b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JavaNativeFoundation.h
new file mode 100644
index 000000000..0db974b5d
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/include/JavaNativeFoundation/JavaNativeFoundation.h
@@ -0,0 +1,148 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+
+#ifndef _JavaNativeFoundation_H_
+#define _JavaNativeFoundation_H_
+
+#import
+
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+
+void* JNFAssertionFailure(void);
+void* JNFAssertionFailureBreak(void);
+void* JNFCFToJavaBoolean(void);
+void* JNFCallBooleanMethod(void);
+void* JNFCallByteMethod(void);
+void* JNFCallCharMethod(void);
+void* JNFCallDoubleMethod(void);
+void* JNFCallFloatMethod(void);
+void* JNFCallIntMethod(void);
+void* JNFCallLongMethod(void);
+void* JNFCallObjectMethod(void);
+void* JNFCallShortMethod(void);
+void* JNFCallStaticBooleanMethod(void);
+void* JNFCallStaticByteMethod(void);
+void* JNFCallStaticCharMethod(void);
+void* JNFCallStaticDoubleMethod(void);
+void* JNFCallStaticFloatMethod(void);
+void* JNFCallStaticIntMethod(void);
+void* JNFCallStaticLongMethod(void);
+void* JNFCallStaticObjectMethod(void);
+void* JNFCallStaticShortMethod(void);
+void* JNFCallStaticVoidMethod(void);
+void* JNFCallVoidMethod(void);
+void* JNFDebugWarning(void);
+void* JNFDebugWarningBreak(void);
+void* JNFDeleteGlobalRef(void);
+void* JNFDeleteWeakGlobalRef(void);
+void* JNFDumpJavaObject(void);
+void* JNFDumpJavaStack(void);
+void* JNFGetBooleanField(void);
+void* JNFGetByteField(void);
+void* JNFGetCharField(void);
+void* JNFGetDoubleField(void);
+void* JNFGetFloatField(void);
+void* JNFGetIntField(void);
+void* JNFGetLongField(void);
+void* JNFGetObjectField(void);
+void* JNFGetShortField(void);
+void* JNFGetStackTraceAsNSString(void);
+void* JNFGetStaticBooleanField(void);
+void* JNFGetStaticByteField(void);
+void* JNFGetStaticCharField(void);
+void* JNFGetStaticDoubleField(void);
+void* JNFGetStaticFloatField(void);
+void* JNFGetStaticIntField(void);
+void* JNFGetStaticLongField(void);
+void* JNFGetStaticObjectField(void);
+void* JNFGetStaticShortField(void);
+void* JNFGetStringUTF16UniChars(void);
+void* JNFGetStringUTF8Chars(void);
+void* JNFIsInstanceOf(void);
+void* JNFJavaMillisToNSTimeInterval(void);
+void* JNFJavaStackTrace(void);
+void* JNFJavaToCFBoolean(void);
+void* JNFJavaToNSDate(void);
+void* JNFJavaToNSNumber(void);
+void* JNFJavaToNSString(void);
+void* JNFNSTimeIntervalToJavaMillis(void);
+void* JNFNSToJavaCalendar(void);
+void* JNFNSToJavaNumber(void);
+void* JNFNSToJavaString(void);
+void* JNFNativeMethodEnter(void);
+void* JNFNativeMethodExit(void);
+void* JNFNewBooleanArray(void);
+void* JNFNewByteArray(void);
+void* JNFNewCharArray(void);
+void* JNFNewDoubleArray(void);
+void* JNFNewFloatArray(void);
+void* JNFNewGlobalRef(void);
+void* JNFNewIntArray(void);
+void* JNFNewLongArray(void);
+void* JNFNewObject(void);
+void* JNFNewObjectArray(void);
+void* JNFNewShortArray(void);
+void* JNFNewWeakGlobalRef(void);
+void* JNFNormalizedJavaStringForPath(void);
+void* JNFNormalizedNSStringForPath(void);
+void* JNFObjectClassName(void);
+void* JNFObjectEquals(void);
+void* JNFObjectToString(void);
+void* JNFObtainEnv(void);
+void* JNFPerformEnvBlock(void);
+void* JNFReleaseEnv(void);
+void* JNFReleaseStringUTF16UniChars(void);
+void* JNFReleaseStringUTF8Chars(void);
+void* JNFSetBooleanField(void);
+void* JNFSetByteField(void);
+void* JNFSetCharField(void);
+void* JNFSetDoubleField(void);
+void* JNFSetFloatField(void);
+void* JNFSetIntField(void);
+void* JNFSetLongField(void);
+void* JNFSetObjectField(void);
+void* JNFSetShortField(void);
+void* JNFSetStaticBooleanField(void);
+void* JNFSetStaticByteField(void);
+void* JNFSetStaticCharField(void);
+void* JNFSetStaticDoubleField(void);
+void* JNFSetStaticFloatField(void);
+void* JNFSetStaticIntField(void);
+void* JNFSetStaticLongField(void);
+void* JNFSetStaticObjectField(void);
+void* JNFSetStaticShortField(void);
+void* JNFSetTracePS(void);
+
+#endif
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFDateCoercion.m b/src/frameworks/JavaNativeFoundation/src/JNFDateCoercion.m
new file mode 100644
index 000000000..c3e0eba50
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFDateCoercion.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFDateCoercion
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFDefaultCoercions.m b/src/frameworks/JavaNativeFoundation/src/JNFDefaultCoercions.m
new file mode 100644
index 000000000..3473be4b1
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFDefaultCoercions.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFDefaultCoercions
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFException.m b/src/frameworks/JavaNativeFoundation/src/JNFException.m
new file mode 100644
index 000000000..5cb166ae6
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFException.m
@@ -0,0 +1,44 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+// guessed values
+const char* kOutOfMemoryError = "kOutOfMemoryError";
+const char* kClassNotFoundException = "kClassNotFoundException";
+const char* kNullPointerException = "kNullPointerException";
+const char* kIllegalAccessException = "kIllegalAccessException";
+const char* kIllegalArgumentException = "kIllegalArgumentException";
+const char* kNoSuchFieldException = "kNoSuchFieldException";
+const char* kNoSuchMethodException = "kNoSuchMethodException";
+const char* kRuntimeException = "kRuntimeException";
+
+@implementation JNFException
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFInternalJavaClassToCoersionHolder.m b/src/frameworks/JavaNativeFoundation/src/JNFInternalJavaClassToCoersionHolder.m
new file mode 100644
index 000000000..41501d6de
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFInternalJavaClassToCoersionHolder.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFInternalJavaClassToCoersionHolder
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFJObjectWrapper.m b/src/frameworks/JavaNativeFoundation/src/JNFJObjectWrapper.m
new file mode 100644
index 000000000..5fafd604e
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFJObjectWrapper.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFJObjectWrapper
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFListCoercion.m b/src/frameworks/JavaNativeFoundation/src/JNFListCoercion.m
new file mode 100644
index 000000000..60e556ae0
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFListCoercion.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFListCoercion
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFMapCoercion.m b/src/frameworks/JavaNativeFoundation/src/JNFMapCoercion.m
new file mode 100644
index 000000000..5f4244bcd
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFMapCoercion.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFMapCoercion
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFNumberCoercion.m b/src/frameworks/JavaNativeFoundation/src/JNFNumberCoercion.m
new file mode 100644
index 000000000..329f00887
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFNumberCoercion.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFNumberCoercion
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFRunLoop.m b/src/frameworks/JavaNativeFoundation/src/JNFRunLoop.m
new file mode 100644
index 000000000..e7f412af9
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFRunLoop.m
@@ -0,0 +1,37 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+// guessed value
+NSString* JNFRunLoopDidStartNotification = @"JNFRunLoopDidStartNotification";
+
+@implementation JNFRunLoop
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFRunnable.m b/src/frameworks/JavaNativeFoundation/src/JNFRunnable.m
new file mode 100644
index 000000000..90bc7eeee
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFRunnable.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFRunnable
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFRunnableWrapper.m b/src/frameworks/JavaNativeFoundation/src/JNFRunnableWrapper.m
new file mode 100644
index 000000000..799158004
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFRunnableWrapper.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFRunnableWrapper
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFSetCoercion.m b/src/frameworks/JavaNativeFoundation/src/JNFSetCoercion.m
new file mode 100644
index 000000000..7f6f2a64c
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFSetCoercion.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFSetCoercion
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFStringCoercion.m b/src/frameworks/JavaNativeFoundation/src/JNFStringCoercion.m
new file mode 100644
index 000000000..ff30aa801
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFStringCoercion.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFStringCoercion
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFTypeCoercer.m b/src/frameworks/JavaNativeFoundation/src/JNFTypeCoercer.m
new file mode 100644
index 000000000..dccd51aa2
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFTypeCoercer.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFTypeCoercer
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JNFWeakJObjectWrapper.m b/src/frameworks/JavaNativeFoundation/src/JNFWeakJObjectWrapper.m
new file mode 100644
index 000000000..b9456c243
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JNFWeakJObjectWrapper.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JNFWeakJObjectWrapper
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaNativeFoundation/src/JavaNativeFoundation.m b/src/frameworks/JavaNativeFoundation/src/JavaNativeFoundation.m
new file mode 100644
index 000000000..5eea451ed
--- /dev/null
+++ b/src/frameworks/JavaNativeFoundation/src/JavaNativeFoundation.m
@@ -0,0 +1,654 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+
+#include
+#include
+#include
+
+static int verbose = 0;
+
+__attribute__((constructor))
+static void initme(void) {
+ verbose = getenv("STUB_VERBOSE") != NULL;
+}
+
+void* JNFAssertionFailure(void)
+{
+ if (verbose) puts("STUB: JNFAssertionFailure called");
+ return NULL;
+}
+
+void* JNFAssertionFailureBreak(void)
+{
+ if (verbose) puts("STUB: JNFAssertionFailureBreak called");
+ return NULL;
+}
+
+void* JNFCFToJavaBoolean(void)
+{
+ if (verbose) puts("STUB: JNFCFToJavaBoolean called");
+ return NULL;
+}
+
+void* JNFCallBooleanMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallBooleanMethod called");
+ return NULL;
+}
+
+void* JNFCallByteMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallByteMethod called");
+ return NULL;
+}
+
+void* JNFCallCharMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallCharMethod called");
+ return NULL;
+}
+
+void* JNFCallDoubleMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallDoubleMethod called");
+ return NULL;
+}
+
+void* JNFCallFloatMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallFloatMethod called");
+ return NULL;
+}
+
+void* JNFCallIntMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallIntMethod called");
+ return NULL;
+}
+
+void* JNFCallLongMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallLongMethod called");
+ return NULL;
+}
+
+void* JNFCallObjectMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallObjectMethod called");
+ return NULL;
+}
+
+void* JNFCallShortMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallShortMethod called");
+ return NULL;
+}
+
+void* JNFCallStaticBooleanMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallStaticBooleanMethod called");
+ return NULL;
+}
+
+void* JNFCallStaticByteMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallStaticByteMethod called");
+ return NULL;
+}
+
+void* JNFCallStaticCharMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallStaticCharMethod called");
+ return NULL;
+}
+
+void* JNFCallStaticDoubleMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallStaticDoubleMethod called");
+ return NULL;
+}
+
+void* JNFCallStaticFloatMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallStaticFloatMethod called");
+ return NULL;
+}
+
+void* JNFCallStaticIntMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallStaticIntMethod called");
+ return NULL;
+}
+
+void* JNFCallStaticLongMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallStaticLongMethod called");
+ return NULL;
+}
+
+void* JNFCallStaticObjectMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallStaticObjectMethod called");
+ return NULL;
+}
+
+void* JNFCallStaticShortMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallStaticShortMethod called");
+ return NULL;
+}
+
+void* JNFCallStaticVoidMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallStaticVoidMethod called");
+ return NULL;
+}
+
+void* JNFCallVoidMethod(void)
+{
+ if (verbose) puts("STUB: JNFCallVoidMethod called");
+ return NULL;
+}
+
+void* JNFDebugWarning(void)
+{
+ if (verbose) puts("STUB: JNFDebugWarning called");
+ return NULL;
+}
+
+void* JNFDebugWarningBreak(void)
+{
+ if (verbose) puts("STUB: JNFDebugWarningBreak called");
+ return NULL;
+}
+
+void* JNFDeleteGlobalRef(void)
+{
+ if (verbose) puts("STUB: JNFDeleteGlobalRef called");
+ return NULL;
+}
+
+void* JNFDeleteWeakGlobalRef(void)
+{
+ if (verbose) puts("STUB: JNFDeleteWeakGlobalRef called");
+ return NULL;
+}
+
+void* JNFDumpJavaObject(void)
+{
+ if (verbose) puts("STUB: JNFDumpJavaObject called");
+ return NULL;
+}
+
+void* JNFDumpJavaStack(void)
+{
+ if (verbose) puts("STUB: JNFDumpJavaStack called");
+ return NULL;
+}
+
+void* JNFGetBooleanField(void)
+{
+ if (verbose) puts("STUB: JNFGetBooleanField called");
+ return NULL;
+}
+
+void* JNFGetByteField(void)
+{
+ if (verbose) puts("STUB: JNFGetByteField called");
+ return NULL;
+}
+
+void* JNFGetCharField(void)
+{
+ if (verbose) puts("STUB: JNFGetCharField called");
+ return NULL;
+}
+
+void* JNFGetDoubleField(void)
+{
+ if (verbose) puts("STUB: JNFGetDoubleField called");
+ return NULL;
+}
+
+void* JNFGetFloatField(void)
+{
+ if (verbose) puts("STUB: JNFGetFloatField called");
+ return NULL;
+}
+
+void* JNFGetIntField(void)
+{
+ if (verbose) puts("STUB: JNFGetIntField called");
+ return NULL;
+}
+
+void* JNFGetLongField(void)
+{
+ if (verbose) puts("STUB: JNFGetLongField called");
+ return NULL;
+}
+
+void* JNFGetObjectField(void)
+{
+ if (verbose) puts("STUB: JNFGetObjectField called");
+ return NULL;
+}
+
+void* JNFGetShortField(void)
+{
+ if (verbose) puts("STUB: JNFGetShortField called");
+ return NULL;
+}
+
+void* JNFGetStackTraceAsNSString(void)
+{
+ if (verbose) puts("STUB: JNFGetStackTraceAsNSString called");
+ return NULL;
+}
+
+void* JNFGetStaticBooleanField(void)
+{
+ if (verbose) puts("STUB: JNFGetStaticBooleanField called");
+ return NULL;
+}
+
+void* JNFGetStaticByteField(void)
+{
+ if (verbose) puts("STUB: JNFGetStaticByteField called");
+ return NULL;
+}
+
+void* JNFGetStaticCharField(void)
+{
+ if (verbose) puts("STUB: JNFGetStaticCharField called");
+ return NULL;
+}
+
+void* JNFGetStaticDoubleField(void)
+{
+ if (verbose) puts("STUB: JNFGetStaticDoubleField called");
+ return NULL;
+}
+
+void* JNFGetStaticFloatField(void)
+{
+ if (verbose) puts("STUB: JNFGetStaticFloatField called");
+ return NULL;
+}
+
+void* JNFGetStaticIntField(void)
+{
+ if (verbose) puts("STUB: JNFGetStaticIntField called");
+ return NULL;
+}
+
+void* JNFGetStaticLongField(void)
+{
+ if (verbose) puts("STUB: JNFGetStaticLongField called");
+ return NULL;
+}
+
+void* JNFGetStaticObjectField(void)
+{
+ if (verbose) puts("STUB: JNFGetStaticObjectField called");
+ return NULL;
+}
+
+void* JNFGetStaticShortField(void)
+{
+ if (verbose) puts("STUB: JNFGetStaticShortField called");
+ return NULL;
+}
+
+void* JNFGetStringUTF16UniChars(void)
+{
+ if (verbose) puts("STUB: JNFGetStringUTF16UniChars called");
+ return NULL;
+}
+
+void* JNFGetStringUTF8Chars(void)
+{
+ if (verbose) puts("STUB: JNFGetStringUTF8Chars called");
+ return NULL;
+}
+
+void* JNFIsInstanceOf(void)
+{
+ if (verbose) puts("STUB: JNFIsInstanceOf called");
+ return NULL;
+}
+
+void* JNFJavaMillisToNSTimeInterval(void)
+{
+ if (verbose) puts("STUB: JNFJavaMillisToNSTimeInterval called");
+ return NULL;
+}
+
+void* JNFJavaStackTrace(void)
+{
+ if (verbose) puts("STUB: JNFJavaStackTrace called");
+ return NULL;
+}
+
+void* JNFJavaToCFBoolean(void)
+{
+ if (verbose) puts("STUB: JNFJavaToCFBoolean called");
+ return NULL;
+}
+
+void* JNFJavaToNSDate(void)
+{
+ if (verbose) puts("STUB: JNFJavaToNSDate called");
+ return NULL;
+}
+
+void* JNFJavaToNSNumber(void)
+{
+ if (verbose) puts("STUB: JNFJavaToNSNumber called");
+ return NULL;
+}
+
+void* JNFJavaToNSString(void)
+{
+ if (verbose) puts("STUB: JNFJavaToNSString called");
+ return NULL;
+}
+
+void* JNFNSTimeIntervalToJavaMillis(void)
+{
+ if (verbose) puts("STUB: JNFNSTimeIntervalToJavaMillis called");
+ return NULL;
+}
+
+void* JNFNSToJavaCalendar(void)
+{
+ if (verbose) puts("STUB: JNFNSToJavaCalendar called");
+ return NULL;
+}
+
+void* JNFNSToJavaNumber(void)
+{
+ if (verbose) puts("STUB: JNFNSToJavaNumber called");
+ return NULL;
+}
+
+void* JNFNSToJavaString(void)
+{
+ if (verbose) puts("STUB: JNFNSToJavaString called");
+ return NULL;
+}
+
+void* JNFNativeMethodEnter(void)
+{
+ if (verbose) puts("STUB: JNFNativeMethodEnter called");
+ return NULL;
+}
+
+void* JNFNativeMethodExit(void)
+{
+ if (verbose) puts("STUB: JNFNativeMethodExit called");
+ return NULL;
+}
+
+void* JNFNewBooleanArray(void)
+{
+ if (verbose) puts("STUB: JNFNewBooleanArray called");
+ return NULL;
+}
+
+void* JNFNewByteArray(void)
+{
+ if (verbose) puts("STUB: JNFNewByteArray called");
+ return NULL;
+}
+
+void* JNFNewCharArray(void)
+{
+ if (verbose) puts("STUB: JNFNewCharArray called");
+ return NULL;
+}
+
+void* JNFNewDoubleArray(void)
+{
+ if (verbose) puts("STUB: JNFNewDoubleArray called");
+ return NULL;
+}
+
+void* JNFNewFloatArray(void)
+{
+ if (verbose) puts("STUB: JNFNewFloatArray called");
+ return NULL;
+}
+
+void* JNFNewGlobalRef(void)
+{
+ if (verbose) puts("STUB: JNFNewGlobalRef called");
+ return NULL;
+}
+
+void* JNFNewIntArray(void)
+{
+ if (verbose) puts("STUB: JNFNewIntArray called");
+ return NULL;
+}
+
+void* JNFNewLongArray(void)
+{
+ if (verbose) puts("STUB: JNFNewLongArray called");
+ return NULL;
+}
+
+void* JNFNewObject(void)
+{
+ if (verbose) puts("STUB: JNFNewObject called");
+ return NULL;
+}
+
+void* JNFNewObjectArray(void)
+{
+ if (verbose) puts("STUB: JNFNewObjectArray called");
+ return NULL;
+}
+
+void* JNFNewShortArray(void)
+{
+ if (verbose) puts("STUB: JNFNewShortArray called");
+ return NULL;
+}
+
+void* JNFNewWeakGlobalRef(void)
+{
+ if (verbose) puts("STUB: JNFNewWeakGlobalRef called");
+ return NULL;
+}
+
+void* JNFNormalizedJavaStringForPath(void)
+{
+ if (verbose) puts("STUB: JNFNormalizedJavaStringForPath called");
+ return NULL;
+}
+
+void* JNFNormalizedNSStringForPath(void)
+{
+ if (verbose) puts("STUB: JNFNormalizedNSStringForPath called");
+ return NULL;
+}
+
+void* JNFObjectClassName(void)
+{
+ if (verbose) puts("STUB: JNFObjectClassName called");
+ return NULL;
+}
+
+void* JNFObjectEquals(void)
+{
+ if (verbose) puts("STUB: JNFObjectEquals called");
+ return NULL;
+}
+
+void* JNFObjectToString(void)
+{
+ if (verbose) puts("STUB: JNFObjectToString called");
+ return NULL;
+}
+
+void* JNFObtainEnv(void)
+{
+ if (verbose) puts("STUB: JNFObtainEnv called");
+ return NULL;
+}
+
+void* JNFPerformEnvBlock(void)
+{
+ if (verbose) puts("STUB: JNFPerformEnvBlock called");
+ return NULL;
+}
+
+void* JNFReleaseEnv(void)
+{
+ if (verbose) puts("STUB: JNFReleaseEnv called");
+ return NULL;
+}
+
+void* JNFReleaseStringUTF16UniChars(void)
+{
+ if (verbose) puts("STUB: JNFReleaseStringUTF16UniChars called");
+ return NULL;
+}
+
+void* JNFReleaseStringUTF8Chars(void)
+{
+ if (verbose) puts("STUB: JNFReleaseStringUTF8Chars called");
+ return NULL;
+}
+
+void* JNFSetBooleanField(void)
+{
+ if (verbose) puts("STUB: JNFSetBooleanField called");
+ return NULL;
+}
+
+void* JNFSetByteField(void)
+{
+ if (verbose) puts("STUB: JNFSetByteField called");
+ return NULL;
+}
+
+void* JNFSetCharField(void)
+{
+ if (verbose) puts("STUB: JNFSetCharField called");
+ return NULL;
+}
+
+void* JNFSetDoubleField(void)
+{
+ if (verbose) puts("STUB: JNFSetDoubleField called");
+ return NULL;
+}
+
+void* JNFSetFloatField(void)
+{
+ if (verbose) puts("STUB: JNFSetFloatField called");
+ return NULL;
+}
+
+void* JNFSetIntField(void)
+{
+ if (verbose) puts("STUB: JNFSetIntField called");
+ return NULL;
+}
+
+void* JNFSetLongField(void)
+{
+ if (verbose) puts("STUB: JNFSetLongField called");
+ return NULL;
+}
+
+void* JNFSetObjectField(void)
+{
+ if (verbose) puts("STUB: JNFSetObjectField called");
+ return NULL;
+}
+
+void* JNFSetShortField(void)
+{
+ if (verbose) puts("STUB: JNFSetShortField called");
+ return NULL;
+}
+
+void* JNFSetStaticBooleanField(void)
+{
+ if (verbose) puts("STUB: JNFSetStaticBooleanField called");
+ return NULL;
+}
+
+void* JNFSetStaticByteField(void)
+{
+ if (verbose) puts("STUB: JNFSetStaticByteField called");
+ return NULL;
+}
+
+void* JNFSetStaticCharField(void)
+{
+ if (verbose) puts("STUB: JNFSetStaticCharField called");
+ return NULL;
+}
+
+void* JNFSetStaticDoubleField(void)
+{
+ if (verbose) puts("STUB: JNFSetStaticDoubleField called");
+ return NULL;
+}
+
+void* JNFSetStaticFloatField(void)
+{
+ if (verbose) puts("STUB: JNFSetStaticFloatField called");
+ return NULL;
+}
+
+void* JNFSetStaticIntField(void)
+{
+ if (verbose) puts("STUB: JNFSetStaticIntField called");
+ return NULL;
+}
+
+void* JNFSetStaticLongField(void)
+{
+ if (verbose) puts("STUB: JNFSetStaticLongField called");
+ return NULL;
+}
+
+void* JNFSetStaticObjectField(void)
+{
+ if (verbose) puts("STUB: JNFSetStaticObjectField called");
+ return NULL;
+}
+
+void* JNFSetStaticShortField(void)
+{
+ if (verbose) puts("STUB: JNFSetStaticShortField called");
+ return NULL;
+}
+
+void* JNFSetTracePS(void)
+{
+ if (verbose) puts("STUB: JNFSetTracePS called");
+ return NULL;
+}
diff --git a/src/frameworks/JavaRuntimeSupport/CMakeLists.txt b/src/frameworks/JavaRuntimeSupport/CMakeLists.txt
new file mode 100644
index 000000000..73cdda7ac
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/CMakeLists.txt
@@ -0,0 +1,29 @@
+project(JavaRuntimeSupport)
+
+set(DYLIB_COMPAT_VERSION "1.0.0")
+set(DYLIB_CURRENT_VERSION "1.0.0")
+
+add_framework(JavaRuntimeSupport
+ FAT
+ CURRENT_VERSION
+ PARENT "JavaVM"
+ VERSION "A"
+
+ SOURCES
+ src/JavaRuntimeSupport.m
+ src/JRSDrag.m
+ src/JRSAppKitAWT.m
+ src/JRSMenu.m
+ src/_JRSUIRenderer.m
+ src/JRSInputMethodController.m
+ src/MIGThread.m
+ src/JRSRenderServer.m
+ src/JRSSymbolicator.m
+ src/JRSSymbolicatorImpl.m
+ src/JRSSecurity.m
+
+ DEPENDENCIES
+ system
+ objc
+ Foundation
+)
diff --git a/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSAppKitAWT.h b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSAppKitAWT.h
new file mode 100644
index 000000000..4ecc17c87
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSAppKitAWT.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JRSAppKitAWT : NSObject
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSDrag.h b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSDrag.h
new file mode 100644
index 000000000..82cb91789
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSDrag.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JRSDrag : NSObject
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSInputMethodController.h b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSInputMethodController.h
new file mode 100644
index 000000000..6a39e779b
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSInputMethodController.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JRSInputMethodController : NSObject
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSMenu.h b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSMenu.h
new file mode 100644
index 000000000..f98286a1a
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSMenu.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JRSMenu : NSObject
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSRenderServer.h b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSRenderServer.h
new file mode 100644
index 000000000..112f65535
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSRenderServer.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JRSRenderServer : NSObject
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSSecurity.h b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSSecurity.h
new file mode 100644
index 000000000..ec6c6dae7
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSSecurity.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JRSSecurity : NSObject
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSSymbolicator.h b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSSymbolicator.h
new file mode 100644
index 000000000..6ea887070
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSSymbolicator.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JRSSymbolicator : NSObject
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSSymbolicatorImpl.h b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSSymbolicatorImpl.h
new file mode 100644
index 000000000..16f58a55a
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JRSSymbolicatorImpl.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface JRSSymbolicatorImpl : NSObject
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JavaRuntimeSupport.h b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JavaRuntimeSupport.h
new file mode 100644
index 000000000..32dd65cd0
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/JavaRuntimeSupport.h
@@ -0,0 +1,89 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+
+#ifndef _JavaRuntimeSupport_H_
+#define _JavaRuntimeSupport_H_
+
+#import
+
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+
+void* CopyCFStringToFilesystemRepresentation(void);
+void* CopyCFStringToUTF8(void);
+void* GetHitPart(void);
+void* GetScrollBarHitPart(void);
+void* JRSAccessibilityUnregisterUniqueIdForUIElement(void);
+void* JRSCopyCanonicalLanguageForPrimaryLanguage(void);
+void* JRSCopyOSJavaSupportVersion(void);
+void* JRSCopyOSName(void);
+void* JRSCopyOSVersion(void);
+void* JRSCopyPrimaryLanguage(void);
+void* JRSFontAlignStyleForFractionalMeasurement(void);
+void* JRSFontAlignStyleForIntegerMeasurement(void);
+void* JRSFontCreateFallbackFontForCharacters(void);
+void* JRSFontGetAdvancesForGlyphsAndStyle(void);
+void* JRSFontGetBoundingBoxesForGlyphsAndStyle(void);
+void* JRSFontGetRenderingStyleForContext(void);
+void* JRSFontGetRenderingStyleForHints(void);
+void* JRSFontSetRenderingStyleOnContext(void);
+void* JRSFontStyleIsAntialiased(void);
+void* JRSFontStyleUsesFractionalMetrics(void);
+void* JRSSetDefaultLocalization(void);
+void* JRSUIControlCreate(void);
+void* JRSUIControlDraw(void);
+void* JRSUIControlGetHitPart(void);
+void* JRSUIControlGetScrollBarOffsetFor(void);
+void* JRSUIControlGetScrollBarPartBounds(void);
+void* JRSUIControlRelease(void);
+void* JRSUIControlSetAlignmentHorizontal(void);
+void* JRSUIControlSetAlignmentVertical(void);
+void* JRSUIControlSetAnimating(void);
+void* JRSUIControlSetDirection(void);
+void* JRSUIControlSetOrientation(void);
+void* JRSUIControlSetPresentationState(void);
+void* JRSUIControlSetScrollBarPart(void);
+void* JRSUIControlSetSegmentPosition(void);
+void* JRSUIControlSetShowArrows(void);
+void* JRSUIControlSetSize(void);
+void* JRSUIControlSetState(void);
+void* JRSUIControlSetUserInterfaceLayoutDirection(void);
+void* JRSUIControlSetValueByKey(void);
+void* JRSUIControlSetVariant(void);
+void* JRSUIControlSetWidget(void);
+void* JRSUIControlSetWindowType(void);
+void* JRSUIControlShouldScrollToClick(void);
+void* JRSUIGetKey(void);
+void* JRSUIRendererCreate(void);
+void* JRSUIRendererRelease(void);
+void* do_transfer_port_send_right(void);
+void* port_send_right_transfer_server(void);
+void* port_send_right_transfer_server_routine(void);
+void* transfer_port_send_right(void);
+
+#endif
diff --git a/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/MIGThread.h b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/MIGThread.h
new file mode 100644
index 000000000..2f71a47e2
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/MIGThread.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface MIGThread : NSObject
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/_JRSUIRenderer.h b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/_JRSUIRenderer.h
new file mode 100644
index 000000000..8cf5da4d9
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/include/JavaRuntimeSupport/_JRSUIRenderer.h
@@ -0,0 +1,24 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#include
+
+@interface _JRSUIRenderer : NSObject
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/src/JRSAppKitAWT.m b/src/frameworks/JavaRuntimeSupport/src/JRSAppKitAWT.m
new file mode 100644
index 000000000..bba1280be
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/src/JRSAppKitAWT.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JRSAppKitAWT
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/src/JRSDrag.m b/src/frameworks/JavaRuntimeSupport/src/JRSDrag.m
new file mode 100644
index 000000000..bcc5eecc4
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/src/JRSDrag.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JRSDrag
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/src/JRSInputMethodController.m b/src/frameworks/JavaRuntimeSupport/src/JRSInputMethodController.m
new file mode 100644
index 000000000..2bafac0e9
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/src/JRSInputMethodController.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JRSInputMethodController
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/src/JRSMenu.m b/src/frameworks/JavaRuntimeSupport/src/JRSMenu.m
new file mode 100644
index 000000000..d0902e0e1
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/src/JRSMenu.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JRSMenu
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/src/JRSRenderServer.m b/src/frameworks/JavaRuntimeSupport/src/JRSRenderServer.m
new file mode 100644
index 000000000..67752c5d8
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/src/JRSRenderServer.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JRSRenderServer
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/src/JRSSecurity.m b/src/frameworks/JavaRuntimeSupport/src/JRSSecurity.m
new file mode 100644
index 000000000..deb160ff6
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/src/JRSSecurity.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JRSSecurity
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/src/JRSSymbolicator.m b/src/frameworks/JavaRuntimeSupport/src/JRSSymbolicator.m
new file mode 100644
index 000000000..19e9a5ea6
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/src/JRSSymbolicator.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JRSSymbolicator
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/src/JRSSymbolicatorImpl.m b/src/frameworks/JavaRuntimeSupport/src/JRSSymbolicatorImpl.m
new file mode 100644
index 000000000..af3547d86
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/src/JRSSymbolicatorImpl.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation JRSSymbolicatorImpl
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/src/JavaRuntimeSupport.m b/src/frameworks/JavaRuntimeSupport/src/JavaRuntimeSupport.m
new file mode 100644
index 000000000..02a2ef2d0
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/src/JavaRuntimeSupport.m
@@ -0,0 +1,336 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+
+#include
+#include
+#include
+
+static int verbose = 0;
+
+__attribute__((constructor))
+static void initme(void) {
+ verbose = getenv("STUB_VERBOSE") != NULL;
+}
+
+void* CopyCFStringToFilesystemRepresentation(void)
+{
+ if (verbose) puts("STUB: CopyCFStringToFilesystemRepresentation called");
+ return NULL;
+}
+
+void* CopyCFStringToUTF8(void)
+{
+ if (verbose) puts("STUB: CopyCFStringToUTF8 called");
+ return NULL;
+}
+
+void* GetHitPart(void)
+{
+ if (verbose) puts("STUB: GetHitPart called");
+ return NULL;
+}
+
+void* GetScrollBarHitPart(void)
+{
+ if (verbose) puts("STUB: GetScrollBarHitPart called");
+ return NULL;
+}
+
+void* JRSAccessibilityUnregisterUniqueIdForUIElement(void)
+{
+ if (verbose) puts("STUB: JRSAccessibilityUnregisterUniqueIdForUIElement called");
+ return NULL;
+}
+
+void* JRSCopyCanonicalLanguageForPrimaryLanguage(void)
+{
+ if (verbose) puts("STUB: JRSCopyCanonicalLanguageForPrimaryLanguage called");
+ return NULL;
+}
+
+void* JRSCopyOSJavaSupportVersion(void)
+{
+ if (verbose) puts("STUB: JRSCopyOSJavaSupportVersion called");
+ return NULL;
+}
+
+void* JRSCopyOSName(void)
+{
+ if (verbose) puts("STUB: JRSCopyOSName called");
+ return NULL;
+}
+
+void* JRSCopyOSVersion(void)
+{
+ if (verbose) puts("STUB: JRSCopyOSVersion called");
+ return NULL;
+}
+
+void* JRSCopyPrimaryLanguage(void)
+{
+ if (verbose) puts("STUB: JRSCopyPrimaryLanguage called");
+ return NULL;
+}
+
+void* JRSFontAlignStyleForFractionalMeasurement(void)
+{
+ if (verbose) puts("STUB: JRSFontAlignStyleForFractionalMeasurement called");
+ return NULL;
+}
+
+void* JRSFontAlignStyleForIntegerMeasurement(void)
+{
+ if (verbose) puts("STUB: JRSFontAlignStyleForIntegerMeasurement called");
+ return NULL;
+}
+
+void* JRSFontCreateFallbackFontForCharacters(void)
+{
+ if (verbose) puts("STUB: JRSFontCreateFallbackFontForCharacters called");
+ return NULL;
+}
+
+void* JRSFontGetAdvancesForGlyphsAndStyle(void)
+{
+ if (verbose) puts("STUB: JRSFontGetAdvancesForGlyphsAndStyle called");
+ return NULL;
+}
+
+void* JRSFontGetBoundingBoxesForGlyphsAndStyle(void)
+{
+ if (verbose) puts("STUB: JRSFontGetBoundingBoxesForGlyphsAndStyle called");
+ return NULL;
+}
+
+void* JRSFontGetRenderingStyleForContext(void)
+{
+ if (verbose) puts("STUB: JRSFontGetRenderingStyleForContext called");
+ return NULL;
+}
+
+void* JRSFontGetRenderingStyleForHints(void)
+{
+ if (verbose) puts("STUB: JRSFontGetRenderingStyleForHints called");
+ return NULL;
+}
+
+void* JRSFontSetRenderingStyleOnContext(void)
+{
+ if (verbose) puts("STUB: JRSFontSetRenderingStyleOnContext called");
+ return NULL;
+}
+
+void* JRSFontStyleIsAntialiased(void)
+{
+ if (verbose) puts("STUB: JRSFontStyleIsAntialiased called");
+ return NULL;
+}
+
+void* JRSFontStyleUsesFractionalMetrics(void)
+{
+ if (verbose) puts("STUB: JRSFontStyleUsesFractionalMetrics called");
+ return NULL;
+}
+
+void* JRSSetDefaultLocalization(void)
+{
+ if (verbose) puts("STUB: JRSSetDefaultLocalization called");
+ return NULL;
+}
+
+void* JRSUIControlCreate(void)
+{
+ if (verbose) puts("STUB: JRSUIControlCreate called");
+ return NULL;
+}
+
+void* JRSUIControlDraw(void)
+{
+ if (verbose) puts("STUB: JRSUIControlDraw called");
+ return NULL;
+}
+
+void* JRSUIControlGetHitPart(void)
+{
+ if (verbose) puts("STUB: JRSUIControlGetHitPart called");
+ return NULL;
+}
+
+void* JRSUIControlGetScrollBarOffsetFor(void)
+{
+ if (verbose) puts("STUB: JRSUIControlGetScrollBarOffsetFor called");
+ return NULL;
+}
+
+void* JRSUIControlGetScrollBarPartBounds(void)
+{
+ if (verbose) puts("STUB: JRSUIControlGetScrollBarPartBounds called");
+ return NULL;
+}
+
+void* JRSUIControlRelease(void)
+{
+ if (verbose) puts("STUB: JRSUIControlRelease called");
+ return NULL;
+}
+
+void* JRSUIControlSetAlignmentHorizontal(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetAlignmentHorizontal called");
+ return NULL;
+}
+
+void* JRSUIControlSetAlignmentVertical(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetAlignmentVertical called");
+ return NULL;
+}
+
+void* JRSUIControlSetAnimating(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetAnimating called");
+ return NULL;
+}
+
+void* JRSUIControlSetDirection(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetDirection called");
+ return NULL;
+}
+
+void* JRSUIControlSetOrientation(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetOrientation called");
+ return NULL;
+}
+
+void* JRSUIControlSetPresentationState(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetPresentationState called");
+ return NULL;
+}
+
+void* JRSUIControlSetScrollBarPart(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetScrollBarPart called");
+ return NULL;
+}
+
+void* JRSUIControlSetSegmentPosition(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetSegmentPosition called");
+ return NULL;
+}
+
+void* JRSUIControlSetShowArrows(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetShowArrows called");
+ return NULL;
+}
+
+void* JRSUIControlSetSize(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetSize called");
+ return NULL;
+}
+
+void* JRSUIControlSetState(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetState called");
+ return NULL;
+}
+
+void* JRSUIControlSetUserInterfaceLayoutDirection(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetUserInterfaceLayoutDirection called");
+ return NULL;
+}
+
+void* JRSUIControlSetValueByKey(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetValueByKey called");
+ return NULL;
+}
+
+void* JRSUIControlSetVariant(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetVariant called");
+ return NULL;
+}
+
+void* JRSUIControlSetWidget(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetWidget called");
+ return NULL;
+}
+
+void* JRSUIControlSetWindowType(void)
+{
+ if (verbose) puts("STUB: JRSUIControlSetWindowType called");
+ return NULL;
+}
+
+void* JRSUIControlShouldScrollToClick(void)
+{
+ if (verbose) puts("STUB: JRSUIControlShouldScrollToClick called");
+ return NULL;
+}
+
+void* JRSUIGetKey(void)
+{
+ if (verbose) puts("STUB: JRSUIGetKey called");
+ return NULL;
+}
+
+void* JRSUIRendererCreate(void)
+{
+ if (verbose) puts("STUB: JRSUIRendererCreate called");
+ return NULL;
+}
+
+void* JRSUIRendererRelease(void)
+{
+ if (verbose) puts("STUB: JRSUIRendererRelease called");
+ return NULL;
+}
+
+void* do_transfer_port_send_right(void)
+{
+ if (verbose) puts("STUB: do_transfer_port_send_right called");
+ return NULL;
+}
+
+void* port_send_right_transfer_server(void)
+{
+ if (verbose) puts("STUB: port_send_right_transfer_server called");
+ return NULL;
+}
+
+void* port_send_right_transfer_server_routine(void)
+{
+ if (verbose) puts("STUB: port_send_right_transfer_server_routine called");
+ return NULL;
+}
+
+void* transfer_port_send_right(void)
+{
+ if (verbose) puts("STUB: transfer_port_send_right called");
+ return NULL;
+}
diff --git a/src/frameworks/JavaRuntimeSupport/src/MIGThread.m b/src/frameworks/JavaRuntimeSupport/src/MIGThread.m
new file mode 100644
index 000000000..b4cd48903
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/src/MIGThread.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation MIGThread
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end
diff --git a/src/frameworks/JavaRuntimeSupport/src/_JRSUIRenderer.m b/src/frameworks/JavaRuntimeSupport/src/_JRSUIRenderer.m
new file mode 100644
index 000000000..5f482c979
--- /dev/null
+++ b/src/frameworks/JavaRuntimeSupport/src/_JRSUIRenderer.m
@@ -0,0 +1,34 @@
+/*
+ This file is part of Darling.
+
+ Copyright (C) 2021 Lubos Dolezel
+
+ Darling is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Darling is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Darling. If not, see .
+*/
+
+#import
+
+@implementation _JRSUIRenderer
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+ return [NSMethodSignature signatureWithObjCTypes: "v@:"];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+ NSLog(@"Stub called: %@ in %@", NSStringFromSelector([anInvocation selector]), [self class]);
+}
+
+@end