diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..177235e0 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,130 @@ +name: build +on: [push, pull_request] +jobs: + build_win: + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + - uses: ilammy/msvc-dev-cmd@v1 + - name: Compile + shell: bash + run: | + mkdir build + cd build + cmake .. + cmake --build . --config Release + cmake .. -DPK_BUILD_SHARED_LIB=1 + cmake --build . --config Release + mkdir -p output/windows/x86_64 + cp Release/pocketpy.exe output/windows/x86_64 + cp Release/pocketpy.dll output/windows/x86_64 + cp Release/pocketpy.exe ../ + - uses: actions/upload-artifact@v3 + with: + path: output + - name: Unit Test + run: python3 scripts/run_tests.py + - name: Benchmark + run: python3 scripts/run_tests.py benchmark + build_linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup Clang + uses: egor-tensin/setup-clang@v1 + with: + version: 15 + platform: x64 + - name: Install libc++ + run: sudo apt-get install -y libc++-15-dev libc++1-15 libc++abi-15-dev libc++abi1-15 libclang-rt-15-dev + - name: Unit Test with Coverage + run: bash run_tests.sh + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + directory: .coverage + - name: Compile + run: | + mkdir build + cd build + cmake .. + cmake --build . --config Release + cmake .. -DPK_BUILD_SHARED_LIB=1 + cmake --build . --config Release + mkdir -p output/linux/x86_64 + cp pocketpy output/linux/x86_64 + cp pocketpy.so output/linux/x86_64 + cp pocketpy ../ + - uses: actions/upload-artifact@v3 + with: + path: output + - name: Benchmark + run: python3 scripts/run_tests.py benchmark + # - name: GCC Build Test + # run: g++ -o pocketpy --std=c++17 src/main.cpp + # - name: C Binding Test + # run: bash run_c_binding_test.sh + build_macos: + runs-on: macos-latest + steps: + - uses: actions/checkout@v3 + - run: | + python3 amalgamate.py + cd plugins/macos/pocketpy + mkdir -p output/macos + xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO + cp -r build/Release/pocketpy.bundle output/macos + - uses: actions/upload-artifact@v3 + with: + path: plugins/macos/pocketpy/output + build_android: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: subosito/flutter-action@v2 + with: + flutter-version: '3.3.0' + channel: 'stable' + cache: true + - run: flutter --version + - name: Compile + run: | + python3 amalgamate.py + cd plugins/flutter/example + flutter build apk --split-debug-info=.debug-info --split-per-abi + cd build/app/outputs/flutter-apk + mkdir -p output/android/arm64-v8a + mkdir -p output/android/armeabi-v7a + mkdir -p output/android/x86_64 + unzip -q app-arm64-v8a-release.apk -d tmp + mv tmp/lib/arm64-v8a/libpocketpy.so output/android/arm64-v8a/libpocketpy.so + rm -rf tmp + unzip -q app-armeabi-v7a-release.apk -d tmp + mv tmp/lib/armeabi-v7a/libpocketpy.so output/android/armeabi-v7a/libpocketpy.so + rm -rf tmp + unzip -q app-x86_64-release.apk -d tmp + mv tmp/lib/x86_64/libpocketpy.so output/android/x86_64/libpocketpy.so + rm -rf tmp + - uses: actions/upload-artifact@v3 + with: + path: plugins/flutter/example/build/app/outputs/flutter-apk/output + # build_web: + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v3 + # - name: Setup emsdk + # uses: mymindstorm/setup-emsdk@v12 + # with: + # version: 3.1.25 + # actions-cache-folder: 'emsdk-cache' + # - name: Verify emsdk + # run: emcc -v + # - name: Compile + # run: | + # mkdir -p output/web/lib + # python3 build.py web + # cp web/lib/* output/web/lib + # - uses: actions/upload-artifact@v3 + # with: + # path: output \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index c40bef22..d4714e86 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,9 @@ include_directories(${CMAKE_CURRENT_LIST_DIR}/include) aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src POCKETPY_SRC) +option(PK_BUILD_SHARED_LIB "Build shared library" OFF) +option(PK_BUILD_STATIC_LIB "Build static library" OFF) + if(PK_BUILD_SHARED_LIB) add_library(${PROJECT_NAME} SHARED ${POCKETPY_SRC} src2/lib.cpp) elseif(PK_BUILD_STATIC_LIB)