diff --git a/CMakeLists.txt b/CMakeLists.txt index 3da1ac2a6..001d4b7da 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,7 @@ option(JEMALLOC "use jemalloc. Not required on BSD" ) option(DEBIAN "build for debian" ) option(TESTNET "testnet build" ) option(WITH_SHARED "build shared library") +option(WITH_COVERAGE "generate coverage data") if(WIN32) set(CMAKE_CXX_STANDARD 17) @@ -44,6 +45,16 @@ add_compile_options(-Wvla) add_compile_options($<$:-fpermissive>) add_compile_options(-Wno-unused-function -Wno-deprecated-declarations -Wno-unknown-pragmas) +if (WITH_COVERAGE) + if (USING_CLANG) + add_compile_options( -fprofile-instr-generate -fcoverage-mapping ) + link_libraries( -fprofile-instr-generate ) + else() + add_compile_options( --coverage -g0 ) + link_libraries( --coverage ) + endif() +endif() + # these vars are set by the cmake toolchain spec if (WOW64_CROSS_COMPILE OR WIN64_CROSS_COMPILE) # dynamic linking does this all the time diff --git a/Makefile b/Makefile index 4798a360e..d80a62fc6 100644 --- a/Makefile +++ b/Makefile @@ -60,6 +60,8 @@ CLANG ?= OFF CROSS ?= OFF # build liblokinet-shared.so SHARED_LIB ?= ON +# enable generating coverage +COVERAGE =? OFF # cmake generator type CMAKE_GEN ?= Unix Makefiles @@ -67,7 +69,7 @@ BUILD_ROOT = $(REPO)/build SCAN_BUILD ?= scan-build -CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DUSING_CLANG=$(CLANG) -DSTATIC_LINK=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DUSE_LIBABYSS=$(JSONRPC) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) '$(REPO)'") +CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DUSING_CLANG=$(CLANG) -DSTATIC_LINK=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DUSE_LIBABYSS=$(JSONRPC) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) -DWITH_COVERAGE=$(COVERAGE) '$(REPO)'") ANALYZE_CONFIG_CMD = $(shell /bin/echo -n "cd '$(BUILD_ROOT)' && " ; /bin/echo -n "$(SCAN_BUILD) cmake -G'$(CMAKE_GEN)' -DCMAKE_CROSSCOMPILING=$(CROSS) -DUSING_CLANG=$(CLANG) -DSTATIC_LINK=$(STATIC_LINK) -DUSE_NETNS=$(NETNS) -DUSE_AVX2=$(AVX2) -DUSE_LIBABYSS=$(JSONRPC) -DNON_PC_TARGET=$(NON_PC_TARGET) -DWITH_SHARED=$(SHARED_LIB) '$(REPO)'") @@ -209,13 +211,13 @@ debian-configure: debian: debian-configure $(MAKE) -C '$(BUILD_ROOT)' - cp $(EXE) lokinet + cp $(EXE) lokinet cp $(BUILD_ROOT)/rcutil lokinet-rcutil debian-test: $(TEST_EXE) -install: +install: $(MAKE) -C '$(BUILD_ROOT)' install fuzz-configure: clean