Skip to content

Commit

Permalink
Remove unsupported build options for Web platform.
Browse files Browse the repository at this point in the history
  • Loading branch information
weitjong committed Jan 12, 2020
1 parent b5f1256 commit dabfdbd
Show file tree
Hide file tree
Showing 9 changed files with 39 additions and 109 deletions.
11 changes: 5 additions & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -335,22 +335,21 @@ env:
- secure: ecj/PwpbHkH9AYFsc2TMeRuNm5E3xMM8A0x4AcGhzpwDuZWdFx3R1T4G9u45Z5aUyTJWGqOeX1JPaEVVFZuYnNBKRy0kmiUrM9EE0j7WsT57K48tP1ysn2ynyvHgbYkKOfYR0t8XAMWTBbulT9DVVk3DS69//2WgiXGDVUEJTyI=
- numjobs=4
- WEB=1
- EMSCRIPTEN_SHARE_DATA=1
- HOT=/home/travis/urho3d_home_dir/.ccache/.hot
matrix:
- URHO3D_LIB_TYPE=MODULE
- URHO3D_LIB_TYPE=STATIC
- URHO3D_LIB_TYPE=SHARED
- EMSCRIPTEN_SHARE_DATA=1
- EMSCRIPTEN_SHARE_DATA=0
stage: release build configuration
before_script:
- rake ci_timer
- export TRAVIS_COMMIT=$TRAVIS_COMMIT~
- export COMMIT_MESSAGE=$(git log --format=%B -n 1 $TRAVIS_COMMIT)
- export TAG=$(git describe --exact-match $TRAVIS_COMMIT 2>/dev/null); if [[ $TAG =~ [[:digit:]]+\.[[:digit:]]+ ]]; then export RELEASE_TAG=$TAG; fi
- if [[ $RELEASE_TAG ]] || (! [[ $TRAVIS_BRANCH =~ [^-]+-[^-]+-CI ]] && echo $COMMIT_MESSAGE |grep -cq '\[ci package\]'); then export PACKAGE_UPLOAD=1; fi
- if [[ "$URHO3D_LIB_TYPE" != "MODULE" ]] && (echo $COMMIT_MESSAGE |grep -cq '\[cache clear\]' || [[ ! -e $HOT ]]); then export URHO3D_SAMPLES=0; else export URHO3D_SAMPLES=1; fi; touch $HOT
- if echo $COMMIT_MESSAGE |grep -cq '\[cache clear\]' || [[ ! -e $HOT ]]; then export URHO3D_SAMPLES=0; else export URHO3D_SAMPLES=1; fi; touch $HOT
- if [[ $URHO3D_SAMPLES = 1 ]] && [[ "$TRAVIS_BRANCH" == "Web-CI" ]] && [[ "$TRAVIS_PULL_REQUEST" == "false" ]]; then export SAMPLE_UPLOAD=1; fi
- rake ci_setup_cache
script: script/dockerized.sh web rake ci && if [ $PACKAGE_UPLOAD ]; then script/dockerized.sh web rake ci_package_upload; fi && if [[ "$TRAVIS_BRANCH" == "Web-CI" ]] && [[ ! $EMSCRIPTEN_WASM ]] && [[ "$TRAVIS_PULL_REQUEST" == "false" ]] && [[ "$URHO3D_LIB_TYPE" == "SHARED" ]] && [[ ! $URHO3D_SAMPLES ]]; then script/dockerized.sh web rake ci_emscripten_samples_update; fi && rake ci_timer
script: script/dockerized.sh web rake ci && if [[ $EMSCRIPTEN_SHARE_DATA = 1 ]]; then if [[ $PACKAGE_UPLOAD ]]; then script/dockerized.sh web rake ci_package_upload; fi && if [[ $SAMPLE_UPLOAD ]]; then script/dockerized.sh web rake ci_emscripten_samples_update; fi; fi && rake ci_timer
matrix:
fast_finish: true
include: [stage: housekeep]
Expand Down
15 changes: 1 addition & 14 deletions CMake/Modules/FindUrho3D.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,6 @@ else ()
if (NOT CMAKE_FIND_LIBRARY_SUFFIXES MATCHES ^\\.\(a|lib\))
list (REVERSE CMAKE_FIND_LIBRARY_SUFFIXES)
endif ()
# Cater for the shared library extension in Emscripten build which is ".bc" instead of ".so", and also cater for the module library extension
if (EMSCRIPTEN)
string (REPLACE .so .bc CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_FIND_LIBRARY_SUFFIXES};.js") # Stringify for string replacement
endif ()
# If library type is specified then only search for the requested library type
if (NOT MSVC AND URHO3D_LIB_TYPE) # MSVC static lib and import lib have a same extension, so cannot use it for searches
if (URHO3D_LIB_TYPE STREQUAL STATIC)
Expand All @@ -116,13 +112,9 @@ else ()
set (CMAKE_FIND_LIBRARY_SUFFIXES .dll.a)
elseif (APPLE)
set (CMAKE_FIND_LIBRARY_SUFFIXES .dylib)
elseif (EMSCRIPTEN)
set (CMAKE_FIND_LIBRARY_SUFFIXES .bc)
else ()
set (CMAKE_FIND_LIBRARY_SUFFIXES .so)
endif ()
elseif (URHO3D_LIB_TYPE STREQUAL MODULE AND EMSCRIPTEN)
set (CMAKE_FIND_LIBRARY_SUFFIXES .js)
else ()
message (FATAL_ERROR "Library type: '${URHO3D_LIB_TYPE}' is not supported")
endif ()
Expand Down Expand Up @@ -200,11 +192,7 @@ else ()
# For Non-MSVC compiler the static define is not baked into the export header file so we need to define it for the try_compile below
set (COMPILER_STATIC_DEFINE COMPILE_DEFINITIONS -DURHO3D_STATIC_DEFINE)
else ()
if (EXT STREQUAL .js)
set (URHO3D_LIB_TYPE MODULE)
else ()
set (URHO3D_LIB_TYPE SHARED)
endif ()
set (URHO3D_LIB_TYPE SHARED)
unset (COMPILER_STATIC_DEFINE)
endif ()
endif ()
Expand Down Expand Up @@ -240,7 +228,6 @@ else ()
endif ()
set (COMPILER_FLAGS "${COMPILER_32BIT_FLAG} ${CMAKE_REQUIRED_FLAGS}")
if (SKIP_COMPILE_TEST
OR URHO3D_LIB_TYPE STREQUAL MODULE # Module library type cannot be test linked so just assume it is a valid Urho3D module for now
OR CMAKE_PROJECT_NAME STREQUAL Urho3D-Launcher) # Workaround initial IDE "gradle sync" error due to library has not been built yet
set (URHO3D_COMPILE_RESULT 1)
else ()
Expand Down
92 changes: 23 additions & 69 deletions CMake/Modules/UrhoCommon.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ if (RPI)
link_directories (${VIDEOCORE_LIBRARY_DIRS})
endif ()
if (CMAKE_PROJECT_NAME STREQUAL Urho3D)
set (URHO3D_LIB_TYPE STATIC CACHE STRING "Specify Urho3D library type, possible values are STATIC (default), SHARED, and MODULE; the last value is available for Emscripten only")
set (URHO3D_LIB_TYPE STATIC CACHE STRING "Specify Urho3D library type, possible values are STATIC (default) and SHARED (not available for Emscripten)")
# Non-Windows platforms always use OpenGL, the URHO3D_OPENGL variable will always be forced to TRUE, i.e. it is not an option at all
# Windows platform has URHO3D_OPENGL as an option, MSVC compiler default to FALSE (i.e. prefers Direct3D) while MinGW compiler default to TRUE
if (MINGW)
Expand Down Expand Up @@ -232,7 +232,7 @@ if (CMAKE_PROJECT_NAME STREQUAL Urho3D)
set_property (GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS ${URHO3D_64BIT})
endif ()
else ()
set (URHO3D_LIB_TYPE "" CACHE STRING "Specify Urho3D library type, possible values are STATIC (default), SHARED, and MODULE; the last value is available for Emscripten only")
set (URHO3D_LIB_TYPE "" CACHE STRING "Specify Urho3D library type, possible values are STATIC (default) and SHARED (not available for Emscripten)")
set (URHO3D_HOME "" CACHE PATH "Path to Urho3D build tree or SDK installation location (downstream project only)")
if (URHO3D_PCH OR URHO3D_UPDATE_SOURCE_TREE OR URHO3D_SAMPLES OR URHO3D_TOOLS)
# Just reference it to suppress "unused variable" CMake warning on downstream projects using this CMake module
Expand Down Expand Up @@ -329,24 +329,18 @@ if (RPI)
set (RPI_ABI ${RPI_ABI} CACHE STRING "Specify target ABI (RPI platform only), possible values are armeabi-v6 (default for RPI 1), armeabi-v7a (default for RPI 2), armeabi-v7a with NEON, and armeabi-v7a with VFPV4" FORCE)
endif ()
if (EMSCRIPTEN) # CMAKE_CROSSCOMPILING is always true for Emscripten
set (MODULE MODULE)
set (EMSCRIPTEN_ROOT_PATH "" CACHE PATH "Root path to Emscripten cross-compiler tools (Emscripten only)")
set (EMSCRIPTEN_SYSROOT "" CACHE PATH "Path to Emscripten system root (Emscripten only)")
option (EMSCRIPTEN_AUTO_SHELL "Auto adding a default HTML shell-file when it is not explicitly specified (Emscripten only)" TRUE)
cmake_dependent_option (EMSCRIPTEN_WASM "Enable Binaryen support to generate output to WASM (WebAssembly) format (Emscripten only)" TRUE "NOT EMSCRIPTEN_EMCC_VERSION VERSION_LESS 1.37.3" FALSE)
# Currently Emscripten does not support memory growth with MODULE library type
if (URHO3D_LIB_TYPE STREQUAL MODULE)
set (DEFAULT_MEMORY_GROWTH FALSE)
else ()
set (DEFAULT_MEMORY_GROWTH TRUE)
endif ()
cmake_dependent_option (EMSCRIPTEN_ALLOW_MEMORY_GROWTH "Enable memory growing based on application demand when targeting asm.js, it is not set by default due to performance penalty (Emscripten with STATIC or SHARED library type only)" FALSE "NOT EMSCRIPTEN_WASM AND NOT URHO3D_LIB_TYPE STREQUAL MODULE" ${DEFAULT_MEMORY_GROWTH}) # Allow memory growth by default when targeting WebAssembly since there is no performance penalty as in asm.js mode
option (EMSCRIPTEN_ALLOW_MEMORY_GROWTH "Enable memory growing based on application demand, default to true as there should be little or no overhead (Emscripten only)" TRUE)
math (EXPR EMSCRIPTEN_TOTAL_MEMORY "128 * 1024 * 1024")
set (EMSCRIPTEN_TOTAL_MEMORY ${EMSCRIPTEN_TOTAL_MEMORY} CACHE STRING "Specify the total size of memory to be used (Emscripten only); default to 128 MB, must be in multiple of 64 KB when targeting WebAssembly and in multiple of 16 MB when targeting asm.js")
cmake_dependent_option (EMSCRIPTEN_SHARE_DATA "Enable sharing data file support (Emscripten only)" FALSE "NOT URHO3D_LIB_TYPE STREQUAL MODULE" TRUE)
set (EMSCRIPTEN_TOTAL_MEMORY ${EMSCRIPTEN_TOTAL_MEMORY} CACHE STRING "Specify the total size of memory to be used (Emscripten only); default to 128 MB, must be in multiple of 64 KB")
option (EMSCRIPTEN_SHARE_DATA "Enable sharing data file support (Emscripten only)")
else ()
set (SHARED SHARED)
endif ()
# Constrain the build option values in cmake-gui, if applicable
set_property (CACHE URHO3D_LIB_TYPE PROPERTY STRINGS STATIC SHARED ${MODULE})
set_property (CACHE URHO3D_LIB_TYPE PROPERTY STRINGS STATIC ${SHARED})
if (NOT CMAKE_CONFIGURATION_TYPES)
set_property (CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS ${URHO3D_BUILD_CONFIGURATIONS})
endif ()
Expand All @@ -369,6 +363,10 @@ if (URHO3D_LUAJIT)
set (JIT JIT)
set (URHO3D_LUA 1)
endif ()
if (EMSCRIPTEN)
set (URHO3D_LIB_TYPE STATIC)
unset (URHO3D_LIB_TYPE CACHE)
endif ()

# Union all the sysroot variables into one so it can be referred to generically later
set (SYSROOT ${CMAKE_SYSROOT} ${MINGW_SYSROOT} ${IOS_SYSROOT} ${TVOS_SYSROOT} CACHE INTERNAL "Path to system root of the cross-compiling target") # SYSROOT is empty for native build
Expand Down Expand Up @@ -419,7 +417,7 @@ endif ()
if (URHO3D_LIB_TYPE)
string (TOUPPER ${URHO3D_LIB_TYPE} URHO3D_LIB_TYPE)
endif ()
if (NOT URHO3D_LIB_TYPE STREQUAL SHARED AND NOT URHO3D_LIB_TYPE STREQUAL MODULE)
if (NOT URHO3D_LIB_TYPE STREQUAL SHARED)
set (URHO3D_LIB_TYPE STATIC)
if (MSVC)
# This define will be baked into the export header for MSVC compiler
Expand Down Expand Up @@ -678,24 +676,15 @@ else ()
endif ()
# Since version 1.37.25 emcc reduces default runtime exports, but we need "Pointer_stringify" so it needs to be explicitly declared now
# (See https://github.com/kripken/emscripten/commit/3bc1f9f08b9f420680124af703c787244468cedc for more detail)
if (NOT EMSCRIPTEN_EMCC_VERSION VERSION_LESS 1.37.25)
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s EXTRA_EXPORTED_RUNTIME_METHODS=\"['Pointer_stringify']\"")
set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -s EXTRA_EXPORTED_RUNTIME_METHODS=\"['Pointer_stringify']\"")
endif ()
# Since version 1.37.28 emcc reduces default runtime exports, but we need "FS" so it needs to be explicitly requested now
# (See https://github.com/kripken/emscripten/commit/f2191c1223e8261bf45f4e27d2ba4d2e9d8b3341 for more detail)
if (NOT EMSCRIPTEN_EMCC_VERSION VERSION_LESS 1.37.28)
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s FORCE_FILESYSTEM=1")
set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -s FORCE_FILESYSTEM=1")
endif ()
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s EXTRA_EXPORTED_RUNTIME_METHODS=\"['Pointer_stringify']\" -s FORCE_FILESYSTEM=1")
set (CMAKE_C_FLAGS_RELEASE "-Oz -DNDEBUG")
set (CMAKE_CXX_FLAGS_RELEASE "-Oz -DNDEBUG")
# Remove variables to make the -O3 regalloc easier, embed data in asm.js to reduce number of moving part
set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -O3 -s AGGRESSIVE_VARIABLE_ELIMINATION=1 --memory-init-file 0")
set (CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} -O3 -s AGGRESSIVE_VARIABLE_ELIMINATION=1 --memory-init-file 0")
# Remove variables to make the -O3 regalloc easier
set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -O3 -s AGGRESSIVE_VARIABLE_ELIMINATION=1")
# Preserve LLVM debug information, show line number debug comments, and generate source maps; always disable exception handling codegen
set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -g4 -s DISABLE_EXCEPTION_CATCHING=1")
set (CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} -g4 -s DISABLE_EXCEPTION_CATCHING=1")
endif ()
elseif (MINGW)
# MinGW-specific setup
Expand Down Expand Up @@ -946,13 +935,7 @@ macro (define_dependency_libs TARGET)
if (TARGET ${TARGET}_universal)
add_dependencies (${TARGET_NAME} ${TARGET}_universal)
endif ()
if (URHO3D_LIB_TYPE STREQUAL MODULE)
if (TARGET ${TARGET})
add_dependencies (${TARGET_NAME} ${TARGET})
endif ()
else ()
list (APPEND ABSOLUTE_PATH_LIBS ${URHO3D_LIBRARIES})
endif ()
list (APPEND ABSOLUTE_PATH_LIBS ${URHO3D_LIBRARIES})
endif ()
endif ()
endif ()
Expand Down Expand Up @@ -1092,7 +1075,7 @@ macro (define_resource_dirs)
get_filename_component (NAME ${FILE} NAME)
list (APPEND PAK_NAMES ${NAME})
endforeach ()
if (CMAKE_BUILD_TYPE STREQUAL Debug AND EMSCRIPTEN_EMCC_VERSION VERSION_GREATER 1.32.2)
if (CMAKE_BUILD_TYPE STREQUAL Debug)
set (SEPARATE_METADATA --separate-metadata)
endif ()
add_custom_command (OUTPUT ${SHARED_RESOURCE_JS} ${SHARED_RESOURCE_JS}.data
Expand Down Expand Up @@ -1237,7 +1220,7 @@ macro (enable_pch HEADER_PATHNAME)
get_directory_property (COMPILE_DEFINITIONS COMPILE_DEFINITIONS)
get_directory_property (INCLUDE_DIRECTORIES INCLUDE_DIRECTORIES)
get_target_property (TYPE ${TARGET_NAME} TYPE)
if (TYPE MATCHES SHARED|MODULE)
if (TYPE MATCHES SHARED)
list (APPEND COMPILE_DEFINITIONS ${TARGET_NAME}_EXPORTS)
if (LANG STREQUAL CXX)
_test_compiler_hidden_visibility ()
Expand Down Expand Up @@ -1763,13 +1746,13 @@ macro (_setup_target)
endif ()
# Extra linker flags for Emscripten
if (EMSCRIPTEN)
# These flags are set only once either in the main module or main executable
if ((URHO3D_LIB_TYPE STREQUAL MODULE AND ${TARGET_NAME} STREQUAL Urho3D) OR (NOT URHO3D_LIB_TYPE STREQUAL MODULE AND NOT LIB_TYPE))
# These flags are set only once either in the main executable
if (NOT LIB_TYPE) # LIB_TYPE is empty for executable target
list (APPEND LINK_FLAGS "-s TOTAL_MEMORY=${EMSCRIPTEN_TOTAL_MEMORY}")
if (EMSCRIPTEN_ALLOW_MEMORY_GROWTH)
list (APPEND LINK_FLAGS "-s ALLOW_MEMORY_GROWTH=1 --no-heap-copy")
endif ()
if (EMSCRIPTEN_SHARE_DATA) # MODULE lib type always have this variable enabled
if (EMSCRIPTEN_SHARE_DATA)
list (APPEND LINK_FLAGS "--pre-js \"${CMAKE_BINARY_DIR}/Source/pak-loader.js\"")
endif ()
if (URHO3D_TESTING)
Expand All @@ -1778,37 +1761,8 @@ macro (_setup_target)
# If not using EMRUN then we need to include the emrun_prejs.js manually in order to process the request parameters as app's arguments correctly
list (APPEND LINK_FLAGS "--pre-js \"${EMSCRIPTEN_ROOT_PATH}/src/emrun_prejs.js\"")
endif ()
endif ()
# These flags are here instead of in the CMAKE_(EXE|MODULE)_LINKER_FLAGS so that they do not interfere with the auto-detection logic during initial configuration
if (NOT LIB_TYPE OR LIB_TYPE STREQUAL MODULE)
# These flags are here instead of in the CMAKE_EXE_LINKER_FLAGS so that they do not interfere with the auto-detection logic during initial configuration
list (APPEND LINK_FLAGS "-s NO_EXIT_RUNTIME=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1")
if (EMSCRIPTEN_WASM)
list (APPEND LINK_FLAGS "-s WASM=1")
elseif (NOT EMSCRIPTEN_EMCC_VERSION VERSION_LESS 1.38.1)
# Since version 1.38.1 emcc emits WASM by default, so we need to explicitily turn it off to emits asm.js
# (See https://github.com/kripken/emscripten/commit/6e5818017d1b2e09e9f7ad22a32e9a191f6f9a3b for more detail)
list (APPEND LINK_FLAGS "-s WASM=0")
endif ()
endif ()
# Pass EMCC-specific setting to differentiate between main and side modules
if (URHO3D_LIB_TYPE STREQUAL MODULE)
if (${TARGET_NAME} STREQUAL Urho3D)
# Main module has standard libs statically linked
list (APPEND LINK_FLAGS "-s MAIN_MODULE=1")
elseif ((NOT ARG_NODEPS AND NOT LIB_TYPE) OR LIB_TYPE STREQUAL MODULE)
if (LIB_TYPE)
set (SIDE_MODULES ${SIDE_MODULES} ${TARGET_NAME} PARENT_SCOPE)
endif ()
# Also consider the executable target as another side module but only this scope
list (APPEND LINK_FLAGS "-s SIDE_MODULE=1")
list (APPEND SIDE_MODULES ${TARGET_NAME})
# Define custom commands for post processing the output file to first load the main module before the side module(s)
add_custom_command (TARGET ${TARGET_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<$<STREQUAL:${URHO3D_LIBRARIES},Urho3D>:$<TARGET_FILE:Urho3D>>$<$<NOT:$<STREQUAL:${URHO3D_LIBRARIES},Urho3D>>:${URHO3D_LIBRARIES}> $<TARGET_FILE_DIR:${TARGET_NAME}>
COMMAND ${CMAKE_COMMAND} -E $<$<NOT:$<CONFIG:Debug>>:echo> copy_if_different $<$<STREQUAL:${URHO3D_LIBRARIES},Urho3D>:$<TARGET_FILE:Urho3D>.map>$<$<NOT:$<STREQUAL:${URHO3D_LIBRARIES},Urho3D>>:${URHO3D_LIBRARIES}.map> $<TARGET_FILE_DIR:${TARGET_NAME}> $<$<NOT:$<CONFIG:Debug>>:$<ANGLE-R>${NULL_DEVICE}>
COMMAND ${CMAKE_COMMAND} -DTARGET_NAME=${TARGET_NAME} -DTARGET_FILE=$<TARGET_FILE:${TARGET_NAME}> -DTARGET_DIR=$<TARGET_FILE_DIR:${TARGET_NAME}> -DHAS_SHELL_FILE=${HAS_SHELL_FILE} -DSIDE_MODULES="${SIDE_MODULES}" -P ${CMAKE_SOURCE_DIR}/CMake/Modules/PostProcessForWebModule.cmake)
add_make_clean_files ($<TARGET_FILE_DIR:${TARGET_NAME}>/libUrho3D.js $<TARGET_FILE_DIR:${TARGET_NAME}>/libUrho3D.js.map)
endif ()
endif ()
# Pass additional source files to linker with the supported flags, such as: js-library, pre-js, post-js, embed-file, preload-file, shell-file
foreach (FILE ${SOURCE_FILES})
Expand Down
Loading

0 comments on commit dabfdbd

Please sign in to comment.