Improved the CMakeLists.txt just slightly. Provided a default, weak-attributed main function into libdeepstate so that tests don't need to define them. The weak attribute means that any main function defined by libfuzzer will be a strong symbol and take over, so there won't be a conflict. Adjusted examples accordingly to omit now redundant conditionally-compiled main functions, as that leaked out too many underlying details.
This commit is contained in:
+22
-6
@@ -15,15 +15,31 @@
|
||||
project(deepstate)
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
if (NOT DEFINED BUILD_LIBFUZZER AND DEFINED $ENV{BUILD_LIBFUZZER})
|
||||
set(BUILD_LIBFUZZER "$ENV{BUILD_LIBFUZZER}")
|
||||
endif()
|
||||
|
||||
if (BUILD_LIBFUZZER)
|
||||
if(NOT DEFINED CMAKE_C_COMPILER)
|
||||
set(CMAKE_C_COMPILER clang)
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED CMAKE_CXX_COMPILER)
|
||||
set(CMAKE_CXX_COMPILER clang++)
|
||||
endif()
|
||||
|
||||
if (NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang" AND NOT "${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
|
||||
message(FATAL_ERROR "DeepState's libFuzzer mode requires the Clang C compiler.")
|
||||
endif()
|
||||
|
||||
if (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" AND NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
|
||||
message(FATAL_ERROR "DeepState's libFuzzer mode requires the Clang C++ compiler.")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
enable_language(C)
|
||||
enable_language(CXX)
|
||||
|
||||
set(BUILD_LIBFUZZER "$ENV{BUILD_LIBFUZZER}")
|
||||
if (BUILD_LIBFUZZER)
|
||||
SET(CMAKE_C_COMPILER clang)
|
||||
SET(CMAKE_CXX_COMPILER clang++)
|
||||
endif()
|
||||
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
|
||||
@@ -35,10 +35,3 @@ TEST(Crash, SegFault) {
|
||||
|
||||
ASSERT_EQ(x, x);
|
||||
}
|
||||
|
||||
#ifndef LIBFUZZER
|
||||
int main(int argc, char *argv[]) {
|
||||
DeepState_InitOptions(argc, argv);
|
||||
return DeepState_Run();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -39,9 +39,3 @@ TEST(Euler, SumsOfLikePowers) {
|
||||
<< "^5 + " << d << "^5 = " << e << "^5";
|
||||
}
|
||||
|
||||
#ifndef LIBFUZZER
|
||||
int main(int argc, char *argv[]) {
|
||||
DeepState_InitOptions(argc, argv);
|
||||
return DeepState_Run();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -35,10 +35,3 @@ class MyTest : public deepstate::Test {
|
||||
TEST_F(MyTest, Something) {
|
||||
ASSUME_NE(x, 0);
|
||||
}
|
||||
|
||||
#ifndef LIBFUZZER
|
||||
int main(int argc, char *argv[]) {
|
||||
DeepState_InitOptions(argc, argv);
|
||||
return DeepState_Run();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -44,10 +44,3 @@ TEST(Arithmetic, InvertibleMultiplication_CanFail) {
|
||||
<< x << " != (" << x << " / " << y << ") * " << y;
|
||||
});
|
||||
}
|
||||
|
||||
#ifndef LIBFUZZER
|
||||
int main(int argc, char *argv[]) {
|
||||
DeepState_InitOptions(argc, argv);
|
||||
return DeepState_Run();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
#include <deepstate/DeepState.hpp>
|
||||
|
||||
#include <climits>
|
||||
using namespace deepstate;
|
||||
|
||||
DEEPSTATE_NOINLINE int ident1(int x) {
|
||||
@@ -40,9 +40,3 @@ TEST(SignedInteger, MultiplicationOverflow) {
|
||||
<< x << " squared overflowed.";
|
||||
}
|
||||
|
||||
#ifndef LIBFUZZER
|
||||
int main(int argc, char *argv[]) {
|
||||
DeepState_InitOptions(argc, argv);
|
||||
return DeepState_Run();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -30,10 +30,3 @@ TEST(Vector, DoubleReversal) {
|
||||
<< "Double reverse of vectors must be equal.";
|
||||
});
|
||||
}
|
||||
|
||||
#ifndef LIBFUZZER
|
||||
int main(int argc, char *argv[]) {
|
||||
DeepState_InitOptions(argc, argv);
|
||||
DeepState_Run();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -63,10 +63,3 @@ TEST(OneOfExample, ProduceSixtyOrHigher) {
|
||||
<< x << " is >= 60: " << " did " << choices << " from " << start;
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef LIBFUZZER
|
||||
int main(int argc, char *argv[]) {
|
||||
DeepState_InitOptions(argc, argv);
|
||||
return DeepState_Run();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -52,10 +52,3 @@ TEST(PrimePolynomial, OnlyGeneratesPrimes_NoStreaming) {
|
||||
DeepState_Assert(poly != (y * z));
|
||||
DeepState_Assert(IsPrime(Pump(poly)));
|
||||
}
|
||||
|
||||
#ifndef LIBFUZZER
|
||||
int main(int argc, char *argv[]) {
|
||||
DeepState_InitOptions(argc, argv);
|
||||
return DeepState_Run();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -40,9 +40,3 @@ TEST(Formatting, OverridePrintf) {
|
||||
printf("hello again!");
|
||||
}
|
||||
|
||||
#ifndef LIBFUZZER
|
||||
int main(int argc, char *argv[]) {
|
||||
DeepState_InitOptions(argc, argv);
|
||||
return DeepState_Run();
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -618,4 +618,10 @@ void __stack_chk_fail(void) {
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
__attribute__((weak))
|
||||
int main(int argc, char *argv[]) {
|
||||
DeepState_InitOptions(argc, argv);
|
||||
return DeepState_Run();
|
||||
}
|
||||
|
||||
DEEPSTATE_END_EXTERN_C
|
||||
|
||||
@@ -126,6 +126,14 @@ void DeepState_LogFormat(enum DeepState_LogLevel level,
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
#pragma clang diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wunknown-warning-option"
|
||||
/*#pragma clang diagnostic ignored "-Wbuiltin-declaration-mismatch"
|
||||
*/
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wbuiltin-declaration-mismatch"
|
||||
|
||||
/* Override libc! */
|
||||
DEEPSTATE_NOINLINE
|
||||
int puts(const char *str) {
|
||||
@@ -216,4 +224,7 @@ int __vfprintf_chk(int flag, FILE *file, const char *format, va_list args) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#pragma clang diagnostic pop
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
DEEPSTATE_END_EXTERN_C
|
||||
|
||||
Reference in New Issue
Block a user