summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Jacobs <kjacobs@mozilla.com>2019-05-03 20:44:52 +0000
committerKevin Jacobs <kjacobs@mozilla.com>2019-05-03 20:44:52 +0000
commit80740228fe8a38ce51335520d2edd2ead179e0a7 (patch)
tree433eacdfa6602111cf129db252f51e0814313070
parent3ed4ae2e3583bca6e7aa163f380d754f8b853d99 (diff)
downloadnss-hg-NSS_3_44_BETA1.tar.gz
Bug 1548398 - Add freebl_gtest to nss.gyp, fix freebl_gtest cross-compilation and gcc-4.8 support. r=jcjNSS_3_44_BETA1
Updated gyp files to add -msse2 GCC option, iff the compiler is gcc and target is x64 or ia32. Root cause for the 4.8 failure is a gcc bug where the "#pragma GCC target("sse2")" option used in gcm.h doesn't work when compiling C++ code, as the gtests do. Differential Revision: https://phabricator.services.mozilla.com/D29886
-rw-r--r--coreconf/check_cc.py (renamed from coreconf/check_cc_clang.py)9
-rw-r--r--coreconf/config.gypi8
-rw-r--r--gtests/freebl_gtest/freebl_gtest.gyp7
-rw-r--r--gtests/freebl_gtest/mpi_unittest.cc14
-rw-r--r--gtests/freebl_gtest/rsa_unittest.cc1
-rw-r--r--nss.gyp1
6 files changed, 29 insertions, 11 deletions
diff --git a/coreconf/check_cc_clang.py b/coreconf/check_cc.py
index 4b9541195..6d7e38096 100644
--- a/coreconf/check_cc_clang.py
+++ b/coreconf/check_cc.py
@@ -5,17 +5,18 @@ import subprocess
import sys
def main():
- if sys.platform == 'win32':
+ if sys.platform == 'win32' or len(sys.argv) < 2:
print(0)
else:
cc = os.environ.get('CC', 'cc')
try:
- cc_is_clang = 'clang' in subprocess.check_output(
+ cc_is_arg = sys.argv[1] in subprocess.check_output(
[cc, '--version'], universal_newlines=True)
except OSError:
# We probably just don't have CC/cc.
- cc_is_clang = False
- print(int(cc_is_clang))
+ cc_is_arg = False
+ print(int(cc_is_arg))
if __name__ == '__main__':
main()
+
diff --git a/coreconf/config.gypi b/coreconf/config.gypi
index 1dde15fe3..a0d381f0c 100644
--- a/coreconf/config.gypi
+++ b/coreconf/config.gypi
@@ -64,10 +64,15 @@
],
}],
['"<(GENERATOR)"=="ninja"', {
- 'cc_is_clang%': '<!(<(python) <(DEPTH)/coreconf/check_cc_clang.py)',
+ 'cc_is_clang%': '<!(<(python) <(DEPTH)/coreconf/check_cc.py clang)',
}, {
'cc_is_clang%': '0',
}],
+ ['"<(GENERATOR)"=="ninja"', {
+ 'cc_is_gcc%': '<!(<(python) <(DEPTH)/coreconf/check_cc.py gcc)',
+ }, {
+ 'cc_is_gcc%': '0',
+ }],
],
},
# Copy conditionally-set variables out one scope.
@@ -86,6 +91,7 @@
'dll_suffix': '<(dll_suffix)',
'freebl_name': '<(freebl_name)',
'cc_is_clang%': '<(cc_is_clang)',
+ 'cc_is_gcc%': '<(cc_is_gcc)',
'cc_use_gnu_ld%': '<(cc_use_gnu_ld)',
# Some defaults
'disable_tests%': 0,
diff --git a/gtests/freebl_gtest/freebl_gtest.gyp b/gtests/freebl_gtest/freebl_gtest.gyp
index 21a87c557..bc9bd9584 100644
--- a/gtests/freebl_gtest/freebl_gtest.gyp
+++ b/gtests/freebl_gtest/freebl_gtest.gyp
@@ -40,6 +40,13 @@
'freebl_gtest_deps',
'<(DEPTH)/exports.gyp:nss_exports',
],
+ 'conditions': [
+ [ 'cc_is_gcc==1 and (target_arch=="ia32" or target_arch=="x64")', {
+ 'cflags_cc': [
+ '-msse2',
+ ],
+ }],
+ ],
},
{
'target_name': 'prng_gtest',
diff --git a/gtests/freebl_gtest/mpi_unittest.cc b/gtests/freebl_gtest/mpi_unittest.cc
index 2ccb8c351..b0944975e 100644
--- a/gtests/freebl_gtest/mpi_unittest.cc
+++ b/gtests/freebl_gtest/mpi_unittest.cc
@@ -6,6 +6,7 @@
#include <stdint.h>
#include <string.h>
+#include <memory>
#ifdef __MACH__
#include <mach/clock.h>
@@ -27,7 +28,7 @@ void gettime(struct timespec* tp) {
tp->tv_sec = mts.tv_sec;
tp->tv_nsec = mts.tv_nsec;
#else
- clock_gettime(CLOCK_MONOTONIC, tp);
+ ASSERT_NE(0, timespec_get(tp, TIME_UTC));
#endif
}
@@ -84,8 +85,9 @@ class MPITest : public ::testing::Test {
mp_int a;
ASSERT_EQ(MP_OKAY, mp_init(&a));
ASSERT_EQ(MP_OKAY, mp_read_unsigned_octets(&a, ref.data(), ref.size()));
- uint8_t buf[len];
- ASSERT_EQ(MP_OKAY, mp_to_fixlen_octets(&a, buf, len));
+ std::unique_ptr<uint8_t[]> buf(new uint8_t[len]);
+ ASSERT_NE(buf, nullptr);
+ ASSERT_EQ(MP_OKAY, mp_to_fixlen_octets(&a, buf.get(), len));
size_t compare;
if (len > ref.size()) {
for (size_t i = 0; i < len - ref.size(); ++i) {
@@ -96,9 +98,9 @@ class MPITest : public ::testing::Test {
compare = len;
}
dump("value", ref.data(), ref.size());
- dump("output", buf, len);
- ASSERT_EQ(0, memcmp(buf + len - compare, ref.data() + ref.size() - compare,
- compare))
+ dump("output", buf.get(), len);
+ ASSERT_EQ(0, memcmp(buf.get() + len - compare,
+ ref.data() + ref.size() - compare, compare))
<< "comparing " << compare << " octets";
mp_clear(&a);
}
diff --git a/gtests/freebl_gtest/rsa_unittest.cc b/gtests/freebl_gtest/rsa_unittest.cc
index a1453168f..9a6a9c11f 100644
--- a/gtests/freebl_gtest/rsa_unittest.cc
+++ b/gtests/freebl_gtest/rsa_unittest.cc
@@ -5,6 +5,7 @@
#include "gtest/gtest.h"
#include <stdint.h>
+#include <memory>
#include "blapi.h"
#include "secitem.h"
diff --git a/nss.gyp b/nss.gyp
index eb4d63095..419d4f2ad 100644
--- a/nss.gyp
+++ b/nss.gyp
@@ -198,6 +198,7 @@
'gtests/certdb_gtest/certdb_gtest.gyp:certdb_gtest',
'gtests/freebl_gtest/freebl_gtest.gyp:prng_gtest',
'gtests/freebl_gtest/freebl_gtest.gyp:blake2b_gtest',
+ 'gtests/freebl_gtest/freebl_gtest.gyp:freebl_gtest',
'gtests/mozpkix_gtest/mozpkix_gtest.gyp:mozpkix_gtest',
'gtests/nss_bogo_shim/nss_bogo_shim.gyp:nss_bogo_shim',
'gtests/pk11_gtest/pk11_gtest.gyp:pk11_gtest',