blob: 0e74d1d78a0155eb2c4e7fc3bac86a4ab9790a64 [file] [log] [blame]
# CMakeLists.txt
#
# This script listens to a few environment variables:
#
# CMAKE_DRIVER_EXE_NAME
# (optional) Override the default name "driver".
#
# CMAKE_FUZZING_ENGINE
# If set: set up everything to build the fuzzers. The value is expected
# to be a linkable library that contains the desired
# implementation of the fuzzer.
# For example: `-fsanitize=fuzzer'.
# If not set: set up everything to build the driver.
#
# CMAKE_USE_LOGGER_GLOG
# (optional) If set and `1', glog will be linked.
#
# Copyright 2018-2019 by
# Armin Hasitzka.
#
# This file is part of the FreeType project, and may only be used, modified,
# and distributed under the terms of the FreeType project license,
# LICENSE.TXT. By continuing to use, modify, or distribute this file you
# indicate that you have read the license and understand and accept it
# fully.
cmake_minimum_required(VERSION 3.0.2)
project(fuzzing)
# ----------------------------------------------------------------------------
# defines:
set(FUZZING_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(FUZZING_SRC_DIR "${FUZZING_BASE_DIR}/src")
set(FUZZING_CORPORA_DIR "${FUZZING_BASE_DIR}/corpora")
# `FUZZ_TARGET_NAMES', `FUZZ_TARGET_CLASS_NAMES', and
# `FUZZ_TARGET_HEADER_PATHS' are filled by `add_fuzz_target()'.
set(FUZZ_TARGET_NAMES "legacy")
set(FUZZ_TARGET_CLASS_NAMES "x")
set(FUZZ_TARGET_HEADER_PATHS "x")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(SUBMODULES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../external")
set(FREETYPE_BASE_DIR "${SUBMODULES_DIR}/freetype2")
set(FREETYPE_SRC_DIR "${FREETYPE_BASE_DIR}/src")
set(FREETYPE_STATIC_LIBRARY "${FREETYPE_BASE_DIR}/objs/.libs/libfreetype.a")
set(BOOST_BASE_DIR "${SUBMODULES_DIR}/boost")
set(GLOG_BASE_DIR "${SUBMODULES_DIR}/glog")
set(GLOG_SRC_DIR "${GLOG_BASE_DIR}/src")
set(GLOG_BUILD_DIR "${GLOG_BASE_DIR}/build")
set(GLOG_STATIC_LIBRARY "${GLOG_BUILD_DIR}/libglog.a")
set(LIBARCHIVE_BASE_DIR "${SUBMODULES_DIR}/libarchive")
set(LIBARCHIVE_SRC_DIR "${LIBARCHIVE_BASE_DIR}/src")
set(LIBARCHIVE_STATIC_LIBRARY "${LIBARCHIVE_BASE_DIR}/.libs/libarchive.a")
set(BZIP2_BASE_DIR "${SUBMODULES_DIR}/bzip2")
set(BZIP2_STATIC_LIBRARY "${BZIP2_BASE_DIR}/libbz2.a")
set(BROTLI_BASE_DIR "${SUBMODULES_DIR}/brotli")
set(BROTLI_BUILD_DIR "${BROTLI_BASE_DIR}/build")
set(BROTLI_STATIC_LIBRARY
"${BROTLI_BUILD_DIR}/libbrotlidec-static.a"
"${BROTLI_BUILD_DIR}/libbrotlicommon-static.a")
# ----------------------------------------------------------------------------
# functions:
function(add_fuzz_target
name
class_name
header_path)
set(FUZZ_TARGET_NAMES
${FUZZ_TARGET_NAMES}
"${name}"
PARENT_SCOPE)
set(FUZZ_TARGET_CLASS_NAMES
${FUZZ_TARGET_CLASS_NAMES}
"${class_name}"
PARENT_SCOPE)
set(FUZZ_TARGET_HEADER_PATHS
${FUZZ_TARGET_HEADER_PATHS}
"${header_path}"
PARENT_SCOPE)
endfunction()
# ----------------------------------------------------------------------------
# fuzz targets:
add_fuzz_target(
"bdf"
"freetype::BdfFuzzTarget"
"targets/font-drivers/bdf.h")
add_fuzz_target(
"bdf-render"
"freetype::BdfRenderFuzzTarget"
"targets/font-drivers/bdf-render.h")
add_fuzz_target(
"cff"
"freetype::CffFuzzTarget"
"targets/font-drivers/cff.h")
add_fuzz_target(
"cff-ftengine"
"freetype::CffFtEngineFuzzTarget"
"targets/font-drivers/cff-ftengine.h")
add_fuzz_target(
"cff-render"
"freetype::CffRenderFuzzTarget"
"targets/font-drivers/cff-render.h")
add_fuzz_target(
"cff-render-ftengine"
"freetype::CffRenderFtEngineFuzzTarget"
"targets/font-drivers/cff-render-ftengine.h")
add_fuzz_target(
"cidtype1"
"freetype::CidType1FuzzTarget"
"targets/font-drivers/cidtype1.h")
add_fuzz_target(
"cidtype1-ftengine"
"freetype::CidType1FtEngineFuzzTarget"
"targets/font-drivers/cidtype1-ftengine.h")
add_fuzz_target(
"cidtype1-render"
"freetype::CidType1RenderFuzzTarget"
"targets/font-drivers/cidtype1-render.h")
add_fuzz_target(
"cidtype1-render-ftengine"
"freetype::CidType1RenderFtEngineFuzzTarget"
"targets/font-drivers/cidtype1-render-ftengine.h")
add_fuzz_target(
"pcf"
"freetype::PcfFuzzTarget"
"targets/font-drivers/pcf.h")
add_fuzz_target(
"pcf-render"
"freetype::PcfRenderFuzzTarget"
"targets/font-drivers/pcf-render.h")
add_fuzz_target(
"truetype"
"freetype::TrueTypeFuzzTarget"
"targets/font-drivers/truetype.h")
add_fuzz_target(
"truetype-render"
"freetype::TrueTypeRenderFuzzTarget"
"targets/font-drivers/truetype-render.h")
add_fuzz_target(
"truetype-render-i35"
"freetype::TrueTypeRenderI35FuzzTarget"
"targets/font-drivers/truetype-render-i35.h")
add_fuzz_target(
"truetype-render-i38"
"freetype::TrueTypeRenderI38FuzzTarget"
"targets/font-drivers/truetype-render-i38.h")
add_fuzz_target(
"type1"
"freetype::Type1FuzzTarget"
"targets/font-drivers/type1.h")
add_fuzz_target(
"type1-ftengine"
"freetype::Type1FtEngineFuzzTarget"
"targets/font-drivers/type1-ftengine.h")
add_fuzz_target(
"type1-render"
"freetype::Type1RenderFuzzTarget"
"targets/font-drivers/type1-render.h")
add_fuzz_target(
"type1-render-ftengine"
"freetype::Type1RenderFtEngineFuzzTarget"
"targets/font-drivers/type1-render-ftengine.h")
add_fuzz_target(
"type1-render-tar"
"freetype::Type1RenderTarFuzzTarget"
"targets/font-drivers/type1-render-tar.h")
add_fuzz_target(
"type1-tar"
"freetype::Type1TarFuzzTarget"
"targets/font-drivers/type1-tar.h")
add_fuzz_target(
"type42"
"freetype::Type42FuzzTarget"
"targets/font-drivers/type42.h")
add_fuzz_target(
"type42-render"
"freetype::Type42RenderFuzzTarget"
"targets/font-drivers/type42-render.h")
add_fuzz_target(
"windowsfnt"
"freetype::WindowsFntFuzzTarget"
"targets/font-drivers/windowsfnt.h")
add_fuzz_target(
"windowsfnt-render"
"freetype::WindowsFntRenderFuzzTarget"
"targets/font-drivers/windowsfnt-render.h")
add_fuzz_target(
"glyphs-bitmaps-pcf"
"freetype::GlyphsBitmapsPcfFuzzTarget"
"targets/glyphs/bitmaps-pcf.h")
add_fuzz_target(
"glyphs-outlines"
"freetype::GlyphsOutlinesFuzzTarget"
"targets/glyphs/outlines.h")
add_fuzz_target(
"gzip"
"freetype::GzipFuzzTarget"
"targets/support/GzipFuzzTarget.h")
add_fuzz_target(
"lzw"
"freetype::LzwFuzzTarget"
"targets/support/LzwFuzzTarget.h")
add_fuzz_target(
"bzip2"
"freetype::Bzip2FuzzTarget"
"targets/support/Bzip2FuzzTarget.h")
# ----------------------------------------------------------------------------
# environment options:
set(FUZZING_ENGINE "$ENV{CMAKE_FUZZING_ENGINE}")
set(DRIVER_EXE_NAME "driver")
if(NOT "$ENV{CMAKE_DRIVER_EXE_NAME}" STREQUAL "")
set(DRIVER_EXE_NAME "$ENV{CMAKE_DRIVER_EXE_NAME}")
endif()
if("$ENV{CMAKE_USE_LOGGER_GLOG}")
set(LOGGER_NAME "LOGGER_GLOG")
endif()
# ----------------------------------------------------------------------------
# build logic:
include_directories(
"${FREETYPE_BASE_DIR}/include"
"${BOOST_BASE_DIR}"
"${FUZZING_SRC_DIR}"
"${LIBARCHIVE_BASE_DIR}/libarchive")
if("${LOGGER_NAME}" STREQUAL "LOGGER_GLOG")
include_directories(
"${GLOG_BUILD_DIR}"
"${GLOG_SRC_DIR}")
endif()
enable_testing()
add_subdirectory("${FUZZING_SRC_DIR}")