1
- cmake_minimum_required (VERSION 3.12 )
1
+ cmake_minimum_required (VERSION 3.16 )
2
2
3
3
# Defer enabling C and CXX languages.
4
4
project (BoringSSL NONE)
@@ -97,7 +97,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
97
97
set (EMSCRIPTEN 1)
98
98
endif ()
99
99
100
- set (CMAKE_CXX_STANDARD 14 )
100
+ set (CMAKE_CXX_STANDARD 17 )
101
101
set (CMAKE_CXX_STANDARD_REQUIRED ON )
102
102
set (CMAKE_C_STANDARD 11)
103
103
set (CMAKE_C_STANDARD_REQUIRED ON )
@@ -123,7 +123,7 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CLANG)
123
123
endif ()
124
124
125
125
if (CLANG)
126
- set (C_CXX_FLAGS "${C_CXX_FLAGS} -Wnewline-eof -fcolor-diagnostics" )
126
+ set (C_CXX_FLAGS "${C_CXX_FLAGS} -Wnewline-eof -Wextra-semi - fcolor-diagnostics" )
127
127
else ()
128
128
# GCC (at least 4.8.4) has a bug where it'll find unreachable free() calls
129
129
# and declare that the code is trying to free a stack pointer.
@@ -365,7 +365,9 @@ if(FIPS_DELOCATE OR NOT OPENSSL_NO_ASM)
365
365
set (CMAKE_ASM_NASM_FLAGS "${CMAKE_ASM_NASM_FLAGS} -gcv8" )
366
366
else ()
367
367
enable_language (ASM)
368
- set (OPENSSL_ASM TRUE )
368
+ if (NOT OPENSSL_NO_ASM)
369
+ set (OPENSSL_ASM TRUE )
370
+ endif ()
369
371
# Work around https://gitlab.kitware.com/cmake/cmake/-/issues/20771 in older
370
372
# CMake versions.
371
373
if (APPLE AND CMAKE_VERSION VERSION_LESS 3.19)
@@ -447,7 +449,10 @@ if(USE_CUSTOM_LIBCXX)
447
449
libcxx PRIVATE
448
450
-D_LIBCPP_BUILDING_LIBRARY
449
451
-DLIBCXX_BUILDING_LIBCXXABI
452
+ -DLIBC_NAMESPACE=bssl_llvm_libc
450
453
)
454
+ # LLVM libc++ depends on some shared headers from LLVM libc.
455
+ target_include_directories (libcxx PRIVATE util/bot/llvm-libc)
451
456
set_target_properties (
452
457
libcxx libcxxabi PROPERTIES
453
458
COMPILE_FLAGS "-Wno-missing-prototypes -Wno-implicit-fallthrough"
@@ -529,15 +534,25 @@ if(FIPS_DELOCATE AND FIPS_SHARED)
529
534
message (FATAL_ERROR "Can't set both delocate and shared mode for FIPS build" )
530
535
endif ()
531
536
537
+ # OSS-Fuzz relies on BORINGSSL_ALLOW_CXX_RUNTIME because -fno-rtti and
538
+ # -fsanitize=vptr are incompatible.
539
+ set (NO_CXX_RUNTIME_FLAGS)
540
+ if (NOT MSVC AND NOT BORINGSSL_ALLOW_CXX_RUNTIME)
541
+ # Without -fno-exceptions, use of std::unique_ptr emits a call to
542
+ # std::terminate.
543
+ set (NO_CXX_RUNTIME_FLAGS -fno-exceptions -fno-rtti)
544
+ endif ()
545
+
532
546
if (FIPS_DELOCATE)
533
547
add_library (bcm_c_generated_asm STATIC ${BCM_SOURCES} )
548
+ # The C++ code in libcrypto shouldn't depend on libstdc++.
549
+ target_compile_options (bcm_c_generated_asm PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${NO_CXX_RUNTIME_FLAGS} > "-S" )
534
550
add_dependencies (bcm_c_generated_asm boringssl_prefix_symbols)
535
551
target_include_directories (bcm_c_generated_asm PRIVATE ${PROJECT_SOURCE_DIR} /include )
536
- set_target_properties (bcm_c_generated_asm PROPERTIES COMPILE_OPTIONS "-S" )
537
552
set_target_properties (bcm_c_generated_asm PROPERTIES POSITION_INDEPENDENT_CODE ON )
538
553
if (CLANG)
539
554
# Clang warns when passing both -c (from CMake) and -S.
540
- set_property ( TARGET bcm_c_generated_asm APPEND PROPERTY COMPILE_OPTIONS "-Wno-unused-command-line-argument" )
555
+ target_compile_options ( bcm_c_generated_asm PRIVATE "-Wno-unused-command-line-argument" )
541
556
endif ()
542
557
543
558
set (TARGET_FLAG "" )
@@ -581,6 +596,8 @@ elseif(FIPS_SHARED)
581
596
endif ()
582
597
583
598
add_library (bcm_library STATIC ${BCM_SOURCES} ${BCM_SOURCES_ASM_USED} )
599
+ # The C++ code in libcrypto shouldn't depend on libstdc++.
600
+ target_compile_options (bcm_library PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${NO_CXX_RUNTIME_FLAGS} >)
584
601
add_dependencies (bcm_library boringssl_prefix_symbols)
585
602
target_include_directories (bcm_library PRIVATE ${PROJECT_SOURCE_DIR} /include )
586
603
@@ -593,12 +610,16 @@ elseif(FIPS_SHARED)
593
610
set (CRYPTO_FIPS_OBJECTS bcm.o)
594
611
else ()
595
612
add_library (fipsmodule OBJECT ${BCM_SOURCES} ${BCM_SOURCES_ASM_USED} )
613
+ # The C++ code in libcrypto shouldn't depend on libstdc++.
614
+ target_compile_options (fipsmodule PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${NO_CXX_RUNTIME_FLAGS} >)
596
615
add_dependencies (fipsmodule boringssl_prefix_symbols)
597
616
target_include_directories (fipsmodule PRIVATE ${PROJECT_SOURCE_DIR} /include )
598
617
set (CRYPTO_FIPS_OBJECTS $<TARGET_OBJECTS:fipsmodule>)
599
618
endif ()
600
619
601
620
add_library (crypto ${CRYPTO_SOURCES} ${CRYPTO_FIPS_OBJECTS} ${CRYPTO_SOURCES_ASM_USED} )
621
+ # The C++ code in libcrypto shouldn't depend on libstdc++.
622
+ target_compile_options (crypto PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${NO_CXX_RUNTIME_FLAGS} >)
602
623
target_include_directories (crypto PUBLIC
603
624
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR} /include >
604
625
$<INSTALL_INTERFACE:include >
@@ -696,12 +717,9 @@ add_executable(pki_test ${PKI_TEST_SOURCES})
696
717
target_link_libraries (pki_test test_support_lib boringssl_gtest pki crypto)
697
718
add_dependencies (all_tests pki_test)
698
719
699
- # The PKI library requires C++17.
700
720
set_target_properties (
701
721
pki pki_test
702
722
PROPERTIES
703
- CXX_STANDARD 17
704
- CXX_STANDARD_REQUIRED YES
705
723
COMPILE_FLAGS "${PKI_CXX_FLAGS} " )
706
724
707
725
add_executable (bssl ${BSSL_SOURCES} )
@@ -721,7 +739,10 @@ if(FUZZ)
721
739
add_library (Fuzzer STATIC ${LIBFUZZER_SOURCES} )
722
740
# libFuzzer does not pass our aggressive warnings. It also must be built
723
741
# without -fsanitize-coverage options or clang crashes.
724
- set_target_properties (Fuzzer PROPERTIES COMPILE_FLAGS "-Wno-shadow -Wno-format-nonliteral -Wno-missing-prototypes -fsanitize-coverage=0" )
742
+ set_target_properties (
743
+ Fuzzer PROPERTIES
744
+ COMPILE_FLAGS "-Wno-shadow -Wno-format-nonliteral -Wno-missing-prototypes -fsanitize-coverage=0"
745
+ )
725
746
endif ()
726
747
727
748
add_subdirectory (fuzz)
@@ -793,19 +814,8 @@ else()
793
814
endif ()
794
815
795
816
if (INSTALL_ENABLED)
796
- # CMake versions before 3.14 do not have default destination values. Executable
797
- # and library targets that use a default destination should include this
798
- # variable.
799
- if (CMAKE_VERSION VERSION_LESS "3.14" )
800
- set (INSTALL_DESTINATION_DEFAULT
801
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
802
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
803
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} )
804
- endif ()
805
-
806
- install (TARGETS crypto ssl
807
- EXPORT OpenSSLTargets ${INSTALL_DESTINATION_DEFAULT} )
808
- install (TARGETS bssl DESTINATION ${INSTALL_DESTINATION_DEFAULT} )
817
+ install (TARGETS crypto ssl EXPORT OpenSSLTargets)
818
+ install (TARGETS bssl)
809
819
install (DIRECTORY include / DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} )
810
820
install (EXPORT OpenSSLTargets
811
821
FILE OpenSSLTargets.cmake
0 commit comments