# HG changeset patch # User koda # Date 1461177964 14400 # Node ID 870f22de388b8a59be3a8f19e23b7c7cf44069ab # Parent ef625fe6eaaa435b0ff297cd1150683370ff14cb Add support for compiling C engine with emscripten diff -r ef625fe6eaaa -r 870f22de388b CMakeLists.txt --- a/CMakeLists.txt Tue Apr 19 12:04:21 2016 -0400 +++ b/CMakeLists.txt Wed Apr 20 14:46:04 2016 -0400 @@ -41,6 +41,7 @@ option(SKIPBUNDLE "Do not create relocate bundle (off)" OFF) option(BUILD_ENGINE_C "Compile hwengine as native C (off)" OFF) +option(BUILD_ENGINE_JS "Compile hwengine as javascript (off)" OFF) option(GL2 "Enable OpenGL 2 rendering !!!EXPERIMENTAL - DO NOT USE!!! [default: off)" OFF) set(GHFLAGS "" CACHE STRING "Additional Haskell flags") @@ -225,6 +226,9 @@ else() #main pascal engine add_subdirectory(hedgewars) + if(BUILD_ENGINE_JS) + message(FATAL_ERROR "This option needs BUILD_ENGINE_C to be set") + endif() endif() #Android related build scripts diff -r ef625fe6eaaa -r 870f22de388b cmake_modules/FindEmscripten.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake_modules/FindEmscripten.cmake Wed Apr 20 14:46:04 2016 -0400 @@ -0,0 +1,36 @@ +# - Try to find the Clang/LLVM executable +# Once done this will define +# +# EMSCRIPTEN_FOUND - system has Clang +# EMSCRIPTEN_VERSION - Clang version +# EMSCRIPTEN_EXECUTABLE - Clang executable +# +# Copyright (c) 2013, Vittorio Giovara +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +find_program(EMSCRIPTEN_EXECUTABLE + NAMES emcc + PATHS /opt/local/bin /usr/local/bin /usr/bin) + +if (EMSCRIPTEN_EXECUTABLE) + execute_process(COMMAND ${EMSCRIPTEN_EXECUTABLE} -v + OUTPUT_VARIABLE EMSCRIPTEN_VERSION_OUTPUT + ERROR_VARIABLE EMSCRIPTEN_VERSION_ERROR + RESULT_VARIABLE EMSCRIPTEN_VERSION_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if(${EMSCRIPTEN_VERSION_RESULT} EQUAL 0) + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" EMSCRIPTEN_VERSION "${EMSCRIPTEN_VERSION_OUTPUT}") + string(REGEX REPLACE "([0-9]+\\.[0-9]+\\.[0-9]+)" "\\1" EMSCRIPTEN_VERSION "${EMSCRIPTEN_VERSION}") + else() + message(SEND_ERROR "Command \"${EMSCRIPTEN_EXECUTABLE} --version\" failed with output: ${EMSCRIPTEN_VERSION_ERROR}") + endif() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Emscripten DEFAULT_MSG EMSCRIPTEN_EXECUTABLE EMSCRIPTEN_VERSION) +mark_as_advanced(EMSCRIPTEN_VERSION) + diff -r ef625fe6eaaa -r 870f22de388b project_files/hwc/CMakeLists.txt --- a/project_files/hwc/CMakeLists.txt Tue Apr 19 12:04:21 2016 -0400 +++ b/project_files/hwc/CMakeLists.txt Wed Apr 20 14:46:04 2016 -0400 @@ -6,6 +6,9 @@ find_package(SDL2_net REQUIRED) find_package(SDL2_image REQUIRED) find_package(SDL2_ttf REQUIRED) +if(BUILD_ENGINE_JS) + find_package(Emscripten REQUIRED) +endif() #compile our rtl implementation include_directories(${GLEW_INCLUDE_DIR}) @@ -78,6 +81,11 @@ add_definitions(-DPAS2C) add_definitions(-Werror=incompatible-pointer-types) +if(BUILD_ENGINE_JS) + #hijack the c compiler with emscripten + set(CMAKE_C_COMPILER ${EMSCRIPTEN_EXECUTABLE}) +endif() + add_executable(hwengine WIN32 ${engine_sources}) target_link_libraries(hwengine fpcrtl