CC = clang
CXX = clang++
DISABLE_CANARY = -DDISABLE_CANARY=0
SANITIZE_CHUNKS = -DSANITIZE_CHUNKS=0
FUZZ_MODE = -DFUZZ_MODE=0
PERM_FREE_REALLOC = -DPERM_FREE_REALLOC=0
MEMORY_TAGGING = -DMEMORY_TAGGING=0
ABORT_NO_ENTROPY = -DABORT_NO_ENTROPY=1
SANITIZER_SUPPORT = $(ENABLE_ASAN) $(ENABLE_MSAN) $(ENABLE_UBSAN) $(ENABLE_TSAN)
THREAD_SUPPORT = -DTHREAD_SUPPORT=1 -pthread
USE_SPINLOCK = -DUSE_SPINLOCK=0
STARTUP_MEM_USAGE = -DSMALL_MEM_STARTUP=0
PRE_POPULATE_PAGES = -DPRE_POPULATE_PAGES=0
UNIT_TESTING = -DUNIT_TESTING=1
MALLOC_HOOK = -DMALLOC_HOOK=1
HUGE_PAGES = -DHUGE_PAGES=1
THP_PAGES = -DTHP_PAGES=1
CPU_PIN = -DCPU_PIN=0
SCHED_GETCPU =
ALLOC_SANITY = -DALLOC_SANITY=0
MEMCPY_SANITY = -DMEMCPY_SANITY=0
MEMSET_SANITY = -DMEMSET_SANITY=0
UNINIT_READ_SANITY = -DUNINIT_READ_SANITY=0
STRONG_SIZE_ISOLATION = -DSTRONG_SIZE_ISOLATION=0
UAF_PTR_PAGE = -DUAF_PTR_PAGE=0
VERIFY_FREE_BIT_SLOTS = -DVERIFY_FREE_BIT_SLOTS=0
RANDOMIZE_FREELIST = -DRANDOMIZE_FREELIST=1
EXPERIMENTAL = -DEXPERIMENTAL=0
DEBUG_LOG_FLAGS = -DDEBUG=1 -DLEAK_DETECTOR=1 -DMEM_USAGE=1
NAMED_MAPPINGS = -DNAMED_MAPPINGS=0
ABORT_ON_NULL = -DABORT_ON_NULL=0
NO_ZERO_ALLOCATIONS = -DNO_ZERO_ALLOCATIONS=1
USE_MLOCK = -DUSE_MLOCK=1
AUTO_CTOR_DTOR = -DAUTO_CTOR_DTOR=1
ISO_DTOR_CLEANUP = -DISO_DTOR_CLEANUP=0
SIGNAL_HANDLER = -DSIGNAL_HANDLER=0
ARM_TBI = 0
BIG_ZONE_META_DATA_GUARD = -DBIG_ZONE_META_DATA_GUARD=0
BIG_ZONE_GUARD = -DBIG_ZONE_GUARD=0
PROTECT_FREE_BIG_ZONES = -DPROTECT_FREE_BIG_ZONES=0
MASK_PTRS = -DMASK_PTRS=1
DONT_USE_NEON = -DDONT_USE_NEON=1
STDCXX=c++17
STDC=c11
LTO = -flto
LIBNAME = libisoalloc.so
UNAME := $(shell uname)
ifeq ($(UNAME), Darwin)
OS_FLAGS = -framework Security
LIBNAME = libisoalloc.dylib
ifeq ($(MEMCPY_SANITY), -DMEMCPY_SANITY=1)
CFLAGS += -D_FORTIFY_SOURCE=0
endif
ifeq ($(MEMSET_SANITY), -DMEMSET_SANITY=1)
CFLAGS += -D_FORTIFY_SOURCE=0
endif
endif
ifeq ($(UNAME), Linux)
STRIP = strip -s $(BUILD_DIR)/$(LIBNAME)
SCHED_GETCPU = -DSCHED_GETCPU
endif
ifeq ($(UNAME), FreeBSD)
STRIP = strip -s $(BUILD_DIR)/$(LIBNAME)
THREAD_SUPPORT = -DTHREAD_SUPPORT=0
SCHED_GETCPU = -DSCHED_GETCPU
endif
ifeq ($(UNAME), DragonFly)
STRIP = strip -s $(BUILD_DIR)/$(LIBNAME)
USE_SPINLOCK = -DUSE_SPINLOCK=1
HUGE_PAGES =
OS_FLAGS = -I/usr/local/cxx_atomics
endif
ifeq ($(UNAME), NetBSD)
STRIP = strip -s $(BUILD_DIR)/$(LIBNAME)
HUGE_PAGES =
endif
ifeq ($(UNAME), SunOS)
STRIP = strip -s $(BUILD_DIR)/$(LIBNAME)
CFLAGS += -m64
CXXFLAGS += -m64
LTO =
HUGE_PAGES =
endif
ifneq ($(ARM_MTE), )
ifneq ($(UNAME), Linux)
$(error "ARM MTE is only supported on Linux / Android")
endif
ifneq ($(DISABLE_CANARY), -DDISABLE_CANARY=1)
$(error "Disable canaries before continuing")
endif
ifneq ($(MEMORY_TAGGING), -DMEMORY_TAGGING=0)
$(error "Disable software tagging before continuing")
endif
CC = clang-18
CXX = clang++-18
endif
HOOKS = $(MALLOC_HOOK)
OPTIMIZE = -O2 -fstrict-aliasing -Wstrict-aliasing
COMMON_CFLAGS = -Wall -Iinclude/ $(THREAD_SUPPORT) $(PRE_POPULATE_PAGES) $(STARTUP_MEM_USAGE)
BUILD_ERROR_FLAGS = -Wno-pointer-arith -Wno-gnu-zero-variadic-macro-arguments -Wno-format-pedantic
ifneq ($(CC), gcc)
BUILD_ERROR_FLAGS := $(BUILD_ERROR_FLAGS) -Werror -pedantic
else
BUILD_ERROR_FLAGS := $(BUILD_ERROR_FLAGS) -Wno-attributes -Wno-unused-variable
endif
CFLAGS += $(COMMON_CFLAGS) $(DISABLE_CANARY) $(BUILD_ERROR_FLAGS) $(HOOKS) $(HEAP_PROFILER) -fvisibility=hidden \
-std=$(STDC) $(SANITIZER_SUPPORT) $(ALLOC_SANITY) $(MEMCPY_SANITY) $(UNINIT_READ_SANITY) $(CPU_PIN) $(SCHED_GETCPU) \
$(EXPERIMENTAL) $(UAF_PTR_PAGE) $(VERIFY_FREE_BIT_SLOTS) $(NAMED_MAPPINGS) $(ABORT_ON_NULL) $(NO_ZERO_ALLOCATIONS) \
$(ABORT_NO_ENTROPY) $(ISO_DTOR_CLEANUP) $(RANDOMIZE_FREELIST) $(USE_SPINLOCK) $(HUGE_PAGES) ${THP_PAGES} $(USE_MLOCK) \
$(MEMORY_TAGGING) $(STRONG_SIZE_ISOLATION) $(MEMSET_SANITY) $(AUTO_CTOR_DTOR) $(SIGNAL_HANDLER) \
$(BIG_ZONE_META_DATA_GUARD) $(BIG_ZONE_GUARD) $(PROTECT_UNUSED_BIG_ZONE) $(MASK_PTRS) $(SANITIZE_CHUNKS) $(FUZZ_MODE) \
$(PERM_FREE_REALLOC) $(ARM_MTE) $(DONT_USE_NEON)
CXXFLAGS = $(COMMON_CFLAGS) -DCPP_SUPPORT=1 -std=$(STDCXX) $(SANITIZER_SUPPORT) $(HOOKS)
EXE_CFLAGS = -fPIE
GDB_FLAGS = -g -ggdb3 -fno-omit-frame-pointer
PERF_FLAGS = -pg -DPERF_TEST_BUILD=1
LIBRARY = -fPIC -shared
SRC_DIR = src
C_SRCS = $(SRC_DIR)/*.c
CXX_SRCS = $(SRC_DIR)/*.cpp
ISO_ALLOC_PRINTF_SRC = $(SRC_DIR)/iso_alloc_printf.c
BUILD_DIR = build
LDFLAGS = -L$(BUILD_DIR) -lisoalloc $(LTO)
all: tests
library: clean
@echo "make library"
$(CC) $(CFLAGS) $(LIBRARY) $(OPTIMIZE) $(OS_FLAGS) $(C_SRCS) -o $(BUILD_DIR)/$(LIBNAME)
$(STRIP)
library_debug: clean
@echo "make library debug"
$(CC) $(CFLAGS) $(LIBRARY) $(OS_FLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(C_SRCS) -o $(BUILD_DIR)/$(LIBNAME)
library_debug_unit_tests: clean
@echo "make library_debug_unit_tests"
$(CC) $(CFLAGS) $(LIBRARY) $(OS_FLAGS) $(UNIT_TESTING) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(C_SRCS) -o $(BUILD_DIR)/$(LIBNAME)
analyze_library_debug: clean
@echo "make analyze_library_debug"
scan-build $(CC) $(CFLAGS) $(LIBRARY) $(OS_FLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(C_SRCS) -o $(BUILD_DIR)/$(LIBNAME)
library_debug_no_output: clean
@echo "make library_debug_no_output"
$(CC) $(CFLAGS) $(LIBRARY) $(OS_FLAGS) $(GDB_FLAGS) $(C_SRCS) -o $(BUILD_DIR)/$(LIBNAME)
c_library_objects:
@echo "make c_library_objects"
$(CC) $(CFLAGS) $(OPTIMIZE) $(C_SRCS) -fPIC -c
mv *.o $(BUILD_DIR)
c_library_objects_debug:
@echo "make c_library_objects_debug"
$(CC) $(CFLAGS) $(C_SRCS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) -fPIC -c
mv *.o $(BUILD_DIR)
cpp_library: clean c_library_objects
@echo "make cpp_library"
$(CXX) $(CXXFLAGS) $(OPTIMIZE) $(LIBRARY) $(OS_FLAGS) $(CXX_SRCS) $(BUILD_DIR)/*.o -o $(BUILD_DIR)/$(LIBNAME)
$(STRIP)
cpp_library_debug: clean c_library_objects_debug
@echo "make cpp_library_debug"
$(CXX) $(CXXFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(LIBRARY) $(OS_FLAGS) $(CXX_SRCS) $(BUILD_DIR)/*.o -o $(BUILD_DIR)/$(LIBNAME)
tests: clean library_debug_unit_tests
@echo "make tests"
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/rand_freelist.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/rand_freelist $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/tests.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/tests $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) $(UNIT_TESTING) tests/uaf.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/uaf $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/interfaces_test.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/interfaces_test $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/thread_tests.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/thread_tests $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) $(UNIT_TESTING) tests/big_canary_test.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/big_canary_test $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/big_tests.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/big_tests $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/double_free.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/double_free $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/big_double_free.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/big_double_free $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/heap_overflow.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/heap_overflow $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/heap_underflow.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/heap_underflow $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/leaks_test.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/leaks_test $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/wild_free.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/wild_free $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/unaligned_free.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/unaligned_free $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/incorrect_chunk_size_multiple.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/incorrect_chunk_size_multiple $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/zero_alloc.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/zero_alloc $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/uninit_read.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/uninit_read $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/sized_free.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/sized_free $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/pool_test.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/pool_test $(LDFLAGS)
utils/run_tests.sh
mte_test: clean
@echo "make mte_test"
$(CC) $(CFLAGS) $(C_SRCS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(EXE_CFLAGS) $(OS_FLAGS) tests/tests.c -o $(BUILD_DIR)/tests
$(CC) $(CFLAGS) $(C_SRCS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(EXE_CFLAGS) $(OS_FLAGS) tests/interfaces_test.c -o $(BUILD_DIR)/interfaces_test
$(CC) $(CFLAGS) $(C_SRCS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(EXE_CFLAGS) $(OS_FLAGS) tests/heap_overflow.c -o $(BUILD_DIR)/heap_overflow
$(CC) $(CFLAGS) $(C_SRCS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(EXE_CFLAGS) $(OS_FLAGS) tests/double_free.c -o $(BUILD_DIR)/double_free
qemu-aarch64-static -cpu max build/tests
qemu-aarch64-static -cpu max build/interfaces_test
qemu-aarch64-static -cpu max build/heap_overflow
qemu-aarch64-static -cpu max build/double_free
tagging_tests: clean cpp_library_debug
@echo "make tagging_tests"
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/tagged_ptr_test.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/tagged_ptr_test $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/uaf_tag_ptr_test.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/uaf_tag_ptr_test $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/bad_tag_ptr_test.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/bad_tag_ptr_test $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/verify_tag_ptr_test.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/verify_tag_ptr_test $(LDFLAGS)
$(CXX) -DMEMORY_TAGGING=1 $(CXXFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(EXE_CFLAGS) $(OS_FLAGS) tests/tagged_ptr_test.cpp $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/tagged_ptr_test_cpp $(LDFLAGS)
utils/run_tagging_tests.sh
init_test: clean library_debug_unit_tests
@echo "make init_test"
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/init_destroy.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/init_destroy $(LDFLAGS)
build/init_destroy
libc_sanity_tests: clean library_debug_unit_tests
@echo "make libc_sanity_tests"
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/memset_sanity.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/memset_sanity $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/memcpy_sanity.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/memcpy_sanity $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/memmove_sanity.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/memmove_sanity $(LDFLAGS)
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(OS_FLAGS) tests/bzero_sanity.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/bzero_sanity $(LDFLAGS)
build/memset_sanity ; build/memcpy_sanity; build/memmove_sanity; build/bzero_sanity ;
fuzz_test: clean library_debug_unit_tests
@echo "make fuzz_test"
$(CC) $(CFLAGS) $(EXE_CFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) tests/alloc_fuzz.c $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/alloc_fuzz $(LDFLAGS)
LD_LIBRARY_PATH=build/ build/alloc_fuzz
perf_tests: clean
@echo "make perf_tests"
$(CC) $(CFLAGS) $(C_SRCS) $(GDB_FLAGS) $(PERF_FLAGS) $(OS_FLAGS) tests/tests.c -o $(BUILD_DIR)/tests_gprof
$(CC) $(CFLAGS) $(C_SRCS) $(GDB_FLAGS) $(PERF_FLAGS) $(OS_FLAGS) tests/big_tests.c -o $(BUILD_DIR)/big_tests_gprof
$(BUILD_DIR)/tests_gprof
gprof -bl $(BUILD_DIR)/tests_gprof gmon.out > tests_perf_analysis.txt
$(BUILD_DIR)/big_tests_gprof
gprof -bl $(BUILD_DIR)/big_tests_gprof gmon.out > big_tests_perf_analysis.txt
malloc_cmp_test: clean
@echo "make malloc_cmp_test"
ifeq ($(MEMCPY_SANITY), -DMEMCPY_SANITY=1)
$(error "Please unset MEMCPY_SANITY before running this test")
endif
ifeq ($(MEMSET_SANITY), -DMEMSET_SANITY=1)
$(error "Please unset MEMSET_SANITY before running this test")
endif
$(CC) $(CFLAGS) $(C_SRCS) $(OPTIMIZE) $(EXE_CFLAGS) $(OS_FLAGS) tests/tests.c -o $(BUILD_DIR)/tests
$(CC) $(CFLAGS) $(OPTIMIZE) $(EXE_CFLAGS) $(OS_FLAGS) -DMALLOC_PERF_TEST $(ISO_ALLOC_PRINTF_SRC) tests/tests.c -o $(BUILD_DIR)/malloc_tests
@echo "Running IsoAlloc Performance Test"
build/tests
@echo "Running system malloc Performance Test"
build/malloc_tests
cpp_tests: clean cpp_library_debug
@echo "make cpp_tests"
$(CXX) $(CXXFLAGS) $(DEBUG_LOG_FLAGS) $(GDB_FLAGS) $(EXE_CFLAGS) $(OS_FLAGS) tests/tests.cpp $(ISO_ALLOC_PRINTF_SRC) -o $(BUILD_DIR)/cxx_tests $(LDFLAGS)
LD_LIBRARY_PATH=$(BUILD_DIR)/ $(BUILD_DIR)/cxx_tests
install:
cp -pR build/$(LIBNAME) /usr/lib/
format:
clang-format-18 $(SRC_DIR)/*.* tests/*.* include/*.h -i
format-ci:
clang-format-18 --Werror --dry-run $(SRC_DIR)/*.* tests/*.* include/*.h -i
clean:
rm -rf build/* tests_perf_analysis.txt big_tests_perf_analysis.txt gmon.out \
tagging_test_output.txt test_output.txt *.dSYM core* iso_alloc_profiler.data
rm -rf android/libs android/obj
mkdir -p build/