From 854896cf343767269fc00ebb758228f5ad0f4f50 Mon Sep 17 00:00:00 2001 From: LoveEevee Date: Mon, 13 Sep 2021 00:17:00 +0300 Subject: [PATCH 1/3] Set default cmake flags for emscripten, support atrac9 --- CMakeLists.txt | 55 ++++++++++++++++++++++++++++++++-------------- cli/CMakeLists.txt | 2 +- 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bb5d9aa4..e2548f0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,24 +90,35 @@ if(WIN32) option(BUILD_XMPLAY "Build XMPlay plugin" ON) set(XMPLAY_INSTALL_PREFIX CACHE PATH "Path to XMPlay installation directory") else() - option(BUILD_STATIC "Build statically linked binary" OFF) - if(BUILD_STATIC) - option(BUILD_V123 "Build vgmstream123 player" OFF) + if(EMSCRIPTEN) + set(BUILD_STATIC ON) else() - option(BUILD_V123 "Build vgmstream123 player" ON) + option(BUILD_STATIC "Build statically linked binary" OFF) + if(BUILD_STATIC) + option(BUILD_V123 "Build vgmstream123 player" OFF) + else() + option(BUILD_V123 "Build vgmstream123 player" ON) + endif() + option(BUILD_AUDACIOUS "Build Audacious plugin" ON) endif() - option(BUILD_AUDACIOUS "Build Audacious plugin" ON) +endif() + +if(EMSCRIPTEN) + set(USE_MPEG OFF) + set(USE_FFMPEG OFF) + set(USE_JANSSON OFF) endif() # Static builds will link all libraries statically if(BUILD_STATIC) set(BUILD_SHARED_LIBS OFF) set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static") - - # it is already kind of obvious when you do not have it, and just prevents you from building without ffmpeg - #find_package(PkgConfig REQUIRED) - #pkg_check_modules(PC_OPUS REQUIRED opus>=1.1) - + + if(USE_FFMPEG) + find_package(PkgConfig REQUIRED) + pkg_check_modules(PC_OPUS REQUIRED opus>=1.1) + endif() + # Incompatible with static builds set(BUILD_AUDACIOUS OFF) endif() @@ -417,15 +428,27 @@ if(NOT WIN32) endif() endif() if(ATRAC9_PATH) - if(NOT EXISTS ${ATRAC9_PATH}/C/bin/libatrac9.a) - add_custom_target(ATRAC9_MAKE ALL - COMMAND make static CFLAGS="-fPIC" - WORKING_DIRECTORY ${ATRAC9_PATH}/C - ) + if(EMSCRIPTEN) + set(ATRAC9_LINK_PATH ${ATRAC9_PATH}/C/embin/libatrac9.a) + else() + set(ATRAC9_LINK_PATH ${ATRAC9_PATH}/C/bin/libatrac9.a) + endif() + if(NOT EXISTS ${ATRAC9_LINK_PATH}) + if(EMSCRIPTEN) + add_custom_target(ATRAC9_MAKE ALL + COMMAND emmake make static CFLAGS="-fPIC" CC=emcc AR=emar BINDIR=embin + WORKING_DIRECTORY ${ATRAC9_PATH}/C + ) + else() + add_custom_target(ATRAC9_MAKE ALL + COMMAND make static CFLAGS="-fPIC" + WORKING_DIRECTORY ${ATRAC9_PATH}/C + ) + endif() endif() add_library(atrac9 STATIC IMPORTED) set_target_properties(atrac9 PROPERTIES - IMPORTED_LOCATION ${ATRAC9_PATH}/C/bin/libatrac9.a + IMPORTED_LOCATION ${ATRAC9_LINK_PATH} ) endif() endif() diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 3d7e8641..366c4ab2 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -17,7 +17,7 @@ endif() target_link_libraries(vgmstream_cli libvgmstream) # Link to Jansson, if we have it -if (JANSSON_FOUND) +if (USE_JANSSON AND JANSSON_FOUND) target_compile_definitions(vgmstream_cli PRIVATE HAVE_JSON) target_link_libraries(vgmstream_cli jansson) endif() From c4fd4a4f82e0271ba67b3acd21b45b520c2160ec Mon Sep 17 00:00:00 2001 From: LoveEevee Date: Mon, 13 Sep 2021 01:06:07 +0300 Subject: [PATCH 2/3] Add emscripten build step to GitHub Actions --- .github/workflows/cmake-em.yml | 50 ++++++++++++++++++++++++++++++++++ .gitignore | 1 + CMakeLists.txt | 2 ++ 3 files changed, 53 insertions(+) create mode 100644 .github/workflows/cmake-em.yml diff --git a/.github/workflows/cmake-em.yml b/.github/workflows/cmake-em.yml new file mode 100644 index 00000000..d9f5eb35 --- /dev/null +++ b/.github/workflows/cmake-em.yml @@ -0,0 +1,50 @@ +# github workflow to automate builds + +name: Emscripten build + +on: [push, pull_request] + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + BUILD_TYPE: Release + EM_VERSION: 2.0.29 + EM_CACHE_FOLDER: 'emsdk-cache' + +jobs: + build: + name: CMake, Emscripten + runs-on: ubuntu-18.04 + + steps: + - uses: actions/checkout@v2 + + - name: Fetch Git tags + run: | + git fetch --prune --unshallow --tags + + - name: Setup emsdk + uses: mymindstorm/setup-emsdk@v10 + with: + version: ${{env.EM_VERSION}} + actions-cache-folder: ${{env.EM_CACHE_FOLDER}} + + - name: Create build environment + run: cmake -E make_directory ${{runner.workspace}}/embuild + + - name: Configure CMake + shell: bash + working-directory: ${{runner.workspace}}/embuild + run: emcmake cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE + + - name: Build + working-directory: ${{runner.workspace}}/embuild + shell: bash + run: emmake make + + - name: Upload emscripten artifact + uses: actions/upload-artifact@v2 + with: + path: | + ${{runner.workspace}}/embuild/cli/vgmstream-cli.js + ${{runner.workspace}}/embuild/cli/vgmstream-cli.wasm + name: vgmstream-wasm diff --git a/.gitignore b/.gitignore index 82c9d62a..36d63edb 100644 --- a/.gitignore +++ b/.gitignore @@ -58,6 +58,7 @@ Release # cmake stuff /build +/embuild /cmake-build* CMakeCache.txt CMakeFiles diff --git a/CMakeLists.txt b/CMakeLists.txt index e2548f0d..a7ba48ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,6 +107,8 @@ if(EMSCRIPTEN) set(USE_MPEG OFF) set(USE_FFMPEG OFF) set(USE_JANSSON OFF) + set(BUILD_V123 OFF) + set(BUILD_AUDACIOUS OFF) endif() # Static builds will link all libraries statically From c8d5eb848168dccf4619563cb7ac967d3184e4ed Mon Sep 17 00:00:00 2001 From: LoveEevee Date: Mon, 13 Sep 2021 05:00:37 +0300 Subject: [PATCH 3/3] Rename Emscripten action to WebAssembly action --- .github/workflows/{cmake-em.yml => cmake-wasm.yml} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename .github/workflows/{cmake-em.yml => cmake-wasm.yml} (92%) diff --git a/.github/workflows/cmake-em.yml b/.github/workflows/cmake-wasm.yml similarity index 92% rename from .github/workflows/cmake-em.yml rename to .github/workflows/cmake-wasm.yml index d9f5eb35..67c5b987 100644 --- a/.github/workflows/cmake-em.yml +++ b/.github/workflows/cmake-wasm.yml @@ -1,6 +1,6 @@ # github workflow to automate builds -name: Emscripten build +name: WebAssembly build on: [push, pull_request] @@ -12,7 +12,7 @@ env: jobs: build: - name: CMake, Emscripten + name: CMake, WebAssembly runs-on: ubuntu-18.04 steps: @@ -41,7 +41,7 @@ jobs: shell: bash run: emmake make - - name: Upload emscripten artifact + - name: Upload WebAssembly artifact uses: actions/upload-artifact@v2 with: path: |