1e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie/* 2e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Copyright (C) 2016 The Android Open Source Project 3e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 4e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Licensed under the Apache License, Version 2.0 (the "License"); 5e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * you may not use this file except in compliance with the License. 6e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * You may obtain a copy of the License at 7e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 8e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * http://www.apache.org/licenses/LICENSE-2.0 9e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 10e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Unless required by applicable law or agreed to in writing, software 11e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * distributed under the License is distributed on an "AS IS" BASIS, 12e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * See the License for the specific language governing permissions and 14e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * limitations under the License. 15e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 16e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 17e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#ifndef CHRE_PLATFORM_ASSERT_H_ 18e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#define CHRE_PLATFORM_ASSERT_H_ 19e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 20e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/platform/log.h" 21e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 22e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie/** 23e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * @file 24e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Includes the platform-specific header file that supplies an assertion macro. 25e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * The platform header must supply the following symbol as a macro or free 26e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * function: 27e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 28926f1b91231f88c3669f10dec8f56e24ae16b957Andrew Rossignol * CHRE_ASSERT(scalar expression) 29e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * 30e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * Where expression will be checked to be false (ie: compares equal to zero) and 31e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie * terminate the program if found to be the case. 32e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie */ 33e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 34e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#if defined(CHRE_ASSERTIONS_ENABLED) 35e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 36e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#include "chre/target_platform/assert.h" 37e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 38926f1b91231f88c3669f10dec8f56e24ae16b957Andrew Rossignol#ifndef CHRE_ASSERT 39bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie#error "CHRE_ASSERT must be defined by the target platform's assert.h" 40926f1b91231f88c3669f10dec8f56e24ae16b957Andrew Rossignol#endif // CHRE_ASSERT 41e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 42e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#elif defined(CHRE_ASSERTIONS_DISABLED) 43e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 44926f1b91231f88c3669f10dec8f56e24ae16b957Andrew Rossignol#define CHRE_ASSERT(condition) ((void) (condition)) 45e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 46e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#else 47e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#error "CHRE_ASSERTIONS_ENABLED or CHRE_ASSERTIONS_DISABLED must be defined" 48e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#endif // CHRE_ASSERTIONS_ENABLED 49e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie 50bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie/** 51bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie * Combination macro that always logs an error message if the condition 52bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie * evaluates to false. 53bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie * 54bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie * Note that the supplied condition may be evaluated more than once. 55bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie * 56bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie * @param condition Boolean expression which evaluates to false in the failure 57bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie * case 58bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie * @param fmt Format string to pass to LOGE 59bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie * @param ... Arguments to pass to LOGE 60bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie */ 61bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie#define CHRE_ASSERT_LOG(condition, fmt, ...) do { \ 62bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie if (!(condition)) { \ 63930807177e49bdec5f3ac78942247a9ee2604639Brian Duddie LOGE("Assert: " fmt, ##__VA_ARGS__); \ 64bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie CHRE_ASSERT(condition); \ 65bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie } \ 66bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie} while (0) 67bbb9845d4f96fc5713b8e9ede09acfe15984315fBrian Duddie 68e64f180233e64c40b56993cfea3696c5b4b16395Brian Duddie#endif // CHRE_PLATFORM_ASSERT_H_ 69