summaryrefslogtreecommitdiff
path: root/ANNC.spec
blob: 36d764991968a9f62989f57320320cbc90bf5573 (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
%global pkg_version %{name}-v%{version}-alpha

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

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

%global max_jobs 8

%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.1
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
Source3:    annc_external.tar.gz.ac
%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
%setup -n %{pkg_version}
cat %{SOURCE1} %{SOURCE2} %{SOURCE3} > annc_external.tar.gz
tar -xzf annc_external.tar.gz -C %{_builddir}
%ifarch x86_64
%patch 0 -p1 -d %{_builddir}
%endif

%build
cd %{build_dir}

run_bazel_build() {
    bazel --output_user_root=./output \
        build -c opt --copt="-DANNC_ENABLED_GRAPH_OPT" \
        --copt="-DANNC_ENABLED_OPENBLAS" \
        --copt="-g" \
        --copt="-DNDBUG" \
        --jobs=%{max_jobs} \
        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
}

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}

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