Support symbol prefixes
- In base.h, if BORINGSSL_PREFIX is defined, include
boringssl_prefix_symbols.h
- In all .S files, if BORINGSSL_PREFIX is defined, include
boringssl_prefix_symbols_asm.h
- In base.h, BSSL_NAMESPACE_BEGIN and BSSL_NAMESPACE_END are
defined with appropriate values depending on whether
BORINGSSL_PREFIX is defined; these macros are used in place
of 'namespace bssl {' and '}'
- Add util/make_prefix_headers.go, which takes a list of symbols
and auto-generates the header files mentioned above
- In CMakeLists.txt, if BORINGSSL_PREFIX and BORINGSSL_PREFIX_SYMBOLS
are defined, run util/make_prefix_headers.go to generate header
files
- In various CMakeLists.txt files, add "global_target" that all
targets depend on to give us a place to hook logic that must run
before all other targets (in particular, the header file generation
logic)
- Document this in BUILDING.md, including the fact that it is
the caller's responsibility to provide the symbol list and keep it
up to date
- Note that this scheme has not been tested on Windows, and likely
does not work on it; Windows support will need to be added in a
future commit
Change-Id: If66a7157f46b5b66230ef91e15826b910cf979a2
Reviewed-on: https://boringssl-review.googlesource.com/31364
Commit-Queue: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt
index ea24add..ee7f8b6 100644
--- a/crypto/CMakeLists.txt
+++ b/crypto/CMakeLists.txt
@@ -401,6 +401,8 @@
${CRYPTO_FIPS_OBJECTS}
)
+add_dependencies(crypto global_target)
+
if(FIPS_DELOCATE)
add_dependencies(crypto bcm_o_target)
endif()
@@ -476,6 +478,8 @@
$<TARGET_OBJECTS:test_support>
)
+add_dependencies(crypto_test global_target)
+
target_link_libraries(crypto_test crypto boringssl_gtest)
if(WIN32)
target_link_libraries(crypto_test ws2_32)
diff --git a/crypto/err/internal.h b/crypto/err/internal.h
index 3f2397c..179f756 100644
--- a/crypto/err/internal.h
+++ b/crypto/err/internal.h
@@ -46,11 +46,11 @@
extern "C++" {
-namespace bssl {
+BSSL_NAMESPACE_BEGIN
BORINGSSL_MAKE_DELETER(ERR_SAVE_STATE, ERR_SAVE_STATE_free)
-} // namespace bssl
+BSSL_NAMESPACE_END
} // extern C++
#endif
diff --git a/crypto/fipsmodule/CMakeLists.txt b/crypto/fipsmodule/CMakeLists.txt
index babda94..1242aa2 100644
--- a/crypto/fipsmodule/CMakeLists.txt
+++ b/crypto/fipsmodule/CMakeLists.txt
@@ -136,6 +136,8 @@
bcm.c
)
+ add_dependencies(bcm_c_generated_asm global_target)
+
set_target_properties(bcm_c_generated_asm PROPERTIES COMPILE_OPTIONS "-S")
set_target_properties(bcm_c_generated_asm PROPERTIES POSITION_INDEPENDENT_CODE ON)
@@ -164,6 +166,8 @@
bcm-delocated.S
)
+ add_dependencies(bcm_hashunset global_target)
+
set_target_properties(bcm_hashunset PROPERTIES POSITION_INDEPENDENT_CODE ON)
set_target_properties(bcm_hashunset PROPERTIES LINKER_LANGUAGE C)
@@ -187,6 +191,8 @@
is_fips.c
)
+ add_dependencies(fipsmodule global_target)
+
set_target_properties(fipsmodule PROPERTIES LINKER_LANGUAGE C)
else()
add_library(
@@ -199,4 +205,6 @@
${BCM_ASM_SOURCES}
)
+
+ add_dependencies(fipsmodule global_target)
endif()
diff --git a/crypto/internal.h b/crypto/internal.h
index c4e2e51..0e8ae3a 100644
--- a/crypto/internal.h
+++ b/crypto/internal.h
@@ -488,7 +488,7 @@
#if defined(__cplusplus)
extern "C++" {
-namespace bssl {
+BSSL_NAMESPACE_BEGIN
namespace internal {
@@ -516,7 +516,7 @@
using MutexReadLock =
internal::MutexLockBase<CRYPTO_MUTEX_lock_read, CRYPTO_MUTEX_unlock_read>;
-} // namespace bssl
+BSSL_NAMESPACE_END
} // extern "C++"
#endif // defined(__cplusplus)
diff --git a/crypto/perlasm/x86_64-xlate.pl b/crypto/perlasm/x86_64-xlate.pl
index e2ea0d2..f6a57e0 100755
--- a/crypto/perlasm/x86_64-xlate.pl
+++ b/crypto/perlasm/x86_64-xlate.pl
@@ -1129,6 +1129,10 @@
%define XMMWORD
%define YMMWORD
%define ZMMWORD
+
+%ifdef BORINGSSL_PREFIX
+%include "boringssl_prefix_symbols_nasm.inc"
+%endif
___
} elsif ($masm) {
print <<___;
@@ -1136,6 +1140,9 @@
___
}
print STDOUT "#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM)\n" if ($gas);
+print STDOUT "#if defined(BORINGSSL_PREFIX)\n" if ($gas);
+print STDOUT "#include <boringssl_prefix_symbols_asm.h>\n" if ($gas);
+print STDOUT "#endif\n" if ($gas);
while(defined(my $line=<>)) {
diff --git a/crypto/test/CMakeLists.txt b/crypto/test/CMakeLists.txt
index 90707dd..3e02c3c 100644
--- a/crypto/test/CMakeLists.txt
+++ b/crypto/test/CMakeLists.txt
@@ -9,6 +9,8 @@
wycheproof_util.cc
)
+add_dependencies(test_support global_target)
+
add_library(
boringssl_gtest_main
@@ -16,3 +18,5 @@
gtest_main.cc
)
+
+add_dependencies(boringssl_gtest_main global_target)
diff --git a/crypto/test/gtest_main.h b/crypto/test/gtest_main.h
index d21af10..927ab17 100644
--- a/crypto/test/gtest_main.h
+++ b/crypto/test/gtest_main.h
@@ -30,7 +30,7 @@
#endif
-namespace bssl {
+BSSL_NAMESPACE_BEGIN
class ErrorTestEventListener : public testing::EmptyTestEventListener {
public:
@@ -73,7 +73,7 @@
new ErrorTestEventListener);
}
-} // namespace bssl
+BSSL_NAMESPACE_END
#endif // OPENSSL_HEADER_CRYPTO_TEST_GTEST_MAIN_H