summaryrefslogtreecommitdiff
path: root/ANNC.spec
blob: ae90771334cdf406d955f34a3c3ce6d81b819f24 (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
%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

%global 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/ANNC
Source0:    %{pkg_version}.tar.gz
Source1:    external.tar.gz.aa
Source2:    external.tar.gz.ab
Source3:    external.tar.gz.ac
Source4:    XNNPACK.tar.gz
Source5:    v3.2.tar.gz
%ifarch x86_64
Patch0:    x86_64_external_files.patch
%endif

BuildRequires:  cmake >= 3.9.9
BuildRequires:  make
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} %{SOURCE3} > external.tar.gz
tar xf external.tar.gz -C .
%ifarch x86_64
%patch0 -p1 -d .
%endif
tar xf %{SOURCE4} -C .
mkdir proxy
mv %{SOURCE5} ./proxy
%setup -q -n %{pkg_version}

%build
export ANNC=%{build_dir}
cd %{_builddir}/XNNPACK/build
CFLAGS="-fPIC" CXXFLAGS="-fPIC" cmake .. -DXNNPACK_BUILD_BENCHMARKS=OFF \
                        -DXNNPACK_BUILD_TESTS=OFF \
                        -DXNNPACK_LIBRARY_TYPE=shared \
                        -DCMAKE_BUILD_TYPE=Release
make -j %{max_jobs}
rm -rf $ANNC/annc/service/cpu/xla/libs/libXNNPACK.so
cp %{_builddir}/XNNPACK/build/libXNNPACK.so $ANNC/annc/service/cpu/xla/libs
export XNNPACK_DIR="%{_builddir}/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 \
        --jobs=%{max_jobs} \
        --distdir=%{_builddir}/proxy \
       annc/service/cpu:libannc.so
       # --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 -LR %{_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}/annc/service/cpu/annc_flags.h -t %{install_includedir}
cp -r %{build_dir}/install/*  %{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/libXNNPACK.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
* Fri Aug 22 2025 Chenhui Zheng <zhengchenhui1@huawei.com> - 0.0.2-1
- Type:Update
- ID:NA
- SUG:NA
- DEC:Release v0.0.2

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