diff --git a/CMakeLists.txt b/CMakeLists.txt index c57af72..d6a8e83 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,6 +85,11 @@ endif() # test_big_endian(WORDS_BIGENDIAN) #endif() +if (EMSCRIPTEN) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DEMSCRIPTEN") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DEMSCRIPTEN") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --memory-init-file 0") +endif() #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(CMAKE_CXX_STANDARD 11) diff --git a/README.md b/README.md index 248cd29..d9f7c30 100644 --- a/README.md +++ b/README.md @@ -170,5 +170,11 @@ scripts\speck\build_win.bat dll library is outputted to `libs/windows` directory. +## emscripten + +``` +./scripts/speck/build_emscripten.sh +``` + # License [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FNaruto%2Fsimon-speck-c.svg?type=large)](https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2FNaruto%2Fsimon-speck-c?ref=badge_large) diff --git a/include/speck/speck.h b/include/speck/speck.h index b28b1d6..f4b0e94 100644 --- a/include/speck/speck.h +++ b/include/speck/speck.h @@ -24,6 +24,9 @@ #define SPECK_H #include +#if EMSCRIPTEN +#include +#endif #ifdef SPECKAPI #undef SPECKAPI @@ -31,6 +34,8 @@ #if _WIN32 #define SPECKAPI __declspec(dllexport) +#elif EMSCRIPTEN +#define SPECKAPI EMSCRIPTEN_KEEPALIVE #else #ifdef __GNUC__ #if __GNUC__ >= 4 diff --git a/scripts/speck/build_emscripten.sh b/scripts/speck/build_emscripten.sh new file mode 100755 index 0000000..e7e2070 --- /dev/null +++ b/scripts/speck/build_emscripten.sh @@ -0,0 +1,29 @@ +#!/bin/bash -xe + +SCRIPTDIR=`dirname $0` +SCRIPTDIR=`cd $SCRIPTDIR && pwd -P` +BASEDIR=${SCRIPTDIR}/../.. +BASEDIR=`cd ${BASEDIR} && pwd -P` + +pushd ${BASEDIR} > /dev/null +/bin/rm -rf build +/bin/mkdir build +# build +pushd build > /dev/null +emcmake cmake -DENABLE_STATIC=ON -DCMAKE_BUILD_TYPE=Release .. +cmake --build . + +# rename .c.o to .bc +ar x libspeck.a +for f in *.c.o; do + mv $f ${f%.c.o}.bc +done +zip libspeck.zip *.bc + +popd > /dev/null + +/bin/rm -rf libs/emscripten +/bin/mkdir -p libs/emscripten +/bin/cp ./build/libspeck.zip libs/emscripten + +popd > /dev/null