blob: 07b44a217a6228f397930f8331aacaea2a79e16c [file] [log] [blame]
# Copyright 2020 The Pigweed Authors
#
# Licensed 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
#
# https://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.
# IMPORTANT: The compilation flags in this file must be kept in sync with
# the GN flags //pw_build/BUILD.gn.
# Target that specifies the standard Pigweed build options.
add_library(pw_build INTERFACE)
target_compile_options(pw_build INTERFACE "-g")
target_link_libraries(pw_build
INTERFACE
pw_build.reduced_size
pw_build.cpp17
)
target_compile_options(pw_build
INTERFACE
# Force the compiler use colorized output. This is required for Ninja.
$<$<CXX_COMPILER_ID:Clang>:-fcolor-diagnostics>
$<$<CXX_COMPILER_ID:GNU>:-fdiagnostics-color=always>
)
if(ZEPHYR_PIGWEED_MODULE_DIR)
target_link_libraries(pw_build INTERFACE zephyr_interface)
endif()
# Declare top-level targets for tests.
add_custom_target(pw_tests.default)
add_custom_target(pw_run_tests.default)
add_custom_target(pw_tests DEPENDS pw_tests.default)
add_custom_target(pw_run_tests DEPENDS pw_run_tests.default)
# Define the standard Pigweed compile options.
add_library(pw_build.reduced_size INTERFACE)
target_compile_options(pw_build.reduced_size
INTERFACE
"-fno-common"
"-fno-exceptions"
"-ffunction-sections"
"-fdata-sections"
$<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>
)
# Define the standard Pigweed compile options.
#
# The pw_build.warnings library is used by upstream Pigweed targets to add
# compiler warnings to the build.
#
# Toolchains may override these warnings by setting pw_build_WARNINGS:
#
# set(pw_build_WARNINGS my_warnings CACHE STRING "" FORCE)
#
set(pw_build_WARNINGS pw_build.strict_warnings
CACHE STRING "Warnings libraries to use for Pigweed upstream code")
add_library(pw_build.warnings INTERFACE)
target_link_libraries(pw_build.warnings INTERFACE ${pw_build_WARNINGS})
# TODO(hepler): These Zephyr exceptions should be made by overriding
# pw_build_WARNINGS.
add_library(pw_build.strict_warnings INTERFACE)
if(NOT ZEPHYR_PIGWEED_MODULE_DIR)
# Only include these flags if we're not building with Zephyr.
set(strict_warnings_cond "-Wcast-qual" "-Wundef")
endif()
target_compile_options(pw_build.strict_warnings
INTERFACE
"-Wall"
"-Wextra"
"-Wimplicit-fallthrough"
${strict_warnings_cond}
"-Wpointer-arith"
# Make all warnings errors, except for the exemptions below.
"-Werror"
"-Wno-error=cpp" # preprocessor #warning statement
"-Wno-error=deprecated-declarations" # [[deprecated]] attribute
$<$<COMPILE_LANGUAGE:CXX>:-Wnon-virtual-dtor>
)
add_library(pw_build.extra_strict_warnings INTERFACE)
if(NOT ZEPHYR_PIGWEED_MODULE_DIR)
# Only include these flags if we're not building with Zephyr.
set(extra_strict_warnings_cond "-Wredundant-decls")
endif()
target_compile_options(pw_build.extra_strict_warnings
INTERFACE
"-Wshadow"
${extra_strict_warnings_cond}
$<$<COMPILE_LANGUAGE:C>:-Wstrict-prototypes>
)
add_library(pw_build.cpp17 INTERFACE)
target_compile_options(pw_build.cpp17
INTERFACE
$<$<COMPILE_LANGUAGE:CXX>:-std=c++17>
# Allow uses of the register keyword, which may appear in C headers.
$<$<COMPILE_LANGUAGE:CXX>:-Wno-register>
)
# Create an empty source file and library for general use.
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/empty_file.c" "")
add_library(pw_build.empty OBJECT "${CMAKE_CURRENT_BINARY_DIR}/empty_file.c" "")