Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update emsdk/build for recastjs #225

Merged
merged 1 commit into from Sep 1, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
117 changes: 106 additions & 11 deletions recastjs/CMakeLists.txt
@@ -1,13 +1,19 @@
cmake_minimum_required (VERSION 3.6)
project (recastjs)
# Add project's cmake modules to path
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/.)

SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)

set(CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo" CACHE STRING "Configuration types" FORCE)
FIND_PACKAGE(Python3)
set(PYTHON ${Python3_EXECUTABLE} CACHE STRING "Python path")
set(EMSCRIPTEN_ROOT $ENV{EMSDK}/upstream/emscripten CACHE STRING "Emscripten path")
set(CMAKE_TOOLCHAIN_FILE ${EMSCRIPTEN_ROOT}/cmake/Modules/Platform/Emscripten.cmake)
set(WEBIDL_BINDER_SCRIPT ${EMSCRIPTEN_ROOT}/tools/webidl_binder.py)
set(RECAST_IDL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/recast.idl)
set(RECASTAPI_HEADER_FILE ${CMAKE_CURRENT_SOURCE_DIR}/src/recastjs.h)
set(RECAST_HEADER_FILE ${CMAKE_CURRENT_SOURCE_DIR}/recastnavigation/Recast/Include/Recast.h)
set(NAVMESHQUERY_HEADER_FILE ${CMAKE_CURRENT_SOURCE_DIR}/recastnavigation/Detour/Include/DetourNavMeshQuery.h)
set(RECAST_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/)
set(RECAST_ONLOAD_FILE ${CMAKE_CURRENT_SOURCE_DIR}/onload.js)

SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake")
project (recastjs)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Expand Down Expand Up @@ -55,9 +61,98 @@ include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/recastnavigation/RecastDemo/Include
)


SET(LINK_OPTIONS " ")
SET(EXE_NAME "recastjs")
SET(EXE_NAME "recast")

ADD_LIBRARY(${EXE_NAME} ${SRC_FILES} ${RECASTDETOUR_FILES})

# Build Release by default
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build Type")

# Default is 64*1024*1024 = 64MB
set(TOTAL_MEMORY 67108864 CACHE STRING "Total Memory")

# Enable for resizable heap, with some amount of slowness
set(ALLOW_MEMORY_GROWTH 0 CACHE STRING "Allow Memory Growth")

set(EMCC_ARGS
-flto
--post-js glue.js
--post-js ${RECAST_ONLOAD_FILE}
-O3
-s ALLOW_MEMORY_GROWTH=${ALLOW_MEMORY_GROWTH}
-s ALLOW_TABLE_GROWTH=1
-s EXPORTED_FUNCTIONS=["_malloc","_free"]
-s EXPORTED_RUNTIME_METHODS=["UTF8ToString"]
-s EXTRA_EXPORTED_RUNTIME_METHODS=["addFunction"]
-s EXPORT_NAME="Recast"
-s MODULARIZE=1
-s NO_EXIT_RUNTIME=1
-s NO_FILESYSTEM=1
-s TOTAL_MEMORY=${TOTAL_MEMORY})

if(${CLOSURE})
# Ignore closure errors about the bullet Node class
# (Node is a DOM thing too)
LIST(APPEND EMCC_ARGS
--closure 1
-s IGNORE_CLOSURE_COMPILER_ERRORS=1)
else()
LIST(APPEND EMCC_ARGS
-s NO_DYNAMIC_EXECUTION=1)
endif()

set(EMCC_JS_ARGS ${EMCC_ARGS}
-s AGGRESSIVE_VARIABLE_ELIMINATION=1
-s ELIMINATE_DUPLICATE_FUNCTIONS=1
-s LEGACY_VM_SUPPORT=1
-s SINGLE_FILE=1
-s WASM=0)

set(EMCC_WASM_ARGS ${EMCC_ARGS}
-s BINARYEN_IGNORE_IMPLICIT_TRAPS=1
-s WASM=1)

set(EMCC_GLUE_ARGS
-c
-I${RECAST_SRC_DIR}
-I${CMAKE_CURRENT_SOURCE_DIR}/recastnavigation/Detour/Include
-I${CMAKE_CURRENT_SOURCE_DIR}/recastnavigation/Recast/Include
-include${RECASTAPI_HEADER_FILE}
-include${RECAST_HEADER_FILE}
-include${NAVMESHQUERY_HEADER_FILE}
)

#######################################
add_custom_command(
OUTPUT glue.cpp glue.js
BYPRODUCTS parser.out WebIDLGrammar.pkl
COMMAND ${PYTHON} ${WEBIDL_BINDER_SCRIPT} ${RECAST_IDL_FILE} glue
DEPENDS ${RECAST_IDL_FILE}
COMMENT "Generating ${EXE_NAME} bindings"
VERBATIM)
add_custom_command(
OUTPUT glue.o
COMMAND emcc glue.cpp ${EMCC_GLUE_ARGS} -o glue.o
DEPENDS glue.cpp ${RECASTAPI_HEADER_FILE} ${RECAST_HEADER_FILE} ${NAVMESHQUERY_HEADER_FILE}
COMMENT "Building ${EXE_NAME} bindings"
VERBATIM)
add_custom_target(${EXE_NAME}-bindings ALL DEPENDS glue.js glue.o)

#######################################
add_custom_command(
OUTPUT ${EXE_NAME}.js
COMMAND emcc glue.o lib${EXE_NAME}.a ${EMCC_JS_ARGS} -o ${EXE_NAME}.js
DEPENDS ${EXE_NAME}-bindings ${EXE_NAME} ${RECAST_ONLOAD_FILE}
COMMENT "Building ${EXE_NAME} javascript"
VERBATIM)
add_custom_target(${EXE_NAME}-javascript ALL DEPENDS ${EXE_NAME}.js)

#######################################
add_custom_command(
OUTPUT ${EXE_NAME}.wasm.js ${EXE_NAME}.wasm.wasm
COMMAND emcc glue.o lib${EXE_NAME}.a ${EMCC_WASM_ARGS} -o ${EXE_NAME}.wasm.js
DEPENDS ${EXE_NAME}-bindings ${EXE_NAME} ${RECAST_ONLOAD_FILE}
COMMENT "Building ${EXE_NAME} webassembly"
VERBATIM)
add_custom_target(${EXE_NAME}-wasm ALL DEPENDS ${EXE_NAME}.wasm.js ${EXE_NAME}.wasm.wasm)

9 changes: 0 additions & 9 deletions recastjs/bundle.py

This file was deleted.

140 changes: 0 additions & 140 deletions recastjs/make.py

This file was deleted.

1 change: 1 addition & 0 deletions recastjs/onload.js
@@ -0,0 +1 @@
this['Recast'] = Module;
16 changes: 8 additions & 8 deletions recastjs/readme.md
Expand Up @@ -17,16 +17,16 @@ Some documentation is available here : http://masagroup.github.io/recastdetour/i
First, update the Git Submodule using `git submodule update --init` in the recastjs folder.
You'll need emscripten with an active environment and mingw32-make for Windows (make for Linux).

The build script can generate JS or WASM.
to generate JS:
```
mkdir build
emcmake cmake -B build
cmake --build build
```

`python make.py`
This will produce .js and wasm version in the `build` directory.

to generate WASM:

`python make.py wasm`

The build output will be in the build directory.
Latest RecastNavigation commit : https://github.com/recastnavigation/recastnavigation/commit/c5cbd53024c8a9d8d097a4371215e3342d2fdc87
Built with emsdk 2.0.29

## How to extend recastjs ?

Expand Down