diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..b43724010 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "thirdparty/zlib"] + path = thirdparty/zlib + url = https://github.com/madler/zlib +[submodule "thirdparty/SDL2"] + path = thirdparty/SDL2 + url = https://github.com/emscripten-ports/SDL2.git diff --git a/CMakeLists.txt b/CMakeLists.txt index dc24d4848..e39b31ed1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,7 +85,7 @@ if(PSP) WAGIC_OPTION(backend_psp "build for psp" ON) endif() if(WIN32 OR ANDROID OR UNIX) - WAGIC_OPTION(backend_sdl "build for sdl" (WIN32 OR ANDROID)) + WAGIC_OPTION(backend_sdl "build for sdl" (WIN32 OR ANDROID OR EMSCRIPTEN)) endif() if(NOT backend_sdl AND UNIX AND NOT ANDROID) WAGIC_OPTION(backend_qt_console "build qt-console version with testsuit" ON) @@ -93,12 +93,13 @@ if(NOT backend_sdl AND UNIX AND NOT ANDROID) endif() #third party build options -WAGIC_OPTION(BUILD_ZLIB "build zlib from source" WIN32) -WAGIC_OPTION(BUILD_JPEG "build jpeg from source" (WIN32 OR APPLE OR PSP OR ANDROID)) -WAGIC_OPTION(BUILD_PNG "build png from source" (WIN32 OR APPLE OR PSP OR ANDROID)) +WAGIC_OPTION(BUILD_ZLIB "build zlib from source" WIN32 OR EMSCRIPTEN) +WAGIC_OPTION(BUILD_JPEG "build jpeg from source" (WIN32 OR APPLE OR PSP OR ANDROID OR EMSCRIPTEN)) +WAGIC_OPTION(BUILD_PNG "build png from source" (WIN32 OR APPLE OR PSP OR ANDROID OR EMSCRIPTEN)) WAGIC_OPTION(BUILD_UNZIP "build unzip from source" ON) -WAGIC_OPTION(BUILD_TINYXML "build tinyxml from source" (WIN32 OR APPLE OR PSP OR ANDROID)) +WAGIC_OPTION(BUILD_TINYXML "build tinyxml from source" (WIN32 OR APPLE OR PSP OR ANDROID OR EMSCRIPTEN)) WAGIC_OPTION(BUILD_ZIPFS "build zipfs from source" ON) +WAGIC_OPTION(BUILD_SDL2 "build SDL2 from source" (backend_sdl AND (WIN32 OR ANDROID OR EMSCRIPTEN))) #project options if(ANDROID) @@ -145,6 +146,8 @@ elseif(UNIX) include(platforms/unix/configure.cmake) elseif(ANDROID) include(platforms/android/configure.cmake) +elseif(EMSCRIPTEN) + include(platforms/emscripten/configure.cmake) endif() #set backend dependend configurations @@ -159,7 +162,6 @@ elseif(backend_sdl) endif() # find or build 3rd party libraries - FindOrBuildZLIB() FindOrBuildOpenGL() FindOrBuildTinyXML() @@ -200,3 +202,7 @@ add_subdirectory(projects/mtg) if(BUILD_ANDROID_PACKAGE) add_subdirectory(platforms/android/package) endif() + +if(EMSCRIPTEN) + set(CMAKE_EXECUTABLE_SUFFIX ".html") +endif() diff --git a/CMakeModules/FindOrBuild.cmake b/CMakeModules/FindOrBuild.cmake index b7a4eb6fa..2b397450a 100644 --- a/CMakeModules/FindOrBuild.cmake +++ b/CMakeModules/FindOrBuild.cmake @@ -24,15 +24,23 @@ macro(FindOrBuildTinyXML) endmacro() macro(FindOrBuildSDL2) - if(ANDROID) - set(ENV{SDL2DIR} "$ENV{ANDROID_SDL2_ROOT};$ENV{ANDROID_SDL2_ROOT}/libs/${ANDROID_NDK_ABI_NAME}/") - elseif(WIN32 OR UNIX) -# set(ENV{SDL2DIR} $ENV{WIN_SDL2_ROOT}) + if(BUILD_SDL2) + if(WIN32) + #SDL2 DirectX build is somehow broken... + set(SDL_AUDIO FALSE) + set(SDL_JOYSTICK FALSE) + set(SDL_HAPTIC FALSE) + set(SDL_SHARED FALSE) + endif() add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/SDL2) set(SDL2_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/thirdparty/SDL2/include ${CMAKE_BINARY_DIR}/thirdparty/SDL2) - set(SDL2_LIBRARY SDL2) - else() - find_package(SDL2) + if(EMSCRIPTEN OR WIN32) + set(SDL2_LIBRARY SDL2-static) + else() + set(SDL2_LIBRARY SDL2) + endif() + elseif(NOT EMSCRIPTEN) + find_package(SDL2) endif() endmacro() @@ -90,7 +98,7 @@ endmacro() macro(FindOrBuildZLIB) if(BUILD_ZLIB) - add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/zlib) + add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/zlib) set(ZLIB_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/zlib ${CMAKE_BINARY_DIR}/thirdparty/zlib) set(ZLIB_LIBRARIES zlib) else() @@ -142,7 +150,8 @@ endmacro() macro(FindOrBuildPNG) if(BUILD_PNG) add_subdirectory(${CMAKE_SOURCE_DIR}/thirdparty/libpng ${CMAKE_BINARY_DIR}/thirdparty/libpng) - find_path(PNG_INCLUDE_DIRS NAMES png.h HINTS ${CMAKE_SOURCE_DIR}/thirdparty/libpng) + set(PNG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/thirdparty/libpng) +# find_path(PNG_INCLUDE_DIRS NAMES png.h HINTS ${CMAKE_SOURCE_DIR}/thirdparty/libpng) set(PNG_LIBRARIES png) else() if(WIN32) @@ -202,6 +211,8 @@ macro(FindOrBuildOpenGL) if(ANDROID) #find openglesv on android set(OPENGL_LIBRARIES "-ldl -lGLESv1_CM -lGLESv2 -llog -landroid") + elseif(EMSCRIPTEN) + set(OPENGL_LIBRARIES "") else() find_package(OpenGL) # find_package(GLUT) diff --git a/JGE/CMakeLists.txt b/JGE/CMakeLists.txt index f7e9abc9e..fc39eec3a 100644 --- a/JGE/CMakeLists.txt +++ b/JGE/CMakeLists.txt @@ -101,7 +101,7 @@ if(backend_qt_widget) endif() if(backend_sdl) - if(UNIX AND NOT ANDROID) + if((UNIX OR EMSCRIPTEN) AND NOT ANDROID) set(JGE_INTERNAL_INCLUDE_DIRS ${TINYXML_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR} ${GLUT_INCLUDE_DIR} ${SDL2_INCLUDE_DIR} ${UNZIP_INCLUDE_DIR} ${PNG_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS}) set(JGE_SOURCES ${JGE_generic_src} ${JGE_graphics_src} ${JGE_linux_src} ${JGE_hge_src}) @@ -119,7 +119,7 @@ if(backend_sdl) ${UNZIP_INCLUDE_DIR} ${PNG_INCLUDE_DIRS} ${JPEG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/include) set(JGE_SOURCES ${JGE_generic_src} ${JGE_graphics_src} ${JGE_linux_src} ${JGE_hge_src}) set(JGE_LINK_LIBRARIES ${ZIPFS_LIBRARY} ${UNZIP_LIRARY} ${JPEG_LIBRARY} ${PNG_LIBRARIES}) - set(JGE_LINK_DIRECTORIES ${Boost_LIBRARY_DIR} ${SDL2_LIBRARY_DIR}) + set(JGE_LINK_DIRECTORIES ${Boost_LIBRARY_DIR}) endif() endif() diff --git a/JGE/src/pc/JGfx.cpp b/JGE/src/pc/JGfx.cpp index 093e2035e..4c40b5a72 100644 --- a/JGE/src/pc/JGfx.cpp +++ b/JGE/src/pc/JGfx.cpp @@ -12,7 +12,7 @@ #if (!defined IOS) && (!defined QT_CONFIG) #ifdef WIN32 #pragma warning(disable : 4786) -#pragma comment( lib, "giflib.lib" ) +//#pragma comment( lib, "giflib.lib" ) #endif #include diff --git a/platforms/emscripten/configure.cmake b/platforms/emscripten/configure.cmake new file mode 100644 index 000000000..0c6954c49 --- /dev/null +++ b/platforms/emscripten/configure.cmake @@ -0,0 +1,3 @@ +set_target_properties(wagic PROPERTIES LINK_FLAGS "-s USE_SDL=2") +set(CMAKE_CXX_FLAGS "-s USE_SDL=2") +set(CMAKE_EXECUTABLE_SUFFIX ".html") \ No newline at end of file diff --git a/projects/mtg/CMakeLists.txt b/projects/mtg/CMakeLists.txt index 3b60bf2a5..694bdf02f 100644 --- a/projects/mtg/CMakeLists.txt +++ b/projects/mtg/CMakeLists.txt @@ -166,8 +166,8 @@ elseif(backend_qt_widget) message(FATAL_ERROR "qt-widget bilds are only supported on unix platforms") endif() elseif(backend_sdl) - if(UNIX AND NOT ANDROID) - include_directories(${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${SDL2_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR} ${UNZIP_INCLUDE_DIR} ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR}) + if((UNIX OR EMSCRIPTEN) AND NOT ANDROID) + include_directories(${MTG_INCLUDE_DIRS} ${JGE_INCLUDE_DIRS} ${SDL2_INCLUDE_DIR} ${ZIPFS_INCLUDE_DIR} ${UNZIP_INCLUDE_DIR} ${HGE_INCLUDE_DIR} ${TINYXML_INCLUDE_DIR} ${ZLIB_INCLUDE_DIRS}) add_executable(wagic ${MTG_generic_src} ${MTG_sdl_src}) target_link_libraries(wagic ${JGE_LIBRARY} ${SDL2_LIBRARY} ${OPENGL_LIBRARIES} ${TINYXML_LIBRARIES} ${HGE_LIBRARY} ${ZLIB_LIBRARIES}) elseif(ANDROID) @@ -188,7 +188,7 @@ elseif(backend_sdl) add_executable(wagic ${MTG_generic_src} ${MTG_sdl_src} src/TestSuiteAI.cpp src/AIPlayerBakaB.cpp) link_directories(${Boost_LIBRARY_DIR} ${SDL2_LIBRARY_DIR}) target_link_libraries(wagic ${JGE_LIBRARY} ${SDL2_LIBRARY} ${OPENGL_LIBRARIES} ${TINYXML_LIBRARIES} - ${BOOST_date_time} ${HGE_LIBRARY} ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/lib/fmodvc.lib) + ${BOOST_date_time} ${HGE_LIBRARY} ${CMAKE_SOURCE_DIR}/thirdparty/binary/win/lib/fmodvc.lib ${ZLIB_LIBRARIES}) endif() elseif(backend_psp) if(PSP) diff --git a/thirdparty/SDL2 b/thirdparty/SDL2 new file mode 160000 index 000000000..e60718c37 --- /dev/null +++ b/thirdparty/SDL2 @@ -0,0 +1 @@ +Subproject commit e60718c37e5b4dbabdc87c21193ee9e6e9bf562a diff --git a/thirdparty/zlib b/thirdparty/zlib new file mode 160000 index 000000000..508932916 --- /dev/null +++ b/thirdparty/zlib @@ -0,0 +1 @@ +Subproject commit 50893291621658f355bc5b4d450a8d06a563053d