Makefile 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. ##########################################################################
  2. # unit tests
  3. ##########################################################################
  4. # additional flags
  5. CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wcast-align -Wcast-qual -Wno-ctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wmissing-declarations -Wmissing-include-dirs -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-overflow=5 -Wswitch -Wundef -Wno-unused -Wnon-virtual-dtor -Wreorder -Wdeprecated -Wno-float-equal
  6. CPPFLAGS += -I ../single_include -I . -I thirdparty/doctest -I thirdparty/fifo_map -DDOCTEST_CONFIG_SUPER_FAST_ASSERTS
  7. SOURCES = src/unit.cpp \
  8. src/unit-algorithms.cpp \
  9. src/unit-allocator.cpp \
  10. src/unit-alt-string.cpp \
  11. src/unit-bson.cpp \
  12. src/unit-capacity.cpp \
  13. src/unit-cbor.cpp \
  14. src/unit-class_const_iterator.cpp \
  15. src/unit-class_iterator.cpp \
  16. src/unit-class_lexer.cpp \
  17. src/unit-class_parser.cpp \
  18. src/unit-comparison.cpp \
  19. src/unit-concepts.cpp \
  20. src/unit-constructor1.cpp \
  21. src/unit-constructor2.cpp \
  22. src/unit-convenience.cpp \
  23. src/unit-conversions.cpp \
  24. src/unit-deserialization.cpp \
  25. src/unit-element_access1.cpp \
  26. src/unit-element_access2.cpp \
  27. src/unit-inspection.cpp \
  28. src/unit-items.cpp \
  29. src/unit-iterators1.cpp \
  30. src/unit-iterators2.cpp \
  31. src/unit-merge_patch.cpp \
  32. src/unit-json_patch.cpp \
  33. src/unit-json_pointer.cpp \
  34. src/unit-meta.cpp \
  35. src/unit-modifiers.cpp \
  36. src/unit-msgpack.cpp \
  37. src/unit-pointer_access.cpp \
  38. src/unit-readme.cpp \
  39. src/unit-reference_access.cpp \
  40. src/unit-regression.cpp \
  41. src/unit-serialization.cpp \
  42. src/unit-testsuites.cpp \
  43. src/unit-ubjson.cpp \
  44. src/unit-unicode.cpp \
  45. src/unit-wstring.cpp
  46. OBJECTS = $(SOURCES:.cpp=.o)
  47. TESTCASES = $(patsubst src/unit-%.cpp,test-%,$(wildcard src/unit-*.cpp))
  48. ##############################################################################
  49. # main rules
  50. ##############################################################################
  51. all: $(TESTCASES)
  52. clean:
  53. rm -fr json_unit $(OBJECTS) $(SOURCES:.cpp=.gcno) $(SOURCES:.cpp=.gcda) $(TESTCASES) $(FUZZERS) test_data.hpp
  54. test_data.hpp:
  55. @echo "#define TEST_DATA_DIRECTORY" > $@
  56. ##############################################################################
  57. # single test file
  58. ##############################################################################
  59. json_unit: $(OBJECTS) ../single_include/nlohmann/json.hpp thirdparty/doctest/doctest.h
  60. @echo "[CXXLD] $@"
  61. @$(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJECTS) -o $@
  62. %.o: %.cpp ../single_include/nlohmann/json.hpp thirdparty/doctest/doctest.h test_data.hpp
  63. @echo "[CXX] $@"
  64. @$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@
  65. ##############################################################################
  66. # individual test cases
  67. ##############################################################################
  68. test-%: src/unit-%.o src/unit.o ../single_include/nlohmann/json.hpp thirdparty/doctest/doctest.h test_data.hpp
  69. @echo "[CXXLD] $@"
  70. @$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $< src/unit.o -o $@
  71. TEST_PATTERN ?= "*"
  72. TEST_PREFIX = ""
  73. check: $(OBJECTS) $(TESTCASES)
  74. @cd .. ; for testcase in $(TESTCASES); do echo "Executing $$testcase..."; $(TEST_PREFIX)test/$$testcase $(TEST_PATTERN) || exit 1; done
  75. ##############################################################################
  76. # fuzzer
  77. ##############################################################################
  78. FUZZER_ENGINE = src/fuzzer-driver_afl.cpp
  79. FUZZERS = parse_afl_fuzzer parse_bson_fuzzer parse_cbor_fuzzer parse_msgpack_fuzzer parse_ubjson_fuzzer
  80. fuzzers: $(FUZZERS)
  81. parse_afl_fuzzer:
  82. $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(FUZZER_ENGINE) src/fuzzer-parse_json.cpp -o $@
  83. parse_bson_fuzzer:
  84. $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(FUZZER_ENGINE) src/fuzzer-parse_bson.cpp -o $@
  85. parse_cbor_fuzzer:
  86. $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(FUZZER_ENGINE) src/fuzzer-parse_cbor.cpp -o $@
  87. parse_msgpack_fuzzer:
  88. $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(FUZZER_ENGINE) src/fuzzer-parse_msgpack.cpp -o $@
  89. parse_ubjson_fuzzer:
  90. $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(FUZZER_ENGINE) src/fuzzer-parse_ubjson.cpp -o $@