diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000000..89fbcffd15a --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,101 @@ +name: Build arm64 static from source +on: workflow_dispatch +jobs: + build: + runs-on: macos-14 + steps: + - uses: actions/checkout@v4 + + - name: Check required protobuf version + run: | + echo "=== Checking grpc-java's expected protobuf version ===" + grep -r "protobuf" gradle.properties || true + grep -r "protobufVersion" build.gradle || true + grep -r "com.google.protobuf:protobuf" build.gradle | head -5 || true + cat gradle/libs.versions.toml | grep -i protobuf || true + + - name: Install build tools + run: | + brew install cmake ninja + + - name: Build abseil static + run: | + cd $HOME + git clone --depth 1 --branch 20240722.0 https://github.com/abseil/abseil-cpp.git + cd abseil-cpp + mkdir build && cd build + cmake .. \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=17 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 \ + -DABSL_BUILD_TESTING=OFF \ + -DABSL_USE_GOOGLETEST_HEAD=OFF \ + -DCMAKE_INSTALL_PREFIX=$HOME/local \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + ninja + ninja install + + - name: Build protobuf static (latest) + run: | + cd $HOME + # Try the latest protobuf + git clone --depth 1 https://github.com/protocolbuffers/protobuf.git + cd protobuf + mkdir build && cd build + cmake .. \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_CXX_STANDARD=17 \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=10.15 \ + -Dprotobuf_BUILD_TESTS=OFF \ + -Dprotobuf_ABSL_PROVIDER=package \ + -DCMAKE_PREFIX_PATH=$HOME/local \ + -DCMAKE_INSTALL_PREFIX=$HOME/local \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON + ninja + ninja install + + echo "=== Check for QualifiedClassName ===" + grep -r "QualifiedClassName" $HOME/local/include/google/protobuf/ || echo "Not found in headers" + + - name: Compile grpc-java plugin + run: | + cd compiler/src/java_plugin/cpp + + clang++ -std=c++17 -mmacosx-version-min=10.15 \ + -I$HOME/local/include \ + -c java_generator.cpp -o java_generator.o + + clang++ -std=c++17 -mmacosx-version-min=10.15 \ + -I$HOME/local/include \ + -c java_plugin.cpp -o java_plugin.o + + clang++ -mmacosx-version-min=10.15 \ + java_generator.o java_plugin.o \ + $HOME/local/lib/libprotoc.a \ + $HOME/local/lib/libprotobuf.a \ + $HOME/local/lib/libutf8_validity.a \ + $HOME/local/lib/libabsl_*.a \ + -lc++ \ + -framework CoreFoundation \ + -o protoc-gen-grpc-java + + echo "=== Checking dependencies ===" + otool -L protoc-gen-grpc-java + + file protoc-gen-grpc-java + ls -lh protoc-gen-grpc-java + + ./protoc-gen-grpc-java --version || echo "Done" + + mkdir -p $GITHUB_WORKSPACE/output + cp protoc-gen-grpc-java $GITHUB_WORKSPACE/output/ + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: protoc-gen-grpc-java-arm64-static + path: output/protoc-gen-grpc-java