blob: 5a9a6ca4b933a75e1901c951243f2e6c55d5f4de [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
THRIFT = $(top_builddir)/compiler/cpp/thrift
FUZZ_RB_ROOT = $(top_srcdir)/lib/rb
FUZZ_GEN_DIR = $(FUZZ_RB_ROOT)/test/fuzz
FUZZ_STUBS = \
$(FUZZ_GEN_DIR)/gen-rb/fuzz_test_constants.rb \
$(FUZZ_GEN_DIR)/gen-rb/fuzz_test_types.rb
FUZZ_RUBY_FILES = \
$(srcdir)/fuzz_tracer.rb \
$(srcdir)/fuzz_common.rb \
$(srcdir)/fuzz_parse_binary_protocol.rb \
$(srcdir)/fuzz_parse_binary_protocol_harness.rb \
$(srcdir)/fuzz_parse_binary_protocol_accelerated.rb \
$(srcdir)/fuzz_parse_binary_protocol_accelerated_harness.rb \
$(srcdir)/fuzz_parse_compact_protocol.rb \
$(srcdir)/fuzz_parse_compact_protocol_harness.rb \
$(srcdir)/fuzz_parse_json_protocol.rb \
$(srcdir)/fuzz_parse_json_protocol_harness.rb \
$(srcdir)/fuzz_roundtrip_binary_protocol.rb \
$(srcdir)/fuzz_roundtrip_binary_protocol_harness.rb \
$(srcdir)/fuzz_roundtrip_binary_protocol_accelerated.rb \
$(srcdir)/fuzz_roundtrip_binary_protocol_accelerated_harness.rb \
$(srcdir)/fuzz_roundtrip_compact_protocol.rb \
$(srcdir)/fuzz_roundtrip_compact_protocol_harness.rb \
$(srcdir)/fuzz_roundtrip_json_protocol.rb \
$(srcdir)/fuzz_roundtrip_json_protocol_harness.rb
FUZZ_ASAN_OPTIONS ?= allocator_may_return_null=1:detect_leaks=0:use_sigaltstack=0
FUZZ_CC ?= clang
FUZZ_CXX ?= clang++
FUZZ_LDSHARED ?= $(FUZZ_CC) -shared
FUZZ_LDSHAREDXX ?= $(FUZZ_CXX) -shared
FUZZ_CFLAGS ?= -fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g
FUZZ_CXXFLAGS ?= -fsanitize=address,fuzzer-no-link -fno-omit-frame-pointer -fno-common -fPIC -g
FUZZ_MAKE ?= make
FUZZ_MAKEFLAGS ?= --environment-overrides V=1
check: fuzz-prepare
fuzz-prepare: $(FUZZ_STUBS)
@for script in $(FUZZ_RUBY_FILES); do \
$(RUBY) -c $$script; \
done
cd $(FUZZ_RB_ROOT) && \
RUBYLIB="lib:test/fuzz/gen-rb" $(RUBY) -e 'require "thrift"; require "fuzz_test_types"; abort("Fuzz::FuzzTest is missing") unless defined?(Fuzz::FuzzTest)'
$(THRIFT):
$(MAKE) -C $(top_builddir)/compiler/cpp all
$(FUZZ_STUBS): $(top_srcdir)/test/FuzzTest.thrift $(THRIFT)
$(MKDIR_P) $(FUZZ_GEN_DIR)
$(THRIFT) --gen rb -o $(FUZZ_GEN_DIR) $(top_srcdir)/test/FuzzTest.thrift
fuzz-build-ext:
cd $(FUZZ_RB_ROOT)/ext && \
env MAKE="$(FUZZ_MAKE) $(FUZZ_MAKEFLAGS)" \
CC="$(FUZZ_CC)" \
CXX="$(FUZZ_CXX)" \
LDSHARED="$(FUZZ_LDSHARED)" \
LDSHAREDXX="$(FUZZ_LDSHAREDXX)" \
CFLAGS="$(FUZZ_CFLAGS)" \
CXXFLAGS="$(FUZZ_CXXFLAGS)" \
$(RUBY) extconf.rb && \
env MAKE="$(FUZZ_MAKE) $(FUZZ_MAKEFLAGS)" \
CC="$(FUZZ_CC)" \
CXX="$(FUZZ_CXX)" \
LDSHARED="$(FUZZ_LDSHARED)" \
LDSHAREDXX="$(FUZZ_LDSHAREDXX)" \
CFLAGS="$(FUZZ_CFLAGS)" \
CXXFLAGS="$(FUZZ_CXXFLAGS)" \
$(FUZZ_MAKE) $(FUZZ_MAKEFLAGS) clean all
fuzz-run: fuzz-prepare
@test -n "$(TARGET)" || { echo 'Set TARGET=<fuzz script name>'; exit 1; }
cd $(FUZZ_RB_ROOT) && \
ASAN_OPTIONS="$(FUZZ_ASAN_OPTIONS)" \
LD_PRELOAD=$$($(RUBY) -e 'require "ruzzy"; print Ruzzy::ASAN_PATH') \
$(RUBY) test/fuzz/$(TARGET) $(CORPUS) $(FUZZ_ARGS)
fuzz-parse-binary:
$(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_parse_binary_protocol.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
fuzz-parse-binary-accelerated: fuzz-build-ext
$(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_parse_binary_protocol_accelerated.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
fuzz-parse-compact:
$(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_parse_compact_protocol.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
fuzz-parse-json:
$(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_parse_json_protocol.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
fuzz-roundtrip-binary:
$(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_roundtrip_binary_protocol.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
fuzz-roundtrip-binary-accelerated: fuzz-build-ext
$(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_roundtrip_binary_protocol_accelerated.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
fuzz-roundtrip-compact:
$(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_roundtrip_compact_protocol.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
fuzz-roundtrip-json:
$(MAKE) $(AM_MAKEFLAGS) fuzz-run TARGET=fuzz_roundtrip_json_protocol.rb CORPUS="$(CORPUS)" FUZZ_ARGS="$(FUZZ_ARGS)"
fuzz-smoke-parse-binary:
$(MAKE) $(AM_MAKEFLAGS) fuzz-parse-binary CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
fuzz-smoke-parse-binary-accelerated:
$(MAKE) $(AM_MAKEFLAGS) fuzz-parse-binary-accelerated CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
fuzz-smoke-parse-compact:
$(MAKE) $(AM_MAKEFLAGS) fuzz-parse-compact CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
fuzz-smoke-parse-json:
$(MAKE) $(AM_MAKEFLAGS) fuzz-parse-json CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
fuzz-smoke-roundtrip-binary:
$(MAKE) $(AM_MAKEFLAGS) fuzz-roundtrip-binary CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
fuzz-smoke-roundtrip-binary-accelerated:
$(MAKE) $(AM_MAKEFLAGS) fuzz-roundtrip-binary-accelerated CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
fuzz-smoke-roundtrip-compact:
$(MAKE) $(AM_MAKEFLAGS) fuzz-roundtrip-compact CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
fuzz-smoke-roundtrip-json:
$(MAKE) $(AM_MAKEFLAGS) fuzz-roundtrip-json CORPUS="$(CORPUS)" FUZZ_ARGS="-runs=100 $(FUZZ_ARGS)"
clean-local:
-$(RM) -r $(FUZZ_GEN_DIR)/gen-rb
distdir:
$(MAKE) $(AM_MAKEFLAGS) distdir-am
EXTRA_DIST = \
.gitignore \
README.md \
fuzz_common.rb \
fuzz_tracer.rb \
fuzz_parse_binary_protocol.rb \
fuzz_parse_binary_protocol_harness.rb \
fuzz_parse_binary_protocol_accelerated.rb \
fuzz_parse_binary_protocol_accelerated_harness.rb \
fuzz_parse_compact_protocol.rb \
fuzz_parse_compact_protocol_harness.rb \
fuzz_parse_json_protocol.rb \
fuzz_parse_json_protocol_harness.rb \
fuzz_roundtrip_binary_protocol.rb \
fuzz_roundtrip_binary_protocol_harness.rb \
fuzz_roundtrip_binary_protocol_accelerated.rb \
fuzz_roundtrip_binary_protocol_accelerated_harness.rb \
fuzz_roundtrip_compact_protocol.rb \
fuzz_roundtrip_compact_protocol_harness.rb \
fuzz_roundtrip_json_protocol.rb \
fuzz_roundtrip_json_protocol_harness.rb