Fix missing relationship between Mach-O's symbol & libraries #1056
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: 'Linux x86-64' | |
on: push | |
jobs: | |
linux-sdk: | |
runs-on: ubuntu-latest | |
container: | |
image: liefproject/manylinux_2_28_x86_64 | |
env: | |
CCACHE_DIR: "/home/pylief/.ccache" | |
CXXFLAGS: "-ffunction-sections -fdata-sections -fvisibility-inlines-hidden -static-libstdc++ -static-libgcc" | |
CFLAGS: "-ffunction-sections -fdata-sections -static-libstdc++ -static-libgcc" | |
LDFLAGS: "-Wl,--gc-sections -Wl,--exclude-libs,ALL" | |
BUILD_DIR_STATIC: "/tmp/build/linux-x86-64/static-release" | |
BUILD_DIR_SHARED: "/tmp/build/linux-x86-64/shared-release" | |
CLICOLOR_FORCE: "1" | |
ACTIONS_RUNTIME_URL: "${{ env.ACTIONS_RUNTIME_URL }}" | |
ACTIONS_RUNTIME_TOKEN: "${{ env.ACTIONS_RUNTIME_TOKEN }}" | |
ACTIONS_CACHE_URL: "${{ env.ACTIONS_CACHE_URL }}" | |
options: --user 1001:1001 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Get Date | |
id: get-date | |
run: | | |
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Prepare ccache | |
shell: bash | |
run: | | |
mkdir -p /home/pylief/.ccache/tmp | |
- name: ccache cache files | |
uses: actions/cache@v4 | |
with: | |
path: /home/pylief/.ccache | |
key: linux-x86-64-${{ runner.os }}-sdk-${{ steps.get-date.outputs.date }} | |
restore-keys: | | |
linux-x86-64-${{ runner.os }}-sdk | |
- name: CMake - Static | |
shell: bash | |
run: | | |
mkdir -p ${BUILD_DIR_STATIC} | |
cmake -S $GITHUB_WORKSPACE -B ${BUILD_DIR_STATIC} -GNinja \ | |
-DCMAKE_LINK_WHAT_YOU_USE=on \ | |
-DBUILD_SHARED_LIBS=off \ | |
-DLIEF_INSTALL_COMPILED_EXAMPLES=on \ | |
-DCMAKE_INSTALL_PREFIX=/install \ | |
-DCMAKE_BUILD_TYPE=Release | |
- name: Compile - Static | |
shell: bash | |
run: | | |
cmake --build ${BUILD_DIR_STATIC} --target install | |
- name: CMake - Shared | |
shell: bash | |
run: | | |
mkdir -p ${BUILD_DIR_SHARED} | |
cmake -S $GITHUB_WORKSPACE -B ${BUILD_DIR_SHARED} -GNinja \ | |
-DCMAKE_LINK_WHAT_YOU_USE=on \ | |
-DBUILD_SHARED_LIBS=on \ | |
-DLIEF_INSTALL_COMPILED_EXAMPLES=off \ | |
-DCMAKE_BUILD_TYPE=Release | |
- name: Compile - Shared | |
run: | | |
cmake --build ${BUILD_DIR_SHARED} --target all | |
- name: Package | |
run: | | |
cd /tmp/build/linux-x86-64 | |
cpack --config $GITHUB_WORKSPACE/cmake/cpack.config.cmake | |
- name: 'Upload SDK Artifact' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux-x86-64-sdk | |
path: /tmp/build/linux-x86-64/*.tar.gz | |
retention-days: 3 | |
- name: 'Upload Install Artifact' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux-x86-64-install | |
path: /install | |
retention-days: 1 | |
testing: | |
if: "!contains(github.event.commits[0].message, '[skip-test]')" | |
runs-on: ubuntu-latest | |
container: | |
image: liefproject/manylinux_2_28_x86_64 | |
env: | |
PYTHON_BINARY: "/opt/python/cp38-cp38/bin/python3.8" | |
LIEF_SAMPLES_DIR: "/tmp/samples" | |
LIEF_BUILD_DIR: "/tmp/lief-build" | |
LIEF_VENV: "/tmp/venv" | |
CLICOLOR_FORCE: "1" | |
PYTEST_ADDOPTS: "--color=yes" | |
options: --user 1001:1001 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Get Date | |
id: get-date | |
run: | | |
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: ccache cache files | |
uses: actions/cache@v4 | |
with: | |
path: ~/.ccache | |
key: linux-x86-64-${{ runner.os }}-test-${{ steps.get-date.outputs.date }} | |
restore-keys: | | |
linux-x86-64-${{ runner.os }}-test | |
- name: Prepare Python virtual env | |
shell: bash | |
run: | | |
$PYTHON_BINARY -m venv ${LIEF_VENV} | |
source ${LIEF_VENV}/bin/activate | |
python -m pip install \ | |
-r tests/requirements.txt \ | |
-r api/python/build-requirements.txt | |
- name: Build & install LIEF | |
shell: bash | |
run: | | |
source ${LIEF_VENV}/bin/activate | |
export PYLIEF_CONF="${GITHUB_WORKSPACE}/scripts/docker/config/pylinux-test-x64.toml" | |
python -m pip -vvv install api/python | |
- name: Prepare test samples | |
shell: bash | |
run: | | |
source ${LIEF_VENV}/bin/activate | |
mkdir -p ${LIEF_SAMPLES_DIR} | |
python tests/dl_samples.py ${LIEF_SAMPLES_DIR} | |
- name: Run tests | |
timeout-minutes: 5 | |
shell: bash | |
run: | | |
source ${LIEF_VENV}/bin/activate | |
python tests/run_pytest.py | |
python tests/run_tools_check.py ${LIEF_BUILD_DIR}/ | |
ctest --output-on-failure --test-dir ${LIEF_BUILD_DIR}/ | |
- name: Fuzzing [ls x86-64] | |
shell: bash | |
timeout-minutes: 20 | |
run: | | |
source ${LIEF_VENV}/bin/activate | |
export PYTHONPATH="${GITHUB_WORKSPACE}/tests:$PYTHONPATH" | |
python tests/elf/fuzzing.py \ | |
${LIEF_BUILD_DIR}/tests/Melkor/src/MELKOR/melkor \ | |
--input-seed ${LIEF_SAMPLES_DIR}/ELF/ELF64_x86-64_binary_ls.bin -n 100 | |
- name: Fuzzing [openssl x86-64] | |
shell: bash | |
timeout-minutes: 20 | |
run: | | |
source ${LIEF_VENV}/bin/activate | |
export PYTHONPATH="${GITHUB_WORKSPACE}/tests:$PYTHONPATH" | |
python tests/elf/fuzzing.py \ | |
${LIEF_BUILD_DIR}/tests/Melkor/src/MELKOR/melkor \ | |
--input-seed ${LIEF_SAMPLES_DIR}/ELF/ELF64_x86-64_binary_openssl.bin -n 100 | |
- name: Fuzzing [nm x86-64] | |
shell: bash | |
timeout-minutes: 20 | |
run: | | |
source ${LIEF_VENV}/bin/activate | |
export PYTHONPATH="${GITHUB_WORKSPACE}/tests:$PYTHONPATH" | |
python tests/elf/fuzzing.py \ | |
${LIEF_BUILD_DIR}/tests/Melkor/src/MELKOR/melkor \ | |
--input-seed ${LIEF_SAMPLES_DIR}/ELF/ELF64_x86-64_binary_nm.bin -n 100 | |
pywheels: | |
runs-on: ubuntu-latest | |
needs: linux-sdk | |
container: | |
image: liefproject/manylinux_2_28_x86_64 | |
env: | |
CCACHE_DIR: "/home/pylief/.ccache" | |
CXXFLAGS: "-ffunction-sections -fdata-sections -fvisibility-inlines-hidden -static-libgcc" | |
CFLAGS: "-ffunction-sections -fdata-sections -static-libgcc" | |
LDFLAGS: "-Wl,--gc-sections -Wl,--exclude-libs,ALL" | |
CLICOLOR_FORCE: "1" | |
FORCE_COLOR: "1" | |
LIEF_BUILD_DIR: "/tmp/lief-build" | |
ACTIONS_RUNTIME_URL: "${{ env.ACTIONS_RUNTIME_URL }}" | |
ACTIONS_RUNTIME_TOKEN: "${{ env.ACTIONS_RUNTIME_TOKEN }}" | |
ACTIONS_CACHE_URL: "${{ env.ACTIONS_CACHE_URL }}" | |
options: --user 1001:1001 | |
strategy: | |
matrix: | |
python-version: [3.8, 3.9, '3.10', '3.11', '3.12', '3.13'] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Get Date | |
id: get-date | |
run: | | |
echo "date=$(/bin/date -u "+%Y-%m-%d-%H;%M;%S")" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Prepare ccache | |
shell: bash | |
run: | | |
mkdir -p /home/pylief/.ccache/tmp | |
- name: ccache cache files | |
uses: actions/cache@v4 | |
with: | |
path: /home/pylief/.ccache | |
key: linux-x86-64-${{ runner.os }}-${{ matrix.python-version }}-${{ steps.get-date.outputs.date }} | |
restore-keys: | | |
linux-x86-64-${{ runner.os }}-${{ matrix.python-version }} | |
- name: Download LIEF install dir | |
uses: actions/download-artifact@v4 | |
with: | |
name: linux-x86-64-install | |
path: /install | |
- name: Generate wheel | |
env: | |
PYTHON_VERSION: ${{ matrix.python-version }} | |
shell: bash | |
run: | | |
export PYLIEF_CONF=$GITHUB_WORKSPACE/scripts/docker/config/pylinux-x64.toml | |
PYTHON_VERSION_ALT=$(echo "${PYTHON_VERSION}" | sed 's/\.//') # Transform 3.8 -> 38 | |
PYTHON_BINARY=/opt/python/cp${PYTHON_VERSION_ALT}-cp${PYTHON_VERSION_ALT}/bin/python${PYTHON_VERSION} | |
$PYTHON_BINARY -m pip -vvv wheel --disable-pip-version-check \ | |
--wheel-dir=$GITHUB_WORKSPACE/wheel_stage \ | |
$GITHUB_WORKSPACE/api/python | |
- name: Run auditwheel | |
shell: bash | |
run: | | |
ls -alh $GITHUB_WORKSPACE/wheel_stage | |
find $GITHUB_WORKSPACE/wheel_stage -exec \ | |
auditwheel repair -w $GITHUB_WORKSPACE/dist {} \; | |
ls -alh $GITHUB_WORKSPACE/dist | |
- name: 'Artifact' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux-x86-64-python${{ matrix.python-version }}-wheel | |
path: dist/*.whl | |
retention-days: 3 | |
deploy: | |
runs-on: ubuntu-latest | |
if: ${{ always() }} | |
needs: [linux-sdk, pywheels] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: linux-x86-64-* | |
merge-multiple: true | |
path: ${{ runner.temp }}/artifacts | |
- name: Display artifacts | |
run: ls -R | |
working-directory: ${{ runner.temp }}/artifacts | |
- name: Deploy | |
env: | |
LIEF_S3_KEY: ${{ secrets.LIEF_S3_KEY }} | |
LIEF_S3_SECRET: ${{ secrets.LIEF_S3_SECRET }} | |
shell: bash | |
run: | | |
docker run --rm \ | |
-v $GITHUB_WORKSPACE:/src \ | |
-v $RUNNER_TEMP:/runner_tmp \ | |
-e GITHUB_ACTIONS="true" \ | |
-e GITHUB_WORKSPACE=$GITHUB_WORKSPACE \ | |
-e GITHUB_REF=$GITHUB_REF \ | |
-e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \ | |
-e LIEF_S3_KEY=$LIEF_S3_KEY \ | |
-e LIEF_S3_SECRET=$LIEF_S3_SECRET \ | |
liefproject/deploy \ | |
python3 /src/.github/deploy.py /runner_tmp/artifacts | |
documentation: | |
needs: [deploy] | |
runs-on: ubuntu-latest | |
container: | |
image: liefproject/manylinux_2_28_x86_64 | |
env: | |
CIRCLE_CI_URL: "https://circleci.com/api/v2/project/gh/lief-project/doc/pipeline" | |
CIRCLE_CI_TOKEN: ${{ secrets.CIRCLE_CI_TOKEN }} | |
steps: | |
- name: Trigger documentation | |
if: github.ref == 'refs/heads/main' | |
run: | | |
curl --request POST --url ${CIRCLE_CI_URL} \ | |
--header "Circle-Token: ${CIRCLE_CI_TOKEN}" \ | |
--header 'content-type: application/json' \ | |
--data '{"parameters":{"lief-branch":"main"}}' |