support emscripten compile
This commit is contained in:
parent
a4ce5bb09e
commit
1fa6361401
|
@ -0,0 +1,9 @@
|
|||
[binaries]
|
||||
c = ['c:/dev/_tools/emsdk/upstream/emscripten/emcc.bat']
|
||||
ar =['c:/dev/_tools/emsdk/upstream/emscripten/emar.bat']
|
||||
|
||||
[host_machine]
|
||||
system = 'emscripten'
|
||||
cpu_family = 'wasm'
|
||||
cpu = 'wasm'
|
||||
endian = 'little'
|
27
meson.build
27
meson.build
|
@ -1,4 +1,10 @@
|
|||
project('skunkworks', 'c', default_options: ['buildtype=release'])
|
||||
project('skunkworks', 'c',
|
||||
default_options: [
|
||||
'buildtype=release',
|
||||
'strip=true',
|
||||
'debug=false'
|
||||
]
|
||||
)
|
||||
|
||||
cmake = import('cmake')
|
||||
|
||||
|
@ -20,9 +26,18 @@ opt.add_cmake_defines({
|
|||
opt.append_compile_args('c', '-I../subprojects/zlib-1.2.13', '-Isubprojects/zlib-1.2.13/__CMake_build')
|
||||
libpng = cmake.subproject('lpng1639', options: opt).dependency('png_static')
|
||||
|
||||
libglfw = cmake.subproject('glfw-3.3.8').dependency('glfw')
|
||||
opt = cmake.subproject_options()
|
||||
opt.add_cmake_defines({'GLFW_BUILD_DOCS': false})
|
||||
|
||||
libglew = subproject('glew-2.1.0').get_variable('libglew_dep')
|
||||
|
||||
if host_machine.system() == 'emscripten'
|
||||
#libglfw = meson.get_compiler('c').find_library('glfw')
|
||||
deps = [libz, libpng]
|
||||
else
|
||||
libglfw = cmake.subproject('glfw-3.3.8', options: opt).dependency('glfw')
|
||||
libglew = subproject('glew-2.1.0').get_variable('libglew_dep')
|
||||
deps = [libz, libpng, libglew, libglfw]
|
||||
endif
|
||||
|
||||
skunk_sources = [
|
||||
'src/skunkworks.c',
|
||||
|
@ -31,4 +46,8 @@ skunk_sources = [
|
|||
'src/window.c'
|
||||
]
|
||||
|
||||
executable('skunktest', skunk_sources, include_directories: 'include', dependencies: [libz, libpng, libglew, libglfw])
|
||||
if host_machine.system() == 'emscripten'
|
||||
executable('skunktest', skunk_sources, include_directories: 'include', dependencies: deps, link_args: ['-lglfw', '-lGL', '-s', 'USE_GLFW=3'], name_suffix: 'html')
|
||||
else
|
||||
executable('skunktest', skunk_sources, include_directories: 'include', dependencies: deps)
|
||||
endif
|
|
@ -0,0 +1,2 @@
|
|||
@echo off
|
||||
meson setup --cross-file=em.ini --prefer-static buildem
|
6
src/gl.h
6
src/gl.h
|
@ -3,3 +3,9 @@
|
|||
#include <GL/glew.h>
|
||||
#pragma clang diagnostic pop
|
||||
#include <GLFW/glfw3.h>
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
#include <emscripten.h>
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
#define EGL_EGLEXT_PROTOTYPES
|
||||
#endif
|
||||
|
|
19
src/test.c
19
src/test.c
|
@ -5,19 +5,30 @@
|
|||
|
||||
#include "gl.h"
|
||||
|
||||
struct window *win;
|
||||
|
||||
void tick();
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
struct window *win;
|
||||
|
||||
printf("hello world\n");
|
||||
win = sw_window_create(sw_vec2i(640, 480), "Skunkworks");
|
||||
png_sig_cmp(0, 0, 0);
|
||||
glClearColor(0.1f, 0.2f, 0.3f, 1.f);
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
emscripten_set_main_loop(tick, 0, 1);
|
||||
#else
|
||||
while (!glfwWindowShouldClose(win->_window)) {
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
glfwSwapBuffers(win->_window);
|
||||
glfwPollEvents();
|
||||
tick();
|
||||
}
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void tick() {
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
glfwSwapBuffers(win->_window);
|
||||
glfwPollEvents();
|
||||
}
|
||||
|
|
|
@ -3,6 +3,10 @@ project('glew', 'c')
|
|||
gl = dependency('gl')
|
||||
inc = include_directories('include')
|
||||
c_args = ['-DGLEW_STATIC']
|
||||
lib = static_library('glew', 'src/glew.c', include_directories: inc, c_args: c_args, dependencies: gl)
|
||||
if host_machine.system() == 'emscripten'
|
||||
lib = static_library('glew', 'src/glew.c', include_directories: inc, c_args: c_args)
|
||||
else
|
||||
lib = static_library('glew', 'src/glew.c', include_directories: inc, c_args: c_args, dependencies: gl)
|
||||
endif
|
||||
|
||||
libglew_dep = declare_dependency(include_directories: inc, link_with: lib, compile_args: c_args)
|
|
@ -147,10 +147,10 @@ if(MINGW)
|
|||
set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
|
||||
endif(MINGW)
|
||||
|
||||
add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
|
||||
#add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
|
||||
add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
|
||||
set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
|
||||
set_target_properties(zlib PROPERTIES SOVERSION 1)
|
||||
#set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
|
||||
#set_target_properties(zlib PROPERTIES SOVERSION 1)
|
||||
|
||||
if(NOT CYGWIN)
|
||||
# This property causes shared libraries on Linux to have the full version
|
||||
|
@ -160,7 +160,7 @@ if(NOT CYGWIN)
|
|||
#
|
||||
# This has no effect with MSVC, on that platform the version info for
|
||||
# the DLL comes from the resource file win32/zlib1.rc
|
||||
set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION})
|
||||
#set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION})
|
||||
endif()
|
||||
|
||||
if(UNIX)
|
||||
|
@ -175,7 +175,7 @@ elseif(BUILD_SHARED_LIBS AND WIN32)
|
|||
endif()
|
||||
|
||||
if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
|
||||
install(TARGETS zlib zlibstatic
|
||||
install(TARGETS zlibstatic
|
||||
RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
|
||||
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
|
||||
LIBRARY DESTINATION "${INSTALL_LIB_DIR}" )
|
||||
|
|
Loading…
Reference in New Issue