mirror of
https://github.com/valitydev/osquery-1.git
synced 2024-11-06 17:45:22 +00:00
971bee4441
fbshipit-source-id: 8ffef5e6a393ac67ce56dcb74845402e43d964a0
335 lines
9.4 KiB
Makefile
335 lines
9.4 KiB
Makefile
PLATFORM := $(shell uname -s)
|
|
BASH_EXISTS := $(shell which bash)
|
|
CTAGS_EXISTS := $(shell which ctags)
|
|
CSCOPE_EXISTS := $(shell which cscope)
|
|
SHELL := $(shell which bash)
|
|
SOURCE_DIR := $(shell pwd)
|
|
|
|
ifneq ($(MAKECMDGOALS),deps)
|
|
GIT_EXISTS := $(shell which git)
|
|
endif
|
|
|
|
MAKE = make
|
|
ifeq ($(PLATFORM),FreeBSD)
|
|
MAKE = gmake
|
|
endif
|
|
|
|
DISTRO := $(shell . ./tools/lib.sh; _platform)
|
|
DISTRO_VERSION := $(shell . ./tools/lib.sh; _distro $(DISTRO))
|
|
DARWIN_BUILD := 10.13
|
|
ifeq ($(DISTRO),darwin)
|
|
BUILD_NAME = darwin$(DISTRO_VERSION)
|
|
else ifeq ($(DISTRO),freebsd)
|
|
BUILD_NAME = freebsd$(DISTRO_VERSION)
|
|
else
|
|
BUILD_NAME = $(DISTRO_VERSION)
|
|
endif
|
|
|
|
ifneq ($(OSQUERY_DEPS),)
|
|
DEPS_DIR = $(OSQUERY_DEPS)
|
|
else
|
|
DEPS_DIR = /usr/local/osquery
|
|
endif
|
|
|
|
# This is a hack to support Vagrant and VirtualBox shared folder.
|
|
# LLVM/LLD will use mmap with MAP_SHARED, which is not supported.
|
|
ifeq ($(PLATFORM),Linux)
|
|
FS_TYPE = $(shell stat --file-system --format=%T $(SOURCE_DIR) 2>&1)
|
|
else
|
|
FS_TYPE = unknown
|
|
endif
|
|
|
|
ifeq ($(FS_TYPE),nfs)
|
|
BUILD_NAME = shared
|
|
SHARED_DIR = $(shell stat -L build/shared 2>/dev/null >/dev/null || echo 0)
|
|
ifeq ($(SHARED_DIR),0)
|
|
DIR = $(shell ln -sf $(shell mktemp -d) build/shared)
|
|
endif
|
|
DEBUG_SHARED_DIR = $(shell stat -L build/debug_shared 2>/dev/null >/dev/null || echo 0)
|
|
ifeq ($(DEBUG_SHARED_DIR),0)
|
|
DEBUG_DIR = $(shell ln -sf $(shell mktemp -d) build/debug_shared)
|
|
endif
|
|
BUILD_DIR = $(shell readlink --canonicalize build/$(BUILD_NAME))$(DIR)
|
|
DEBUG_BUILD_DIR = $(shell readlink --canonicalize build/debug_$(BUILD_NAME))$(DEBUG_DIR)
|
|
ifneq (build/$(BUILD_NAME),$(BUILD_DIR))
|
|
LINK = " \-\> $(BUILD_DIR), $(DEBUG_BUILD_DIR)"
|
|
endif
|
|
else
|
|
BUILD_DIR := build/$(BUILD_NAME)
|
|
DEBUG_BUILD_DIR := build/debug_$(BUILD_NAME)
|
|
endif
|
|
|
|
ifneq ($(VERBOSE_TEST),)
|
|
VERBOSE_TEST = "-V"
|
|
endif
|
|
|
|
ifeq ($(PLATFORM),Linux)
|
|
LINK_FLAGS = -B$(DEPS_DIR)/legacy/lib -rtlib=compiler-rt -fuse-ld=lld
|
|
endif
|
|
|
|
PATH_SET := PATH="$(DEPS_DIR)/bin:/usr/local/bin:$(PATH)"
|
|
CMAKE := $(PATH_SET) LDFLAGS="-L$(DEPS_DIR)/legacy/lib -L$(DEPS_DIR)/lib $(LINK_FLAGS)" \
|
|
cmake $(CMAKE_EXTRA) $(SOURCE_DIR)/
|
|
|
|
CTEST := $(PATH_SET) ctest $(SOURCE_DIR)/
|
|
FORMAT_COMMAND := python tools/formatting/git-clang-format.py \
|
|
"--commit" "master" "-f" "--style=file"
|
|
FORMAT_CHECK_COMMAND := python tools/formatting/format-check.py
|
|
|
|
ANALYSIS := ${SOURCE_DIR}/tools/analysis
|
|
DEFINES := CTEST_OUTPUT_ON_FAILURE=1 \
|
|
LSAN_OPTIONS="detect_container_overflow=0 \
|
|
suppressions=${ANALYSIS}/lsan.supp" \
|
|
ASAN_OPTIONS="suppressions=${ANALYSIS}/asan.supp" \
|
|
TSAN_OPTIONS="suppressions=${ANALYSIS}/tsan.supp,second_deadlock_stack=1" \
|
|
$(PATH_SET)
|
|
|
|
|
|
.setup:
|
|
ifneq ($(MAKECMDGOALS),deps)
|
|
ifeq ($(GIT_EXISTS),)
|
|
@echo "Problem: cannot find 'git'"
|
|
@false
|
|
endif
|
|
endif
|
|
ifeq ($(BASH_EXISTS),)
|
|
@echo "Problem: cannot find 'bash'"
|
|
@false
|
|
endif
|
|
|
|
ifeq ($(DISTRO),darwin)
|
|
ifneq ($(DISTRO_VERSION),$(DARWIN_BUILD))
|
|
@echo "-- Warning! The only Apple OS supported for building is $(DARWIN_BUILD)"
|
|
@echo "-- Note: Installing and running osquery is supported on versions 10.9+"
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(FS_TYPE),nfs)
|
|
@echo "-- Requested build on shared (NFS) folder [Issue #3414]: using a temporary build directory"
|
|
@echo "-- Build directories: $(SOURCE_DIR)/build/{debug_}$(BUILD_NAME)$(LINK)"
|
|
else
|
|
@mkdir -p $(BUILD_DIR)
|
|
@mkdir -p $(DEBUG_BUILD_DIR)
|
|
endif
|
|
|
|
@mkdir -p build/docs
|
|
ifeq ($(PLATFORM),Linux)
|
|
@ln -snf $(BUILD_NAME) build/linux
|
|
@ln -snf debug_$(BUILD_NAME) build/debug_linux
|
|
endif
|
|
ifeq ($(PLATFORM),Darwin)
|
|
@ln -sfn $(BUILD_NAME) build/darwin
|
|
@ln -sfn debug_$(BUILD_NAME) build/debug_darwin
|
|
endif
|
|
@export PYTHONPATH="$DEPS_DIR/lib/python2.7/site-packages"
|
|
|
|
@ln -snf "$(SOURCE_DIR)/tools/tests" $(BUILD_DIR)/test_data
|
|
@ln -snf "$(SOURCE_DIR)/tools/tests" $(DEBUG_BUILD_DIR)/test_data
|
|
|
|
all: .setup
|
|
ifeq ($(wildcard $(DEPS_DIR)/.*),)
|
|
@echo "-- Warning! Cannot find dependencies install directory: $(DEPS_DIR)"
|
|
@echo "-- Have you run: make deps?"
|
|
@false
|
|
endif
|
|
@if [ ! -d $(BUILD_DIR) ]; then \
|
|
echo "The build directory cannot be used: $(BUILD_DIR)"; \
|
|
echo "Consider: make distclean; make"; \
|
|
false; \
|
|
fi
|
|
|
|
@cd $(BUILD_DIR) && $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) --no-print-directory $(MAKEFLAGS)
|
|
|
|
setup: .setup
|
|
|
|
docs: .setup
|
|
@mkdir -p docs
|
|
@cd build/docs && DOCS=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) docs --no-print-directory $(MAKEFLAGS)
|
|
|
|
format_check:
|
|
@echo "[+] clang-format (`$(PATH_SET) which clang-format`) version: `$(PATH_SET) clang-format --version`"
|
|
@$(PATH_SET) $(FORMAT_CHECK_COMMAND)
|
|
|
|
format_master:
|
|
@echo "[+] clang-format (`$(PATH_SET) which clang-format`) version: `$(PATH_SET) clang-format --version`"
|
|
@$(PATH_SET) $(FORMAT_COMMAND)
|
|
|
|
debug: .setup
|
|
@cd $(DEBUG_BUILD_DIR) && DEBUG=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) --no-print-directory $(MAKEFLAGS)
|
|
|
|
test_debug: .setup
|
|
@cd $(DEBUG_BUILD_DIR) && DEBUG=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) test --no-print-directory $(MAKEFLAGS)
|
|
|
|
analyze: .setup
|
|
@cd $(BUILD_DIR) && ANALYZE=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) --no-print-directory $(MAKEFLAGS)
|
|
|
|
tidy: .setup
|
|
@cd $(BUILD_DIR) && TIDY=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) --no-print-directory $(MAKEFLAGS)
|
|
|
|
sanitize: .setup
|
|
@cd $(BUILD_DIR) && SANITIZE=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) --no-print-directory $(MAKEFLAGS)
|
|
|
|
fuzz: .setup
|
|
@echo "[+] zzuf (`$(PATH_SET) which zzuf`) version: `$(PATH_SET) zzuf -V | head -n 1`"
|
|
@$(PATH_SET) python tools/analysis/fuzz.py
|
|
|
|
libfuzz: .setup
|
|
@cd $(BUILD_DIR) && SKIP_TESTS=True SANITIZE=True FUZZ=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) --no-print-directory $(MAKEFLAGS)
|
|
@echo "[+] Now run the osqueryf target"
|
|
|
|
sdk: .setup
|
|
@cd $(BUILD_DIR) && SDK=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) --no-print-directory $(MAKEFLAGS)
|
|
|
|
test_sdk: .setup
|
|
@cd $(BUILD_DIR) && SDK=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) test --no-print-directory $(MAKEFLAGS)
|
|
|
|
debug_sdk: .setup
|
|
@cd $(DEBUG_BUILD_DIR) && SDK=True DEBUG=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) --no-print-directory $(MAKEFLAGS)
|
|
|
|
test_debug_sdk: .setup
|
|
@cd $(DEBUG_BUILD_DIR) && SDK=True DEBUG=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) test --no-print-directory $(MAKEFLAGS)
|
|
|
|
check:
|
|
@echo "[+] cppcheck (`$(PATH_SET) which cppcheck`) version: `$(PATH_SET) cppcheck --version`"
|
|
@$(PATH_SET) cppcheck --quiet --enable=all --error-exitcode=0 \
|
|
-I ./include ./osquery
|
|
@# We want check to produce an error if there are critical issues.
|
|
@echo ""
|
|
@$(PATH_SET) cppcheck --quiet --enable=warning --error-exitcode=1 \
|
|
-I ./include ./osquery
|
|
|
|
audit: .setup
|
|
@tools/audit.sh
|
|
|
|
debug_build:
|
|
cd $(DEBUG_BUILD_DIR) && \
|
|
$(DEFINES) $(MAKE) --no-print-directory $(MAKEFLAGS)
|
|
|
|
test_build:
|
|
cd $(BUILD_DIR) && \
|
|
$(DEFINES) $(MAKE) test --no-print-directory $(MAKEFLAGS)
|
|
|
|
test_debug_build:
|
|
cd $(DEBUG_BUILD_DIR) && \
|
|
$(DEFINES) $(MAKE) test --no-print-directory $(MAKEFLAGS)
|
|
|
|
deps: .setup
|
|
./tools/provision.sh build $(BUILD_NAME)
|
|
|
|
sysprep: .setup
|
|
@SKIP_DISTRO_MAIN=0 ./tools/provision.sh build $(BUILD_NAME)
|
|
|
|
build_deps: .setup
|
|
@OSQUERY_BUILD_DEPS=1 SKIP_DISTRO_MAIN=1 make deps
|
|
|
|
tags:
|
|
ifeq ($(CTAGS_EXISTS),)
|
|
@echo "problem: cannot find 'ctags'"
|
|
@false
|
|
endif
|
|
@ctags -R ./external ./include ./osquery
|
|
.PHONY: tags
|
|
|
|
ctags: .setup tags
|
|
|
|
cscope.files:
|
|
@find \
|
|
-E \
|
|
./external ./include ./osquery \
|
|
-type f \
|
|
-iregex '.*\.(c|cc|h|hh|cpp|hpp)' > $@
|
|
.PHONY: cscope.files
|
|
|
|
cscope.out: cscope.files
|
|
ifeq ($(CSCOPE_EXISTS),)
|
|
@echo "problem: cannot find 'cscope'"
|
|
@false
|
|
endif
|
|
@cscope -b -i cscope.files > $@
|
|
.PHONY: cscope.out
|
|
|
|
cscope: .setup cscope.out
|
|
|
|
clean: .setup
|
|
@cd $(BUILD_DIR) && $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) clean --no-print-directory $(MAKEFLAGS)
|
|
|
|
debug_clean: .setup
|
|
@cd $(DEBUG_BUILD_DIR) && DEBUG=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) clean --no-print-directory $(MAKEFLAGS)
|
|
|
|
strip: .setup
|
|
cd $(BUILD_DIR) && find ./osquery -executable -type f | xargs strip
|
|
|
|
distclean:
|
|
rm -rf .sources $(BUILD_DIR) $(DEBUG_BUILD_DIR) build/docs build/wiki
|
|
rm -f tags cscope.files cscope.out
|
|
ifeq ($(PLATFORM),Linux)
|
|
rm -rf build/linux build/debug_linux
|
|
endif
|
|
ifeq ($(PLATFORM),Darwin)
|
|
rm -rf build/darwin build/debug_darwin
|
|
endif
|
|
ifeq ($(FS_TYPE),nfs)
|
|
rm -rf build/shared build/debug_shared
|
|
endif
|
|
|
|
depsclean:
|
|
./tools/provision.sh clean $(BUILD_NAME)
|
|
|
|
package: .setup
|
|
# Alias for packages (do not use CPack)
|
|
@cd $(BUILD_DIR) && PACKAGE=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) packages/fast --no-print-directory $(MAKEFLAGS)
|
|
|
|
debug_package: .setup
|
|
@cd $(DEBUG_BUILD_DIR) && DEBUG=True PACKAGE=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) packages --no-print-directory $(MAKEFLAGS)
|
|
|
|
packages: .setup
|
|
@cd $(BUILD_DIR) && PACKAGE=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) packages/fast --no-print-directory $(MAKEFLAGS)
|
|
|
|
debug_packages: .setup
|
|
@cd $(DEBUG_BUILD_DIR) && DEBUG=True PACKAGE=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) packages --no-print-directory $(MAKEFLAGS)
|
|
|
|
sync: .setup
|
|
@cd $(BUILD_DIR) && PACKAGE=True $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) sync --no-print-directory $(MAKEFLAGS)
|
|
|
|
git_hooks:
|
|
@mkdir -p ./.git/hooks/
|
|
@ln -s ../../tools/hooks/pre-commit.py ./.git/hooks/pre-commit
|
|
|
|
test: .setup
|
|
@cd build/$(BUILD_NAME) && $(DEFINES) $(CTEST) $(VERBOSE_TEST)
|
|
|
|
.DEFAULT: .setup
|
|
@$(MAKE) --no-print-directory $(MAKEFLAGS) setup
|
|
@if [ ! -d $(BUILD_DIR) ]; then \
|
|
echo "The build directory cannot be used: $(BUILD_DIR)"; \
|
|
echo "Consider: make distclean; make"; \
|
|
false; \
|
|
fi
|
|
@cd $(BUILD_DIR) && $(CMAKE) && \
|
|
$(DEFINES) $(MAKE) --no-print-directory $(MAKEFLAGS) $(MAKECMDGOALS)
|
|
|
|
xcode:
|
|
@# Use _xcode suffix to avoid conflict with regular "make"
|
|
@# so both "make" and "make xcode" can be used at the same time
|
|
@./tools/generate_xcode_project.sh ${BUILD_DIR}_xcode '${CMAKE}'
|
|
|