summaryrefslogtreecommitdiff
path: root/ANNC.spec
blob: fca393d228962cb03976511d8d960afc023481ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
%global pkg_version %{name}-v%{version}

%global build_dir %{_builddir}/%{pkg_version}

%global install_libdir %{buildroot}%{_libdir}
%global install_includedir %{buildroot}%{_includedir}/annc

%global max_jobs 16

%define debug_package %{nil}

Summary: %{name} is an AI compiler designed to optimize and compile ML model into high-performance executable code that can be executed on various targets.
Name:       ANNC
Version:    0.0.2
Release:    1
# Package onnxruntime and SafeInt have MIT License.
# Package onnx has Apache License 2.0.
License:    MIT and ASL 2.0 and Boost and BSD
URL:        https://gitee.com/openeuler/AI4C
Source0:    %{pkg_version}.tar.gz
Source1:    annc_external.tar.gz.aa
Source2:    annc_external.tar.gz.ab
%ifarch x86_64
Patch0:    x86_64_external_files.patch
%endif

BuildRequires:  cmake >= 3.9.9
BuildRequires:  gcc
BuildRequires:  gcc-c++
BuildRequires:  bzip2
BuildRequires:  python3-devel
BuildRequires:  python3-numpy
BuildRequires:  python3-setuptools
BuildRequires:  python3-pip
BuildRequires:  python3-wheel
BuildRequires:  libstdc++-static
BuildRequires:  git
BuildRequires:  java-11-openjdk
BuildRequires:  java-11-openjdk-devel
BuildRequires:  bazel

%description
%{name} is is an AI compiler designed to optimize and compile ML model into high-performance executable code that can be executed on various targets.

%prep
cat %{SOURCE1} %{SOURCE2} > annc_external.tar.gz
tar -xzf annc_external.tar.gz -C .
%ifarch x86_64
%patch 0 -p0 -d .
%endif

%autosetup -S git -n %{pkg_version}

%build
export ANNC=%{build_dir}
cd %{build_dir}/annc/service/cpu/xla/libs
bash xnnpack.sh

export XNNPACK_BASE="$ANNC/annc/service/cpu/xla/libs"
export XNNPACK_DIR="$XNNPACK_BASE/XNNPACK"

CPLUS_INCLUDE_PATH+="$ANNC/annc/service/cpu/xla:"
CPLUS_INCLUDE_PATH+="$ANNC/annc/service/:"
CPLUS_INCLUDE_PATH+="$XNNPACK_DIR/:"
CPLUS_INCLUDE_PATH+="$XNNPACK_DIR/include/:"
CPLUS_INCLUDE_PATH+="$XNNPACK_DIR/src/:"
CPLUS_INCLUDE_PATH+="$XNNPACK_DIR/build/pthreadpool-source/include/:"
export CPLUS_INCLUDE_PATH

export LD_LIBRARY_PATH=$XNNPACK_DIR:$LD_LIBRARY_PATH

run_bazel_build() {
    bazel --output_user_root=./output \
        build -c opt \
        --verbose_failures \
        --action_env="baila=548" \
        --define tflite_with_xnnpack=false \
        --copt="-g" \
        --copt="-DNDBUG" \
        annc/service/cpu:libannc.so
}

fix_action() {
    echo "Perfoming fix action..."
    external_path=$(find . -name "external" | head -n 1)
    if [ -n "$external_path" ]; then
        rm -rf $external_path/*
        cp -r %{_builddir}/external/* $external_path
    else
        echo "Not find external directory."
    fi
    run_bazel_build
}

cd %{build_dir}
if run_bazel_build; then
    echo "Build succeeded."
else
    echo "Build failed."
    fix_action
fi

pushd %{build_dir}/python
%{__python3} setup.py bdist_wheel

%install
install -d %{install_includedir}
install %{build_dir}/annc/service/cpu/kdnn_rewriter.h -t %{install_includedir}
install %{build_dir}/install/*.patch -t %{install_includedir}
install %{build_dir}/python/tensorflow/kernels/* -t %{install_includedir}
install -d %{install_libdir}
output_path=$(find %{build_dir} -type f -name "libannc.so")
install ${output_path} -t %{install_libdir}
install %{build_dir}/annc/service/cpu/xla/libs/XNNPACK/build/*.so -t %{install_libdir}

pushd %{build_dir}/python
%py3_install

%files
%{_includedir}/annc/*
%{_libdir}/*
%{python3_sitelib}/*
/usr/bin/annc-opt
/usr/bin/annc-apply-tf

%changelog
* Mon May 12 2025 Chenhui Zheng <zhengchenhui1@huawei.com> - 0.0.1-1
- Type:Init
- ID:NA
- SUG:NA
- DEC:Init ANNC repository