3.0 KiB
3.0 KiB
Building Yoga native lib for Java
Instruction how to build Yoga native lib on local MacOs/Linux machine.
Prerequisites
Required tools:
- ninja
- cmake
- g++
Steps
-
Modify
cmake/project-defaults.cmake
file by commenting out-Werror
:diff --git a/cmake/project-defaults.cmake b/cmake/project-defaults.cmake index 987529c..c28d542 100644 --- a/cmake/project-defaults.cmake +++ b/cmake/project-defaults.cmake @@ -33,7 +33,7 @@ add_compile_options( -fexceptions # Enable warnings and warnings as errors -Wall - -Werror + #-Werror # Disable RTTI $<$<COMPILE_LANGUAGE:CXX>:-fno-rtti> # Use -O2 (prioritize speed)
-
Modify
java/CMakeLists.txt
file:diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index d8afd67..185a6fb 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -5,8 +5,13 @@ cmake_minimum_required(VERSION 3.13...3.26) project(yogajni) +find_package(JNI REQUIRED) +include_directories(${JNI_INCLUDE_DIRS}) set(CMAKE_VERBOSE_MAKEFILE on) +set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_SOURCE_DIR}) +message(CMAKE_CURRENT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}") + set(YOGA_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/..) include(${YOGA_ROOT}/cmake/project-defaults.cmake) @@ -18,5 +23,9 @@ file(GLOB VERSION_SCRIPT CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/yogajni.version) add_library(yoga SHARED ${SOURCES}) + +# TODO export lib with .so extension on MacOS with Apple Silicon +#set_target_properties(yoga PROPERTIES SUFFIX ".so") + target_link_libraries(yoga yogacore) -target_link_options(yoga PRIVATE -Wl,--version-script=${VERSION_SCRIPT}) +target_link_options(yoga PRIVATE "-Wl")
-
Create a
./build_java
build file.#!/bin/sh # Copyright (c) Meta Platforms, Inc. and affiliates. # # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. cd "$(dirname "$0")/java" rm -rf build if [ "$#" -eq 0 ]; then build_type="Debug" else build_type="$1" fi if which ninja; then set -e cmake -B build -S . -D CMAKE_OSX_ARCHITECTURES=arm64 -D CMAKE_BUILD_TYPE="$build_type" -G Ninja else set -e cmake -B build -S . -D CMAKE_BUILD_TYPE="$build_type" fi cmake --build build find . \( -name "*.so" -o -name "*.dylib" \)
-
Run
./build_java
from the terminal.MacOS systems will create a
.dylib
, whereas Linux an.so
version of the library. There's possiblity to build yoga lib for two architectures (only for MacOs), just updateCMAKE_OSX_ARCHITECTURES
flag to:CMAKE_OSX_ARCHITECTURES:STRING="x86_64;arm64"
. -
Artifact location will be printed in output. Output may contain several warnings - which are a non-issue. If there's a library location printed out at the end, the build was successful.