This repository has been archived by the owner on Nov 5, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Build libxaie and generate ctype bindings
- Loading branch information
1 parent
9c3f91a
commit 272fb37
Showing
15 changed files
with
963 additions
and
1 deletion.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
name: "Setup base" | ||
|
||
inputs: | ||
MATRIX_OS: | ||
description: 'matrix.os' | ||
required: true | ||
MATRIX_ARCH: | ||
description: 'matrix.arch' | ||
required: true | ||
|
||
description: '' | ||
|
||
runs: | ||
using: "composite" | ||
steps: | ||
- uses: ilammy/[email protected] | ||
if: ${{ inputs.MATRIX_OS == 'windows-2019' }} | ||
|
||
- name: Set up Visual Studio shell | ||
if: ${{ inputs.MATRIX_OS == 'windows-2019' }} | ||
uses: egor-tensin/vs-shell@v2 | ||
with: | ||
arch: x64 | ||
|
||
- name: MS Build | ||
if: ${{ inputs.MATRIX_OS == 'windows-2019' }} | ||
uses: microsoft/[email protected] | ||
|
||
# - name: Free disk space | ||
# if: contains(inputs.MATRIX_OS, 'ubuntu') | ||
# uses: descriptinc/free-disk-space@main | ||
# with: | ||
# tool-cache: true | ||
# android: true | ||
# dotnet: true | ||
# haskell: true | ||
# large-packages: true | ||
# swap-storage: false # This frees space on the wrong partition. | ||
|
||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: '3.11' | ||
|
||
- name: Install Ninja | ||
uses: llvm/actions/install-ninja@6a57890d0e3f9f35dfc72e7e48bc5e1e527cdd6c # Jan 17 | ||
|
||
- name: Install cross-compilation toolchain | ||
shell: bash | ||
if: ${{ inputs.MATRIX_OS == 'ubuntu-20.04' && inputs.MATRIX_ARCH == 'aarch64' }} | ||
run: | | ||
sudo apt-get update | ||
sudo apt-get install -y binutils-aarch64-linux-gnu \ | ||
g++-aarch64-linux-gnu gcc-aarch64-linux-gnu | ||
- name: pip install standard tools | ||
shell: bash | ||
run: pip install cibuildwheel wheel auditwheel |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,168 @@ | ||
name: Wheels | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
pull_request: | ||
types: [assigned, opened, synchronize, reopened] | ||
workflow_dispatch: | ||
|
||
jobs: | ||
|
||
build: | ||
|
||
continue-on-error: true | ||
|
||
runs-on: ${{ matrix.OS }} | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
include: | ||
- OS: ubuntu-20.04 | ||
ARCH: x86_64 | ||
|
||
- OS: windows-2019 | ||
ARCH: AMD64 | ||
|
||
defaults: | ||
run: | ||
shell: bash | ||
|
||
steps: | ||
|
||
- name: Checkout actions | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: true | ||
|
||
- uses: ./.github/actions/setup_base | ||
id: setup_base | ||
with: | ||
MATRIX_OS: ${{ matrix.OS }} | ||
MATRIX_ARCH: ${{ matrix.ARCH }} | ||
|
||
# build | ||
|
||
- name: cibuildwheel python bindings | ||
run: | | ||
cibuildwheel --output-dir wheelhouse | ||
- name: test | ||
run: | | ||
pushd wheelhouse | ||
pip install xaiepy -f $PWD | ||
python ../tests/test_xaie_ctypes.py | ||
popd | ||
# done | ||
|
||
- name: Upload wheels | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
path: wheelhouse/*.whl | ||
name: build_artifact_python_bindings | ||
|
||
build-linux-aarch64: | ||
|
||
continue-on-error: true | ||
|
||
runs-on: ${{ matrix.OS }} | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
include: | ||
- OS: ubuntu-20.04 | ||
ARCH: aarch64 | ||
PY_VERSION: "cp38" | ||
|
||
- OS: ubuntu-20.04 | ||
ARCH: aarch64 | ||
PY_VERSION: "cp39" | ||
|
||
- OS: ubuntu-20.04 | ||
ARCH: aarch64 | ||
PY_VERSION: "cp310" | ||
|
||
- OS: ubuntu-20.04 | ||
ARCH: aarch64 | ||
PY_VERSION: "cp311" | ||
|
||
- OS: ubuntu-20.04 | ||
ARCH: aarch64 | ||
PY_VERSION: "cp312" | ||
|
||
steps: | ||
- name: Checkout actions | ||
uses: actions/checkout@v3 | ||
with: | ||
submodules: true | ||
|
||
- uses: ./.github/actions/setup_base | ||
id: setup_base | ||
with: | ||
MATRIX_OS: ${{ matrix.OS }} | ||
MATRIX_ARCH: ${{ matrix.ARCH }} | ||
|
||
- name: Set up QEMU | ||
if: ${{ matrix.OS == 'ubuntu-20.04' && matrix.ARCH == 'aarch64' }} | ||
uses: docker/setup-qemu-action@v2 | ||
with: | ||
platforms: ${{ matrix.ARCH }} | ||
|
||
# build | ||
|
||
- name: cibuildwheel python bindings aarch64 | ||
run: | | ||
cibuildwheel --output-dir wheelhouse | ||
- name: test | ||
run: | | ||
pushd wheelhouse | ||
pip install xaiepy -f $PWD | ||
python ../tests/test_xaie_ctypes.py | ||
popd | ||
# done | ||
|
||
- name: Upload wheels | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
path: wheelhouse/*.whl | ||
name: build_artifact_python_bindings | ||
|
||
upload_bindings_wheels: | ||
|
||
if: github.event_name != 'pull_request' | ||
|
||
needs: [build, build-linux-aarch64] | ||
|
||
runs-on: ubuntu-latest | ||
|
||
permissions: | ||
id-token: write | ||
contents: write | ||
|
||
steps: | ||
- uses: actions/download-artifact@v3 | ||
with: | ||
# unpacks default artifact into dist/ | ||
# if `name: artifact` is omitted, the action will create extra parent dir | ||
name: build_artifact_python_bindings | ||
path: dist | ||
|
||
- name: Release current commit | ||
uses: ncipollo/[email protected] | ||
with: | ||
artifacts: "dist/*.whl" | ||
token: "${{ secrets.GITHUB_TOKEN }}" | ||
tag: "latest" | ||
name: "latest" | ||
removeArtifacts: false | ||
allowUpdates: true | ||
replacesArtifacts: true | ||
makeLatest: true |
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
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
[submodule "third_party/bootgen"] | ||
path = third_party/bootgen | ||
url = https://github.com/Xilinx/bootgen.git | ||
[submodule "third_party/aie-rt"] | ||
path = third_party/aie-rt | ||
url = [email protected]:stephenneuendorffer/aie-rt.git |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
cmake_minimum_required(VERSION 3.15) | ||
project(xaiepy) | ||
|
||
include(collect) | ||
|
||
#find_package(OpenSSL REQUIRED) | ||
#if(OPENSSL_FOUND) | ||
# message(STATUS "OpenSSL found") | ||
# message(STATUS "OpenSSL include directories:" ${OPENSSL_INCLUDE_DIR}) | ||
#else() | ||
# message(FATAL_ERROR "OpenSSL Not found.") | ||
#endif() | ||
|
||
set(BOOTGEN_SRC_DIR ${PROJECT_SOURCE_DIR}/third_party/bootgen) | ||
# malloc.h is deprecated and should not be used | ||
# https://stackoverflow.com/a/56463133 If you want to use malloc, then include | ||
# stdlib.h | ||
file(READ ${BOOTGEN_SRC_DIR}/cdo-npi.c FILE_CONTENTS) | ||
string(REPLACE "#include <malloc.h>" "" FILE_CONTENTS "${FILE_CONTENTS}") | ||
file(WRITE ${BOOTGEN_SRC_DIR}/cdo-npi.c "${FILE_CONTENTS}") | ||
|
||
file(READ ${BOOTGEN_SRC_DIR}/cdo-alloc.c FILE_CONTENTS) | ||
string(REPLACE "#include <malloc.h>" "" FILE_CONTENTS "${FILE_CONTENTS}") | ||
file(WRITE ${BOOTGEN_SRC_DIR}/cdo-alloc.c "${FILE_CONTENTS}") | ||
|
||
# since we explicitly link OpenSSL::applink | ||
file(READ ${BOOTGEN_SRC_DIR}/main.cpp FILE_CONTENTS) | ||
string(REPLACE "#include \"openssl/ms/applink.c\"" "" FILE_CONTENTS | ||
"${FILE_CONTENTS}") | ||
file(WRITE ${BOOTGEN_SRC_DIR}/main.cpp "${FILE_CONTENTS}") | ||
|
||
# objlib | ||
file(GLOB BOOTGEN_SOURCE_SRCS ${BOOTGEN_SRC_DIR}/*.c*) | ||
list(REMOVE_ITEM BOOTGEN_SOURCE_SRCS ${BOOTGEN_SRC_DIR}/main.cpp) | ||
add_library(bootgen_objlib OBJECT ${BOOTGEN_SOURCE_SRCS}) | ||
set_property(TARGET bootgen_objlib PROPERTY POSITION_INDEPENDENT_CODE 1) | ||
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") | ||
target_compile_definitions(bootgen_objlib PRIVATE YY_NO_UNISTD_H) | ||
endif() | ||
target_include_directories(bootgen_objlib PRIVATE ${BOOTGEN_SRC_DIR} | ||
${OPENSSL_INCLUDE_DIR}) | ||
target_link_libraries(bootgen_objlib PUBLIC) | ||
|
||
add_library(bootgen_shared SHARED $<TARGET_OBJECTS:bootgen_objlib>) | ||
add_library(bootgen_static STATIC $<TARGET_OBJECTS:bootgen_objlib>) | ||
|
||
#add_executable(bootgen ${BOOTGEN_SRC_DIR}/main.cpp) | ||
#target_include_directories( | ||
# bootgen PUBLIC ${BOOTGEN_SRC_DIR} ${OPENSSL_INCLUDE_DIR} | ||
# ${CMAKE_CURRENT_BINARY_DIR}/include) | ||
#target_compile_definitions(bootgen PRIVATE OPENSSL_USE_APPLINK) | ||
#target_link_libraries(bootgen PRIVATE bootgen_static OpenSSL::SSL | ||
# OpenSSL::applink) | ||
|
||
add_library(cdo_driver STATIC ${BOOTGEN_SRC_DIR}/cdo-driver/cdo_driver.c) | ||
# because primarily this will be linked into libxaie.so... if not you get | ||
# /usr/bin/ld: libcdo_driver.a(cdo_driver.c.o): warning: relocation against | ||
# `hdr' in read-only section `.text' /usr/bin/ld: | ||
# libcdo_driver.a(cdo_driver.c.o): relocation R_X86_64_PC32 against symbol | ||
# `LEfwrite' can not be used when making a shared object; recompile with -fPIC | ||
set_property(TARGET cdo_driver PROPERTY POSITION_INDEPENDENT_CODE 1) | ||
|
||
target_include_directories( | ||
cdo_driver PUBLIC $<BUILD_INTERFACE:${BOOTGEN_SRC_DIR}/cdo-driver> | ||
$<INSTALL_INTERFACE:include/cdo_driver>) | ||
if(NOT CMAKE_CXX_COMPILER_ID MATCHES "MSVC") | ||
target_compile_options(cdo_driver PRIVATE -Wno-cast-qual -Wno-sign-compare) | ||
endif() | ||
|
||
set(AIERT_SRC_DIR ${PROJECT_SOURCE_DIR}/third_party/aie-rt/driver/src) | ||
# gotta add the subdirectory so the copies to build/include/xaiengine occur... | ||
add_subdirectory(${AIERT_SRC_DIR}) | ||
|
||
target_compile_options(aienginev2 PRIVATE -Wall -Wextra -D__AIECDO__) | ||
get_target_property(AIERT_SRCS aienginev2 SOURCES) | ||
list(TRANSFORM AIERT_SRCS PREPEND ${AIERT_SRC_DIR}/) | ||
get_target_property(AIERT_INCLUDE_DIRECTORIES aienginev2 INCLUDE_DIRECTORIES) | ||
|
||
add_library(xaie SHARED ${AIERT_SRCS}) | ||
set_target_properties(xaie PROPERTIES LINKER_LANGUAGE C) | ||
target_compile_options(xaie PRIVATE -D__AIECDO__) | ||
target_link_libraries(xaie cdo_driver) | ||
target_include_directories(xaie PUBLIC ${AIERT_INCLUDE_DIRECTORIES} ${BOOTGEN_SRC_DIR}) |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,22 @@ | ||
# xaiepy | ||
AIE-RT + Python | ||
|
||
```shell | ||
$ pip install xaiepy -f https://github.com/makslevental/xaiepy/releases/expanded_assets/latest | ||
$ python tests/test_xaie_ctypes.py | ||
|
||
opcode='XAIE_IO_WRITE' | ||
reg_off=000000000021d000 | ||
val=0 | ||
mask=000000000fffc000 | ||
|
||
opcode='XAIE_IO_WRITE' | ||
reg_off=000000000021d020 | ||
val=0 | ||
mask=000000000fffc000 | ||
|
||
opcode='XAIE_IO_WRITE' | ||
reg_off=000000000021d040 | ||
val=0 | ||
mask=000000000fffc000 | ||
``` |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
[build-system] | ||
requires = [ | ||
"setuptools>=42", | ||
"wheel", | ||
"cmake>=3.12", | ||
"ctypesgen" | ||
] | ||
build-backend = "setuptools.build_meta" | ||
|
||
[tool.cibuildwheel] | ||
before-all = [ | ||
"rm -rf {project}/build", | ||
"rm -rf *egg*", | ||
] | ||
build-verbosity = 3 | ||
build = "cp38-* cp39-* cp310-* cp311-* cp312-*" | ||
skip = ["*-manylinux_i686", "*-musllinux*"] | ||
manylinux-aarch64-image = "manylinux_2_28" | ||
manylinux-x86_64-image = "manylinux_2_28" | ||
|
||
[tool.cibuildwheel.linux] | ||
before-build = [ | ||
"pip install -r requirements-dev.txt", | ||
] | ||
|
||
[tool.cibuildwheel.windows] | ||
skip = ["*-win32"] | ||
build = "cp38-* cp39-* cp310-* cp311-* cp312-*" |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
setuptools>=42 | ||
wheel | ||
ninja | ||
cmake>=3.28 | ||
ctypesgen | ||
cmake-format | ||
black |
Oops, something went wrong.