1# pylint:disable=I0011,W0401,W0614,C0103,E0602
2############################################################################
3# Copyright 2016-2019 Intel Corporation
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9#     http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16############################################################################
17"""Build configuration for Ipp Crypto
18"""
19import os
20Import('*')
21
22env.PartVersion("2019.0.1")
23env.PartName("ippcp")
24ippcp_libname = '${PART_SHORT_NAME}'
25
26include_files = Pattern(
27    src_dir='include/', includes=['*.h'], excludes=[], recursive=True)
28
29src_files = Pattern(
30    src_dir='sources/ippcp/',
31    includes=[
32        '*.c',
33    ],
34    excludes=[
35        'pcparcfour*.c',
36        'pcpmain.c',
37        '*sm2.c',
38        'pcpsha1ca.c',
39        'pcpaes*.c',
40        'pcpdes*.c',
41        'pcpdlp*.c',
42        'pcphmac*.c',
43        'pcpmd5*.c',
44        'pcpng*.c',
45        'pcpprime*.c',
46        'pcprij*.c',
47        'pcprsa*.c',
48        'pcpsm3*.c',
49        'pcpsms4*.c',
50        'pcptdes*.c',
51        'pcpmont_expbinbnu_sscm.c',
52        'pcpmont_expwinbnu.c',
53        'pcpmont_expwinbnu_sscm.c',
54    ],
55    recursive=False)
56
57env.Append(CPPPATH=[AbsDir('include/')])
58env.ExportCPPPATH([AbsDir('include/')])
59env.Append(CPPPATH=[AbsDir('sources/include/')])
60env.Append(CPPPATH=[AbsDir('sources/ippcp/')])
61
62# ipp defines
63if env['TARGET_ARCH'] == 'x86':
64    env.Append(CPPDEFINES='_ARCH_IA32')
65else:
66    env.Append(CPPDEFINES='_ARCH_EM64T')
67# env.Append(CPPDEFINES = '_IPP_BE')  #only for BE targets
68env.Append(CPPDEFINES='_IPP_DEBUG')  #enable function sanity checking
69env.Append(CPPDEFINES='_IPP_C99')
70env.Append(CPPDEFINES='_IPP_v50_')
71env.Append(CPPDEFINES='_PX')
72env.Append(CPPDEFINES='_ABL_')
73
74env.Append(CPPDEFINES=['_DISABLE_ECP_SM2_'])
75env.Append(CPPDEFINES=[
76    '_DISABLE_ALG_SHA224_', '_DISABLE_ALG_SHA512_224_', '_DISABLE_ALG_MD5_',
77    '_DISABLE_ALG_SM3_'
78])  #disable unused hash algs
79
80env.SdkInclude(include_files)
81
82if 'use_commercial_ipp' in env['MODE']:
83    env['CCOPY_LOGIC'] = 'copy'
84    try:
85        IPPCRYPTOROOT = os.environ['IPPCRYPTOROOT']
86    except KeyError, e:
87        env.PrintError(
88            "Necessary environment variable not set: ", e, show_stack=False)
89    if env['TARGET_PLATFORM']['OS'] == 'win32':
90        libpre = ''
91        libpost = '.lib'
92        IPP_TH_SYMBOL = 'mt'
93    else:
94        libpre = 'lib'
95        libpost = '.a'
96        IPP_TH_SYMBOL = ''
97    if env['TARGET_PLATFORM']['ARCH'] == 'x86':
98        archdir = 'ia32/'
99    else:
100        archdir = 'intel64/'
101
102    ippcp_libname = libpre + 'ippcp' + IPP_TH_SYMBOL + libpost
103    ippcp_dir = IPPCRYPTOROOT + '/lib/' + archdir
104    env.SdkLib(ippcp_dir + ippcp_libname)
105else:
106    all_c_files = src_files.files()
107    if 'build_ipp_shared' in env['MODE']:
108        env.Append(CPPDEFINES=['IPP_W32DLL'])
109        outputs = env.SharedLibrary(ippcp_libname, all_c_files)
110        env.InstallTarget(outputs)
111    else:
112        outputs = env.Library(ippcp_libname, all_c_files)
113        env.SdkLib(outputs)
114        if 'install_lib' in env['MODE']:
115            env.InstallLib(outputs)
116