Skip to content

Commit 2717f48

Browse files
committed
2 parents 5d4f050 + 20a482a commit 2717f48

File tree

148 files changed

+2885
-26255
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

148 files changed

+2885
-26255
lines changed

.vscode/launch.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
// Use IntelliSense to learn about possible attributes.
3+
// Hover to view descriptions of existing attributes.
4+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"name": "(lldb) Launch",
9+
"type": "cppdbg",
10+
"request": "launch",
11+
"program": "/usr/local/opt/openjdk@11/bin/java",
12+
"args": [
13+
"-cp",
14+
// mvn dependency:build-classpath -DincludeScope=test -Dmdep.outputFile=deps-classpath-test.txt
15+
// + target/generated-resources:target/generated-test-resources:target/test-classes:target/classes
16+
"${workspaceFolder}/target/generated-resources:${workspaceFolder}/target/generated-test-resources:${workspaceFolder}/target/test-classes:${workspaceFolder}/target/classes:/Users/ochafik/.m2/repository/com/google/android/tools/dx/1.7/dx-1.7.jar:/Users/ochafik/.m2/repository/org/khronos/opengl-api/gl1.1-android-2.1_r1/opengl-api-gl1.1-android-2.1_r1.jar:/Users/ochafik/.m2/repository/org/json/json/20080701/json-20080701.jar:/Users/ochafik/.m2/repository/junit/junit/4.13.2/junit-4.13.2.jar:/Users/ochafik/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar:/Users/ochafik/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar:/Users/ochafik/.m2/repository/xerces/xmlParserAPIs/2.6.2/xmlParserAPIs-2.6.2.jar:/Users/ochafik/.m2/repository/commons-codec/commons-codec/1.3/commons-codec-1.3.jar:/Users/ochafik/.m2/repository/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1.jar:/Users/ochafik/.m2/repository/javolution/javolution/5.5.1/javolution-5.5.1.jar:/Users/ochafik/.m2/repository/org/osgi/org.osgi.core/6.0.0/org.osgi.core-6.0.0.jar:/Users/ochafik/.m2/repository/net/java/dev/jna/jna/5.12.1/jna-5.12.1.jar:/Users/ochafik/.m2/repository/xpp3/xpp3/1.1.4c/xpp3-1.1.4c.jar:/Users/ochafik/.m2/repository/org/ow2/asm/asm/9.4/asm-9.4.jar:/Users/ochafik/.m2/repository/org/apache/httpcomponents/httpclient/4.0.1/httpclient-4.0.1.jar:/Users/ochafik/.m2/repository/com/google/android/android/4.1.1.4/android-4.1.1.4.jar",
17+
"org.junit.runner.JUnitCore",
18+
"org.bridj.BridJTest"
19+
],
20+
"stopAtEntry": false,
21+
"cwd": "${fileDirname}",
22+
"environment": [],
23+
"externalConsole": false,
24+
// "MIMode": "gdb",
25+
"MIMode": "lldb"
26+
}
27+
]
28+
}

BuildNative

Lines changed: 131 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
#!/bin/bash
2-
3-
function failed() {
4-
echo "$@"
5-
exit 1
6-
}
2+
set -eu
3+
# set -x
74

85
cd `dirname $0`
96
BASE_DIR=$PWD
@@ -17,28 +14,24 @@ then
1714
fi
1815

1916
cd $DYNCALL_HOME
20-
hg diff > $DYNCALL_DIFF
17+
if which hg 2>/dev/null ; then
18+
hg diff > $DYNCALL_DIFF
19+
fi
2120
cd $BASE_DIR
2221

23-
MAKE_CMD=make
24-
if [[ "`which gmake`" != "" ]]; then
25-
MAKE_CMD=gmake
26-
fi
2722

2823
UNAME_ARCH=`uname -m`
2924
UNAME_OS=`uname -s | sed s/_NT-.*/_NT/`
3025

3126
function get_arch() {
32-
if [[ -n "$ARCH" ]]; then
33-
echo "$ARCH"
34-
elif [[ "$UNAME_OS" == "SunOS" ]]; then
27+
if [[ "$UNAME_OS" == "SunOS" ]]; then
3528
if [ "`isainfo -n`" = "amd64" ]; then
3629
echo "x64"
3730
else
3831
echo "x86"
3932
fi
40-
elif [[ "$UNAME_OS" == "Darwin" ]]; then
41-
echo "universal"
33+
# elif [[ "$UNAME_OS" == "Darwin" ]]; then
34+
# echo "universal"
4235
else
4336
case $UNAME_ARCH in
4437
i86pc|i386|i486|i586|i686|x86)
@@ -47,11 +40,17 @@ function get_arch() {
4740
x86_64|amd64)
4841
echo x64
4942
;;
43+
aarch64)
44+
echo arm64
45+
;;
5046
arm*)
5147
if [[ -d /lib/arm-linux-gnueabihf ]] ; then
52-
echo "armhf"
48+
# echo "armhf"
49+
# echo "arm32v7"
50+
echo "arm"
5351
elif [[ -d /lib/arm-linux-gnueabi ]] ; then
5452
echo "armel"
53+
# echo "arm32v5"
5554
else
5655
failed "Unknown Linux arm flavour: please edit $0 and Platform.java"
5756
fi
@@ -86,94 +85,130 @@ function get_os() {
8685
esac
8786
}
8887

88+
function build_libraries() {
89+
local OS="$1"
90+
local ARCH="$2"
91+
shift 2
8992

90-
function get_os_arch() {
91-
case $OS in
92-
windows)
93-
case $ARCH in
94-
x86)
95-
echo win32
96-
;;
97-
x64)
98-
echo win64
99-
;;
100-
esac
101-
;;
102-
*)
103-
echo ${OS}_${ARCH}
104-
;;
105-
esac
106-
}
93+
local CMAKE_FLAGS=( "$@" )
94+
local RESOURCES=()
95+
local TEST_RESOURCES=()
96+
97+
# if [[ "${FAST:-0}" != "1" ]]; then
98+
# mvn generate-sources
99+
# fi
107100

108-
CMDS=$@
109-
if [[ -z "$BRIDJ_TARGETS" ]]; then
110-
BRIDJ_TARGETS="default"
111-
if [[ -n "$ANDROID_NDK_HOME" ]] ; then
112-
BRIDJ_TARGETS="$BRIDJ_TARGETS android" ;
101+
if [[ "$OS" == "android" ]]; then
102+
$BASE_DIR/src/main/cpp/bridj/MakeAndroid.sh $@
103+
return 0
113104
fi
114-
fi
115105

116-
if [[ "$1" != "clean" && "$FAST" != "1" ]]; then
117-
mvn generate-sources
118-
fi
106+
if [[ "${DEBUG:-0}" == "1" ]]; then
107+
CMAKE_FLAGS+=( -DCMAKE_BUILD_TYPE=Debug )
108+
else
109+
CMAKE_FLAGS+=( -DCMAKE_BUILD_TYPE=Release )
110+
fi
119111

120-
function build_libraries() {
121-
export NATIVE_ARCH=`ARCH="" get_arch`
122-
export ARCH=`get_arch`
123-
export OS_ARCH=`get_os_arch`
124-
125-
for BRIDJ_TARGET in $BRIDJ_TARGETS ; do
126-
case $BRIDJ_TARGET in
127-
default)
128-
cd $DYNCALL_HOME
129-
local DYNCALL_CONFIGURE_ARGS=""
130-
if [[ "$ARCH" != "$NATIVE_ARCH" ]]; then
131-
DYNCALL_CONFIGURE_ARGS="--target-$ARCH"
132-
fi
133-
sh ./configure $DYNCALL_CONFIGURE_ARGS
134-
$MAKE_CMD $@ || failed "Failed building dyncall"
135-
136-
export DYNCALL_HOME
137-
export OS
138-
export ARCH
139-
export CONFIG
140-
export OUT_DIR=$BASE_DIR/src/main/resources/org/bridj/lib/$OS_ARCH
141-
export OBJ_DIR=target/build/${OS}_${ARCH}_${CONFIG}
142-
export DYNCALL_BUILD_DIR=build_out/${OS}_${ARCH}_gcc_${CONFIG}
143-
144-
cd $BASE_DIR/src/main/cpp/bridj
145-
$MAKE_CMD $@ || failed "Build of lib failed"
146-
147-
export OUT_DIR=$BASE_DIR/src/test/resources/org/bridj/lib/$OS_ARCH
148-
149-
cd $BASE_DIR/src/test/cpp/test
150-
$MAKE_CMD $@ || failed "Build of test lib failed"
151-
152-
cd $BASE_DIR/src/test/cpp/dependsOnTest
153-
$MAKE_CMD $@ || failed "Build of dependsOnTest lib failed"
154-
;;
155-
android)
156-
$BASE_DIR/src/main/cpp/bridj/MakeAndroid.sh $@
157-
;;
158-
esac
159-
done
160-
}
112+
case "$OS" in
113+
windows)
114+
# CMAKE_FLAGS+=( -G "Visual Studio 17 2022" )
115+
# case "$ARCH" in
116+
# x86)
117+
# CMAKE_FLAGS+=( -A Win32 )
118+
# ;;
119+
# x64)
120+
# CMAKE_FLAGS+=( -A x64 )
121+
# ;;
122+
# arm)
123+
# CMAKE_FLAGS+=( -A ARM )
124+
# ;;
125+
# arm64)
126+
# CMAKE_FLAGS+=( -A ARM64 )
127+
# ;;
128+
# *)
129+
# echo "Unknown arch: $ARCH" >&2
130+
# exit 1
131+
# esac
132+
RESOURCES+=( bridj.dll )
133+
TEST_RESOURCES+=( test.dll dependsOnTest.dll )
134+
;;
135+
darwin)
136+
case "$ARCH" in
137+
x64)
138+
CMAKE_FLAGS+=( -DCMAKE_OSX_ARCHITECTURES=x86_64 )
139+
;;
140+
arm64)
141+
CMAKE_FLAGS+=( -DCMAKE_OSX_ARCHITECTURES=arm64 )
142+
;;
143+
universal)
144+
echo "WARNING: Universal builds don't work yet as JDK does not have fat binaries"
145+
CMAKE_FLAGS+=( -DCMAKE_OSX_ARCHITECTURES="x86_64 arm64" )
146+
;;
147+
esac
148+
RESOURCES+=( libbridj.dylib )
149+
TEST_RESOURCES+=( libtest.dylib libdependsOnTest.dylib )
150+
;;
151+
*)
152+
RESOURCES+=( libbridj.so )
153+
TEST_RESOURCES+=( libtest.so libdependsOnTest.so )
154+
;;
155+
esac
156+
157+
OS_ARCH=${OS}_${ARCH}
158+
OUT=$BASE_DIR/target/$OS_ARCH
159+
if [[ "${DEBUG:-0}" == "1" ]]; then
160+
OUT="${OUT}_debug"
161+
fi
161162

162-
export OS=`get_os`
163+
echo "# Building for $OS on $ARCH into $OUT with cmake flags ${CMAKE_FLAGS[*]}"
163164

164-
if [[ "$DEBUG" == "1" ]]; then
165-
CONFIG=debug
166-
else
167-
CONFIG=release
165+
mkdir -p $OUT
166+
cd $OUT
167+
if [[ "${CMAKE:-1}" != "0" ]]; then
168+
cmake ../.. "${CMAKE_FLAGS[@]}"
169+
fi
170+
171+
# TODO: Different command for VS build on Windows
172+
make -j10
173+
174+
echo "Copying resources for $OS_ARCH"
175+
# RESOURCES_DEST=$BASE_DIR/target/classes/org/bridj/lib/$OS_ARCH
176+
# TEST_RESOURCES_DEST=$BASE_DIR/target/test-classes/org/bridj/lib/$OS_ARCH
177+
# RESOURCES_DEST=$BASE_DIR/target/generated-resources/org/bridj/lib/$OS_ARCH
178+
# TEST_RESOURCES_DEST=$BASE_DIR/target/generated-test-resources/org/bridj/lib/$OS_ARCH
179+
RESOURCES_DEST=$BASE_DIR/src/main/resources/org/bridj/lib/$OS_ARCH
180+
TEST_RESOURCES_DEST=$BASE_DIR/src/test/resources/org/bridj/lib/$OS_ARCH
181+
182+
mkdir -p "$RESOURCES_DEST"
183+
mkdir -p "$TEST_RESOURCES_DEST"
184+
cp "${RESOURCES[@]}" "$RESOURCES_DEST"
185+
cp "${TEST_RESOURCES[@]}" "$TEST_RESOURCES_DEST"
186+
}
187+
188+
if [[ -z "${OS:-}" ]]; then
189+
OS="$(get_os)"
168190
fi
169191

170-
if [[ $OS =~ sunos ]]; then
171-
ARCH=x86 build_libraries $@
172-
ARCH=x64 build_libraries $@
192+
if [[ "${ARCH:-}" == "all" ]]; then
193+
case $OS in
194+
sunos)
195+
build_libraries sunos x86 "$@"
196+
build_libraries sunos x64 "$@"
197+
;;
198+
windows)
199+
# See README.md on how to download the JDKs needed here
200+
build_libraries windows x64 -DFORCE_JAVA_HOME=${JAVA_HOME_X64} "$@"
201+
build_libraries windows arm64 -DFORCE_JAVA_HOME=${JAVA_HOME_ARM64} "$@"
202+
;;
203+
darwin)
204+
build_libraries darwin x64 -DFORCE_JAVA_HOME=${JAVA_HOME_X64} "$@"
205+
build_libraries darwin arm64 -DFORCE_JAVA_HOME=${JAVA_HOME_ARM64} "$@"
206+
;;
207+
*)
208+
ARCH="$(get_arch)"
209+
build_libraries $OS $ARCH "$@"
210+
esac
173211
else
174-
if [[ $OS =~ darwin ]]; then
175-
export AS=llvm-as
176-
export CC=llvm-gcc
177-
fi
178-
build_libraries $@
212+
ARCH=${ARCH:-$(get_arch)}
213+
build_libraries $OS $ARCH "$@"
179214
fi

CMakeLists.txt

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
cmake_minimum_required(VERSION 3.18.0)
2+
project(BridJ C CXX)
3+
4+
set(CMAKE_CXX_STANDARD 11)
5+
6+
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
7+
enable_language(OBJC)
8+
endif()
9+
10+
# INTERPROCEDURAL_OPTIMIZATION
11+
cmake_policy(SET CMP0069 NEW)
12+
set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
13+
14+
if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
15+
set(CMAKE_SHARED_LIBRARY_PREFIX "")
16+
else()
17+
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
18+
endif()
19+
20+
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
21+
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
22+
23+
option(BUILD_TESTS "Whether to build tests" ON)
24+
25+
add_subdirectory(dyncall)
26+
add_subdirectory(src/main/cpp/bridj)
27+
add_subdirectory(src/test/cpp/test) # EXCLUDE_FROM_ALL
28+
add_subdirectory(src/test/cpp/dependsOnTest)
29+
add_subdirectory(Examples/BasicExample/src/main/native/example)

Examples/BasicExample/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99

1010
<properties>
1111
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12-
<maven.compiler.source>1.5</maven.compiler.source>
13-
<maven.compiler.target>1.5</maven.compiler.target>
12+
<maven.compiler.source>1.7</maven.compiler.source>
13+
<maven.compiler.target>1.7</maven.compiler.target>
1414
<bridj.version>0.7.1-SNAPSHOT</bridj.version>
1515
</properties>
1616

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
cmake_minimum_required(VERSION 3.18.0)
2+
project(BridJ-example)
3+
4+
# if ("${FORCE_JAVA_HOME}" STREQUAL "")
5+
# find_package(JNI REQUIRED)
6+
# else()
7+
# SET(JNI_INCLUDE_DIRS
8+
# ${FORCE_JAVA_HOME}/include
9+
# ${FORCE_JAVA_HOME}/include/linux
10+
# ${FORCE_JAVA_HOME}/include/solaris
11+
# ${FORCE_JAVA_HOME}/include/windows
12+
# ${FORCE_JAVA_HOME}/include/win32
13+
# ${FORCE_JAVA_HOME}/include/darwin
14+
# )
15+
# set(JNI_LIBRARIES ${FORCE_JAVA_HOME}/lib/server/libjvm.dylib)
16+
# endif()
17+
# include_directories(${JNI_INCLUDE_DIRS})
18+
19+
include_directories(include)
20+
21+
add_compile_options( -fPIC )
22+
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
23+
add_compile_options( -stdlib=libc++ )
24+
endif()
25+
26+
add_link_options(-l stdc++)
27+
if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
28+
# http://gcc.gnu.org/onlinedocs/gcc/Solaris-2-Options.html
29+
add_link_options(-mimpure-text)
30+
endif()
31+
32+
add_library(example SHARED example.cpp)
33+
target_link_libraries(example PRIVATE ${JNI_LIBRARIES})

0 commit comments

Comments
 (0)