Add filamat-jni to CMake and build.sh (#740)
This commit is contained in:
@@ -236,6 +236,14 @@ if (FILAMENT_SUPPORTS_METAL)
|
||||
add_definitions(-DFILAMENT_SUPPORTS_METAL)
|
||||
endif()
|
||||
|
||||
# Building filamat increases build times and isn't required for non-desktop platforms, so turn it
|
||||
# off by default.
|
||||
if (NOT ANDROID AND NOT WEBGL AND NOT IOS)
|
||||
option(FILAMENT_BUILD_FILAMAT "Build filamat and JNI buildings" ON)
|
||||
else()
|
||||
option(FILAMENT_BUILD_FILAMAT "Build filamat and JNI buildings" OFF)
|
||||
endif()
|
||||
|
||||
# ==================================================================================================
|
||||
# Distribution
|
||||
# ==================================================================================================
|
||||
@@ -323,6 +331,7 @@ endfunction()
|
||||
# ==================================================================================================
|
||||
# Sub-projects
|
||||
# ==================================================================================================
|
||||
|
||||
# Common to all platforms
|
||||
add_subdirectory(${EXTERNAL}/libgtest/tnt)
|
||||
add_subdirectory(${LIBRARIES}/filabridge)
|
||||
@@ -338,6 +347,16 @@ add_subdirectory(${EXTERNAL}/smol-v/tnt)
|
||||
add_subdirectory(${EXTERNAL}/benchmark/tnt)
|
||||
add_subdirectory(${EXTERNAL}/meshoptimizer)
|
||||
|
||||
if (FILAMENT_BUILD_FILAMAT)
|
||||
# spirv-tools must come before filamat, as filamat relies on the presence of the
|
||||
# spirv-tools_SOURCE_DIR variable.
|
||||
add_subdirectory(${EXTERNAL}/spirv-tools)
|
||||
add_subdirectory(${EXTERNAL}/glslang/tnt)
|
||||
add_subdirectory(${EXTERNAL}/spirv-cross/tnt)
|
||||
add_subdirectory(android/filamat-android)
|
||||
add_subdirectory(${LIBRARIES}/filamat)
|
||||
endif()
|
||||
|
||||
if (FILAMENT_SUPPORTS_VULKAN)
|
||||
add_subdirectory(${LIBRARIES}/bluevk)
|
||||
add_subdirectory(${EXTERNAL}/vkmemalloc/tnt)
|
||||
@@ -359,15 +378,8 @@ if (WEBGL)
|
||||
endif()
|
||||
|
||||
if (NOT ANDROID AND NOT WEBGL AND NOT IOS)
|
||||
# spirv-tools must come before filamat, as filamat relies on the presence of the
|
||||
# spirv-tools_SOURCE_DIR variable.
|
||||
add_subdirectory(${EXTERNAL}/spirv-tools)
|
||||
add_subdirectory(${EXTERNAL}/glslang/tnt)
|
||||
add_subdirectory(${EXTERNAL}/spirv-cross/tnt)
|
||||
|
||||
add_subdirectory(${LIBRARIES}/bluegl)
|
||||
add_subdirectory(${LIBRARIES}/filagui)
|
||||
add_subdirectory(${LIBRARIES}/filamat)
|
||||
add_subdirectory(${LIBRARIES}/imageio)
|
||||
|
||||
add_subdirectory(${FILAMENT}/java)
|
||||
|
||||
95
android/filamat-android/CMakeLists.txt
Normal file
95
android/filamat-android/CMakeLists.txt
Normal file
@@ -0,0 +1,95 @@
|
||||
cmake_minimum_required(VERSION 3.4.1)
|
||||
project(filamat-java)
|
||||
|
||||
if (NOT ENABLE_JAVA)
|
||||
return()
|
||||
endif()
|
||||
|
||||
find_package(Java)
|
||||
if (NOT Java_FOUND)
|
||||
message(WARNING "JDK not found, skipping Java projects")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Android already has the JNI headers in its system include path.
|
||||
if (NOT ANDROID)
|
||||
find_package(JNI)
|
||||
if (NOT JNI_FOUND)
|
||||
message(WARNING "JNI not found, skipping Java projects")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (NOT DEFINED ENV{JAVA_HOME})
|
||||
message(WARNING "The JAVA_HOME environment variable must be set to compile Java projects")
|
||||
message(WARNING "Skipping Java projects")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# ==================================================================================================
|
||||
# JNI bindings
|
||||
# ==================================================================================================
|
||||
set(TARGET filamat-jni)
|
||||
|
||||
set(JNI_SOURCE_FILES
|
||||
src/main/cpp/MaterialBuilder.cpp)
|
||||
|
||||
add_library(${TARGET} SHARED ${JNI_SOURCE_FILES})
|
||||
|
||||
target_include_directories(${TARGET} PRIVATE ${JNI_INCLUDE_DIRS})
|
||||
|
||||
set(EXPORTED_SYMBOLS)
|
||||
if (APPLE)
|
||||
set(EXPORTED_SYMBOLS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/libfilamat-jni.symbols")
|
||||
elseif (ANDROID)
|
||||
set(EXPORTED_SYMBOLS "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libfilamat-jni.map")
|
||||
endif()
|
||||
|
||||
# This is necessary to avoid a CMake error due to setting RPATH on non-elf platforms.
|
||||
# Setting this also causes CMake to issue a warning on Mac:
|
||||
# "Policy CMP0068 is not set: RPATH settings on macOS do not affect install_name." which can be
|
||||
# safely ignored.
|
||||
set(CMAKE_SKIP_RPATH TRUE)
|
||||
|
||||
set_target_properties(${TARGET} PROPERTIES
|
||||
CXX_STANDARD 14
|
||||
COMPILE_FLAGS "-fno-exceptions -fvisibility=hidden"
|
||||
LINK_FLAGS "${GC_SECTIONS} ${EXPORTED_SYMBOLS}")
|
||||
|
||||
target_compile_options(${TARGET} PRIVATE
|
||||
$<$<PLATFORM_ID:Linux>:-fPIC>
|
||||
)
|
||||
|
||||
target_link_libraries(${TARGET} filamat)
|
||||
|
||||
set(INSTALL_TYPE LIBRARY)
|
||||
if (WIN32 OR CYGWIN)
|
||||
set(INSTALL_TYPE RUNTIME)
|
||||
endif()
|
||||
install(TARGETS ${TARGET} ${INSTALL_TYPE} DESTINATION lib/${DIST_DIR})
|
||||
install(CODE "execute_process(COMMAND ${CMAKE_STRIP} -x ${CMAKE_INSTALL_PREFIX}/lib/${DIST_DIR}/lib${TARGET}${CMAKE_SHARED_LIBRARY_SUFFIX})")
|
||||
|
||||
# ==================================================================================================
|
||||
# Java APIs
|
||||
# ==================================================================================================
|
||||
|
||||
# Android builds its Java bindings for filamat through Gradle.
|
||||
if (ANDROID)
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(TARGET filamat-java)
|
||||
|
||||
include(UseJava)
|
||||
|
||||
set(CMAKE_JAVA_COMPILE_FLAGS "-source" "1.8" "-target" "1.8")
|
||||
|
||||
set(JAVA_SOURCE_FILES
|
||||
src/main/java/com/google/android/filament/filamat/MaterialBuilder.java
|
||||
src/main/java/com/google/android/filament/filamat/MaterialPackage.java)
|
||||
|
||||
add_jar(${TARGET}
|
||||
SOURCES ${JAVA_SOURCE_FILES}
|
||||
INCLUDE_JARS ../../java/lib/support-annotations.jar)
|
||||
|
||||
install_jar(${TARGET} lib)
|
||||
4
android/filamat-android/libfilamat-jni.map
Normal file
4
android/filamat-android/libfilamat-jni.map
Normal file
@@ -0,0 +1,4 @@
|
||||
LIBFILAMAT {
|
||||
global: Java_com_google_android_filament_*; JNI*;
|
||||
local: *;
|
||||
};
|
||||
1
android/filamat-android/libfilamat-jni.symbols
Normal file
1
android/filamat-android/libfilamat-jni.symbols
Normal file
@@ -0,0 +1 @@
|
||||
_Java_com_google_android_filament_*
|
||||
41
build.sh
41
build.sh
@@ -41,6 +41,8 @@ function print_help {
|
||||
echo " Add Vulkan support to the Android build."
|
||||
echo " -s"
|
||||
echo " Add iOS simulator support to the iOS build."
|
||||
echo " -l"
|
||||
echo " Add filamat support to the Android build."
|
||||
echo ""
|
||||
echo "Build types:"
|
||||
echo " release"
|
||||
@@ -100,6 +102,9 @@ GENERATE_TOOLCHAINS=false
|
||||
|
||||
VULKAN_ANDROID_OPTION="-DFILAMENT_SUPPORTS_VULKAN=OFF"
|
||||
|
||||
BUILD_FILAMAT_ANDROID=false
|
||||
FILAMAT_ANDROID_OPTION="-DFILAMENT_BUILD_FILAMAT=OFF"
|
||||
|
||||
IOS_BUILD_SIMULATOR=false
|
||||
|
||||
BUILD_GENERATOR=Ninja
|
||||
@@ -298,6 +303,7 @@ function build_android_target {
|
||||
-DCMAKE_INSTALL_PREFIX=../android-${LC_TARGET}/filament \
|
||||
-DCMAKE_TOOLCHAIN_FILE=../../build/toolchain-${ARCH}-linux-android.cmake \
|
||||
$VULKAN_ANDROID_OPTION \
|
||||
$FILAMAT_ANDROID_OPTION \
|
||||
../..
|
||||
fi
|
||||
|
||||
@@ -382,6 +388,33 @@ function build_android {
|
||||
fi
|
||||
|
||||
cd ../..
|
||||
|
||||
|
||||
if [ "$BUILD_FILAMAT_ANDROID" == "true" ]; then
|
||||
|
||||
cd android/filamat-android
|
||||
|
||||
if [ "$ISSUE_DEBUG_BUILD" == "true" ]; then
|
||||
./gradlew -Pfilament_dist_dir=../../out/android-debug/filament assembleDebug
|
||||
|
||||
if [ "$INSTALL_COMMAND" ]; then
|
||||
echo "Installing out/filamat-android-debug.aar..."
|
||||
cp build/outputs/aar/filamat-android-debug.aar ../../out/
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$ISSUE_RELEASE_BUILD" == "true" ]; then
|
||||
./gradlew -Pfilament_dist_dir=../../out/android-release/filament assembleRelease
|
||||
|
||||
if [ "$INSTALL_COMMAND" ]; then
|
||||
echo "Installing out/filamat-android-release.aar..."
|
||||
cp build/outputs/aar/filamat-android-release.aar ../../out/
|
||||
fi
|
||||
fi
|
||||
|
||||
cd ../..
|
||||
|
||||
fi
|
||||
}
|
||||
|
||||
function ensure_ios_toolchain {
|
||||
@@ -545,7 +578,7 @@ function run_tests {
|
||||
|
||||
pushd `dirname $0` > /dev/null
|
||||
|
||||
while getopts ":hacfijmp:tuvs" opt; do
|
||||
while getopts ":hacfijmp:tuvsl" opt; do
|
||||
case ${opt} in
|
||||
h)
|
||||
print_help
|
||||
@@ -615,6 +648,12 @@ while getopts ":hacfijmp:tuvs" opt; do
|
||||
echo "Also be sure to pass Engine.Backend.VULKAN to Engine.create."
|
||||
echo ""
|
||||
;;
|
||||
l)
|
||||
FILAMAT_ANDROID_OPTION="-DFILAMENT_BUILD_FILAMAT=ON"
|
||||
BUILD_FILAMAT_ANDROID=true
|
||||
echo "Building filamat JNI library for Android."
|
||||
echo ""
|
||||
;;
|
||||
s)
|
||||
IOS_BUILD_SIMULATOR=true
|
||||
echo "iOS simulator support enabled."
|
||||
|
||||
1
third_party/spirv-cross/tnt/CMakeLists.txt
vendored
1
third_party/spirv-cross/tnt/CMakeLists.txt
vendored
@@ -65,6 +65,7 @@ macro(spirv_cross_add_library name config_name)
|
||||
target_compile_options(${name} PRIVATE ${spirv-compiler-options})
|
||||
target_compile_definitions(${name} PRIVATE ${spirv-compiler-defines})
|
||||
target_compile_definitions(${name} PUBLIC ${spirv-compiler-public-defines})
|
||||
target_compile_options(${name} PRIVATE $<$<PLATFORM_ID:Linux>:-fPIC>)
|
||||
endmacro()
|
||||
|
||||
spirv_cross_add_library(spirv-cross-core spirv_cross_core STATIC
|
||||
|
||||
Reference in New Issue
Block a user