diff --git a/.github/workflows/cmake_ktm_action.yml b/.github/workflows/cmake_ktm_test.yml similarity index 93% rename from .github/workflows/cmake_ktm_action.yml rename to .github/workflows/cmake_ktm_test.yml index c092e8f..6d095ed 100644 --- a/.github/workflows/cmake_ktm_action.yml +++ b/.github/workflows/cmake_ktm_test.yml @@ -1,12 +1,12 @@ # This starter workflow is for a CMake project running on multiple platforms. There is a different starter workflow if you just want a single platform. # See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml -name: cmake ktm action +name: cmake ktm test on: push: - branches: [ "main" ] + branches: [ "dev_v0.1.3" ] pull_request: - branches: [ "main" ] + branches: [ "dev_v0.1.3" ] jobs: build: @@ -67,6 +67,7 @@ jobs: shell: bash run: | echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" + echo "build-output-test-dir=${{ github.workspace }}/build/test" >> "$GITHUB_OUTPUT" - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. @@ -84,12 +85,11 @@ jobs: run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} - name: Test - working-directory: ${{ steps.strings.outputs.build-output-dir }} + working-directory: ${{ steps.strings.outputs.build-output-test-dir }} # Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail run: ctest --build-config ${{ matrix.build_type }} - name: Install # Install your program with the given configuration. - run: ${{ matrix.root }} cmake --install ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} - + run: ${{ matrix.root }} cmake --install ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} \ No newline at end of file diff --git a/.github/workflows/cmake_ktm_wasm_test.yml b/.github/workflows/cmake_ktm_wasm_test.yml new file mode 100644 index 0000000..1ff3c84 --- /dev/null +++ b/.github/workflows/cmake_ktm_wasm_test.yml @@ -0,0 +1,59 @@ +# This starter workflow is for a CMake project running on multiple platforms. There is a different starter workflow if you just want a single platform. +# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml +name: cmake ktm wasm test + +on: + push: + branches: [ "dev_v0.1.3" ] + pull_request: + branches: [ "dev_v0.1.3" ] + +jobs: + build: + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + + matrix: + os: [macos-latest, ubuntu-latest, windows-latest] + build_type: [Release] + include: + - os: macos-latest + - os: ubuntu-latest + - os: windows-latest + + steps: + - uses: actions/checkout@v3 + + - name: Setup emsdk + uses: mymindstorm/setup-emsdk@v14 + with: + version: "latest" + actions-cache-folder: 'emsdk-cache' + + - name: Set reusable strings + id: strings + shell: bash + run: | + echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" + echo "build-output-test-dir=${{ github.workspace }}/build/test" >> "$GITHUB_OUTPUT" + + - name: Configure CMake + run: > + cmake -B ${{ steps.strings.outputs.build-output-dir }} + -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} + -DKTM_BUILD_TESTING=ON + -DKTM_BUILD_WASM=ON + -DCMAKE_TOOLCHAIN_FILE="$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" + -S ${{ github.workspace }} + + - name: Build + run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} + + - name: Test + working-directory: ${{ steps.strings.outputs.build-output-test-dir }} + run: ctest --build-config ${{ matrix.build_type }} + + - name: Install + run: cmake --install ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 7aed015..42708d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,15 +3,27 @@ cmake_minimum_required(VERSION 3.20) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) project(ktm) -add_executable(ktm ${CMAKE_CURRENT_SOURCE_DIR}/src/ktm.cpp) +if(KTM_BUILD_WASM) + add_compile_options(-msimd128) +elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") + add_compile_options(/source-charset:utf-8) + add_compile_options(/execution-charset:utf-8) +elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR + "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR + "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") + add_compile_options(-march=native) +endif() if(KTM_BUILD_TESTING) add_subdirectory(test) endif() +add_executable(ktm ${CMAKE_CURRENT_SOURCE_DIR}/src/ktm.cpp) + install(DIRECTORY ktm DESTINATION include) if(NOT TARGET uninstall) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f84e85b..f3dbfc0 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,24 +1,19 @@ enable_testing() -if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") - add_compile_options(/std:c++17) - add_compile_options(/source-charset:utf-8) - add_compile_options(/execution-charset:utf-8) -elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - add_compile_options(-std=gnu++17) - add_compile_options(-march=native) -elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") - add_compile_options(-std=gnu++17) - add_compile_options(-Wc++17-extensions) - add_compile_options(-march=native) -endif() - add_executable(geometry_test geometry_test.cpp) add_executable(matrix_test matrix_test.cpp) add_executable(quaternion_test quaternion_test.cpp) add_executable(vector_test vector_test.cpp) -add_test(geometry_test geometry_test) -add_test(matrix_test matrix_test) -add_test(quaternion_test quaternion_test) -add_test(vector_test vector_test) \ No newline at end of file +if(KTM_BUILD_WASM) + find_program(NODE node) + add_test(geometry_test ${NODE} geometry_test.js) + add_test(matrix_test ${NODE} matrix_test.js) + add_test(quaternion_test ${NODE} quaternion_test.js) + add_test(vector_test ${NODE} vector_test.js) +else() + add_test(geometry_test geometry_test) + add_test(matrix_test matrix_test) + add_test(quaternion_test quaternion_test) + add_test(vector_test vector_test) +endif() \ No newline at end of file