diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..61af5c4c6 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,62 @@ +name: Release + +on: + push: + tags: ['v*'] + +permissions: + contents: write + +jobs: + linux-x86_64: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v4 + + - name: Install LLVM and build tools + run: | + sudo apt-get update + sudo apt-get install -y \ + llvm-19 llvm-19-dev clang-19 \ + ninja-build cmake python3 \ + zlib1g-dev libxml2-dev libzstd-dev + + - name: Configure + run: | + cmake -S . -B build \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_DIR=/usr/lib/llvm-19 \ + -DCMAKE_C_COMPILER=clang-19 \ + -DCMAKE_CXX_COMPILER=clang++-19 \ + -DCERAMIC_STATIC_LLVM=ON \ + -DCMAKE_EXE_LINKER_FLAGS="-static-libstdc++ -static-libgcc" + + - name: Build + run: cmake --build build + + - name: Stage release tree + run: | + tag="${GITHUB_REF_NAME}" + name="ceramic-${tag}-linux-x86_64" + mkdir -p "dist/${name}/bin" + cp build/compiler/ceramic "dist/${name}/bin/" + cp -r lib-ceramic "dist/${name}/" + cp LICENSE LICENSE.txt README.md "dist/${name}/" 2>/dev/null || true + echo "ARCHIVE_NAME=${name}" >> "$GITHUB_ENV" + + - name: Archive + run: | + cd dist + tar -czf "${ARCHIVE_NAME}.tar.gz" "${ARCHIVE_NAME}" + sha256sum "${ARCHIVE_NAME}.tar.gz" > "${ARCHIVE_NAME}.tar.gz.sha256" + + - name: Publish release + uses: softprops/action-gh-release@v2 + with: + files: | + dist/${{ env.ARCHIVE_NAME }}.tar.gz + dist/${{ env.ARCHIVE_NAME }}.tar.gz.sha256 + draft: true + generate_release_notes: true diff --git a/CMakeLists.txt b/CMakeLists.txt index 4425198ee..1093529df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,9 @@ if(UNIX) message("-- Using LLVM ${LLVM_PACKAGE_VERSION}: ${LLVM_INSTALL_PREFIX}") message("-- LLVM include dir: ${LLVM_INCLUDE_DIRS}") - if(LLVM_LINK_LLVM_DYLIB) + option(CERAMIC_STATIC_LLVM "Link LLVM components statically" OFF) + + if(LLVM_LINK_LLVM_DYLIB AND NOT CERAMIC_STATIC_LLVM) set(LLVM_LIBS LLVM) else() llvm_map_components_to_libnames(LLVM_LIBS all)