summaryrefslogtreecommitdiff
path: root/wrappers/java-android/lib/CMakeLists.txt
blob: 9bea062eb47bafb45cc8059a132bb4e8af180131 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
cmake_minimum_required(VERSION 3.18.1)
project(eduvpn_common)

set(CMAKE_VERBOSE_MAKEFILE on)

# Android -> Go architecture map
set(arch_map_x86	386)
set(arch_map_x86_64	amd64)
set(arch_map_arm	arm)
set(arch_map_arm64	arm64)

set(GOARCH ${arch_map_${ANDROID_ARCH_NAME}})

find_program(MAKE_EXECUTABLE
	NAMES gmake mingw32-make make
	NAMES_PER_DIR
	DOC "GNU Make"
	REQUIRED
)

# Inspired by https://github.com/WireGuard/wireguard-android/blob/1.0.20211029/tunnel/tools/CMakeLists.txt

# --target has to be specified to compiler & linker as e.g. ANDROID_C_COMPILER may just be 'clang' without prefixes
# CGO_CPPFLAGS are concatenated to CGO_CFLAGS and CGO_CXXFLAGS
add_custom_target(shared-lib
	WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../../exports"
	COMMENT "Building shared library for ${ANDROID_LLVM_TRIPLE}"
 	VERBATIM
	COMMAND ${MAKE_EXECUTABLE}
		GOOS=android GOARCH=${GOARCH}
		CC=${ANDROID_C_COMPILER} CXX=${ANDROID_CXX_COMPILER}
		CGO_CPPFLAGS=--target=${ANDROID_LLVM_TRIPLE} CGO_CFLAGS=${CMAKE_C_FLAGS} CGO_CXXFLAGS=${CMAKE_CXX_FLAGS}
		CGO_LDFLAGS=${CMAKE_SHARED_LINKER_FLAGS}\ --target=${ANDROID_LLVM_TRIPLE}
		COPY_LIB_TO=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
)

# Note about COPY_LIB_TO: this is an easy cross-platform alternative to calling `cp`
# file(COPY ...) does not work since it runs at the configure stage...