Common¶
- ライブラリ全体で共通して使用するものを記述する。
Common.hpp
#pragma once
#include <cstdint> // std::int8_t, std::int16_t, std::int32_t, std::int64_t, std::uint8_t, std::uint16_t, std::uint32_t, std::uint64_t
/// @brief ライブラリのメジャーバージョン
#define SECCAMPLIB_VERSION_MAJOR 1
/// @brief ライブラリのマイナーバージョン
#define SECCAMPLIB_VERSION_MINOR 2
/// @brief ライブラリのリビジョンバージョン
#define SECCAMPLIB_VERSION_REVISION 3
/// @brief ライブラリのバージョン番号
#define SECCAMPLIB_VERSION_NUMBER ((SECCAMPLIB_VERSION_MAJOR * 100 * 100) + (SECCAMPLIB_VERSION_MINOR * 100) + SECCAMPLIB_VERSION_REVISION)
namespace seccamp
{
using int8 = std::int8_t;
using int16 = std::int16_t;
using int32 = std::int32_t;
using int64 = std::int64_t;
using uint8 = std::uint8_t;
using uint16 = std::uint16_t;
using uint32 = std::uint32_t;
using uint64 = std::uint64_t;
}
//////////////////////////////////////////////////
//
// プラットフォーム判定用のマクロ
//
// SECCAMP_PLATFORM_NAME
// SECCAMP_PLATFORM(WINDOWS)
// SECCAMP_PLATFORM(MACOS)
// SECCAMP_PLATFORM(LINUX)
// SECCAMP_PLATFORM(IOS)
// SECCAMP_PLATFORM(ANDROID)
// SECCAMP_PLATFORM(WEB)
//
//////////////////////////////////////////////////
#define SECCAMP_PLATFORM(X) SECCAMP_PLATFORM_PRIVATE_DEFINITION_##X()
#define SECCAMP_PLATFORM_PRIVATE_DEFINITION_WINDOWS() 0
#define SECCAMP_PLATFORM_PRIVATE_DEFINITION_MACOS() 0
#define SECCAMP_PLATFORM_PRIVATE_DEFINITION_LINUX() 0
#define SECCAMP_PLATFORM_PRIVATE_DEFINITION_IOS() 0
#define SECCAMP_PLATFORM_PRIVATE_DEFINITION_ANDROID() 0
#define SECCAMP_PLATFORM_PRIVATE_DEFINITION_WEB() 0
#if defined(_WIN32) // Windows
#define SECCAMP_PLATFORM_NAME "Windows"
#undef SECCAMP_PLATFORM_PRIVATE_DEFINITION_WINDOWS
#define SECCAMP_PLATFORM_PRIVATE_DEFINITION_WINDOWS() 1
#elif defined(__APPLE__) // macOS, iOS
#include <TargetConditionals.h> // TARGET_OS_IPHONE, TARGET_IPHONE_SIMULATOR, TARGET_OS_MAC
#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
#define SECCAMP_PLATFORM_NAME "iOS"
#undef SECCAMP_PLATFORM_PRIVATE_DEFINITION_IOS
#define SECCAMP_PLATFORM_PRIVATE_DEFINITION_IOS() 1
#elif TARGET_OS_MAC
#define SECCAMP_PLATFORM_NAME "macOS"
#undef SECCAMP_PLATFORM_PRIVATE_DEFINITION_MACOS
#define SECCAMP_PLATFORM_PRIVATE_DEFINITION_MACOS() 1
#else
#error "Unknown Apple platform"
#endif
#elif defined(__ANDROID__) // Android
#define SECCAMP_PLATFORM_NAME "Android"
#undef SECCAMP_PLATFORM_PRIVATE_DEFINITION_ANDROID
#define SECCAMP_PLATFORM_PRIVATE_DEFINITION_ANDROID() 1
#elif defined(__linux__) // Linux
#define SECCAMP_PLATFORM_NAME "Linux"
#undef SECCAMP_PLATFORM_PRIVATE_DEFINITION_LINUX
#define SECCAMP_PLATFORM_PRIVATE_DEFINITION_LINUX() 1
#elif defined(__EMSCRIPTEN__) // Web
#define SECCAMP_PLATFORM_NAME "Web"
#undef SECCAMP_PLATFORM_PRIVATE_DEFINITION_WEB
#define SECCAMP_PLATFORM_PRIVATE_DEFINITION_WEB() 1
#else
#error "Unknown platform"
#endif
//////////////////////////////////////////////////
//
// コンパイラ判定用のマクロ
//
// SECCAMP_COMPILER_NAME
// SECCAMP_BUILD(MSVC)
// SECCAMP_BUILD(APPLECLANG)
// SECCAMP_BUILD(CLANG)
// SECCAMP_BUILD(GCC)
//
//////////////////////////////////////////////////
#define SECCAMP_COMPILER(X) SECCAMP_COMPILER_PRIVATE_DEFINITION_##X()
#define SECCAMP_COMPILER_PRIVATE_DEFINITION_MSVC() 0
#define SECCAMP_COMPILER_PRIVATE_DEFINITION_APPLE_CLANG() 0
#define SECCAMP_COMPILER_PRIVATE_DEFINITION_CLANG() 0
#define SECCAMP_COMPILER_PRIVATE_DEFINITION_GCC() 0
#if defined(_MSC_VER) // MSVC
#define SECCAMP_COMPILER_NAME "Microsoft Visual C++"
#undef SECCAMP_COMPILER_PRIVATE_DEFINITION_MSVC
#define SECCAMP_COMPILER_PRIVATE_DEFINITION_MSVC() 1
#elif (defined(__clang__) && defined(__apple_build_version__)) // Apple Clang
#define SECCAMP_COMPILER_NAME "Apple Clang"
#undef SECCAMP_COMPILER_PRIVATE_DEFINITION_APPLE_CLANG
#define SECCAMP_COMPILER_PRIVATE_DEFINITION_APPLE_CLANG() 1
#elif defined(__clang__) // Clang
#define SECCAMP_COMPILER_NAME "Clang"
#undef SECCAMP_COMPILER_PRIVATE_DEFINITION_CLANG
#define SECCAMP_COMPILER_PRIVATE_DEFINITION_CLANG() 1
#elif defined(__GNUC__) // GCC
#define SECCAMP_COMPILER_NAME "GCC"
#undef SECCAMP_COMPILER_PRIVATE_DEFINITION_GCC
#define SECCAMP_COMPILER_PRIVATE_DEFINITION_GCC() 1
#else
#error "Unknown compiler"
#endif
//////////////////////////////////////////////////
//
// ビルドモード判定用のマクロ
//
// SECCAMP_BUILD_TYPE
// SECCAMP_BUILD(DEBUG)
// SECCAMP_BUILD(RELEASE)
//
//////////////////////////////////////////////////
#define SECCAMP_BUILD(X) SECCAMP_BUILD_PRIVATE_DEFINITION_##X()
#define SECCAMP_BUILD_PRIVATE_DEFINITION_DEBUG() 0
#define SECCAMP_BUILD_PRIVATE_DEFINITION_RELEASE() 0
#if (defined(_DEBUG) || defined(DEBUG)) // Debug ビルド
#define SECCAMP_BUILD_TYPE "Debug"
#undef SECCAMP_BUILD_PRIVATE_DEFINITION_DEBUG
#define SECCAMP_BUILD_PRIVATE_DEFINITION_DEBUG() 1
#else // Release ビルド
#define SECCAMP_BUILD_TYPE "Release"
#undef SECCAMP_BUILD_PRIVATE_DEFINITION_RELEASE
#define SECCAMP_BUILD_PRIVATE_DEFINITION_RELEASE() 1
#endif