commit a4412fd406fb8fc20c51ca644781a56d29afd367 Author: Mike Nolan Date: Sun Oct 4 19:03:33 2026 -0500 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c795b05 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..7667e6d --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,58 @@ +cmake_minimum_required(VERSION 3.16) + +project(tesses_cpu_arch VERSION 1.0.0 LANGUAGES C) + +include(GNUInstallDirs) + +# ---- Header-only library ---- +add_library(tesses_cpu_arch INTERFACE) +add_library(tesses::cpu_arch ALIAS tesses_cpu_arch) + +target_include_directories(tesses_cpu_arch INTERFACE + $ + $ +) + +# ---- App (optional) ---- +option(TESSES_CPU_ARCH_BUILD_APP "Build the test app" ON) + +if(TESSES_CPU_ARCH_BUILD_APP) + add_executable(tcpuarch main.c) + target_link_libraries(tcpuarch PRIVATE tesses::cpu_arch) + install(TARGETS tcpuarch DESTINATION "${CMAKE_INSTALL_BINDIR}") +endif() + +# ---- Install ---- +install(FILES include/tesses_cpu_arch.h + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) + +install(TARGETS tesses_cpu_arch + EXPORT tesses_cpu_arch-targets +) + +# ---- CMake package config (for find_package / FetchContent) ---- +install(EXPORT tesses_cpu_arch-targets + FILE tesses_cpu_arch-targets.cmake + NAMESPACE tesses:: + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tesses_cpu_arch" +) + +include(CMakePackageConfigHelpers) + +configure_package_config_file( + ${CMAKE_CURRENT_SOURCE_DIR}/tesses_cpu_archConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/tesses_cpu_archConfig.cmake + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tesses_cpu_arch" +) + +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/tesses_cpu_archConfigVersion.cmake + COMPATIBILITY SameMajorVersion +) + +install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/tesses_cpu_archConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/tesses_cpu_archConfigVersion.cmake + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/tesses_cpu_arch" +) \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..26f606e --- /dev/null +++ b/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +surrender of all present and future rights to this software under +copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..b564beb --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +A header only library to get cpu architecture of machine +======================================================== + +I wanted a way to have an easy way to get the arch of a computer at runtime + +## How to use, via cmake FetchContent: + +```cmake +include(FetchContent) + +FetchContent_Declare(tesses_cpu_arch + GIT_REPOSITORY https://git.tesses.org/tesses50/tesses_cpu_arch.git + GIT_TAG v1.0.0 +) +FetchContent_MakeAvailable(tesses_cpu_arch) + +target_link_libraries(myapp PRIVATE tesses::cpu_arch) +``` + +## How to use via cmake find_package + +```cmake +find_package(tesses_cpu_arch 1.0 REQUIRED) +target_link_libraries(myapp PRIVATE tesses::cpu_arch) +``` + +Or just use the file in the include folder, it don't matter + +Licensed under UNLICENSE (public domain) \ No newline at end of file diff --git a/include/tesses_cpu_arch.h b/include/tesses_cpu_arch.h new file mode 100644 index 0000000..e97d737 --- /dev/null +++ b/include/tesses_cpu_arch.h @@ -0,0 +1,87 @@ +/* + * tesses_cpu_arch.h + * + * This is free and unencumbered software released into the public domain. + * For more information, please refer to + */ +#ifndef TESSES_CPU_ARCH_H +#define TESSES_CPU_ARCH_H + +#if defined(__TessesOS__) + #define TESSES_CPU_TARGET_OS "tessesos" +#elif defined(__linux__) + #define TESSES_CPU_TARGET_OS "linux" +#elif defined(__FreeBSD__) + #define TESSES_CPU_TARGET_OS "freebsd" +#elif defined(__OpenBSD__) + #define TESSES_CPU_TARGET_OS "openbsd" +#elif defined(__NetBSD__) + #define TESSES_CPU_TARGET_OS "netbsd" +#elif defined(__DragonFly__) + #define TESSES_CPU_TARGET_OS "dragonfly" +#elif defined(__APPLE__) && defined(__MACH__) + #define TESSES_CPU_TARGET_OS "macos" +#elif defined(_WIN32) || defined(_WIN64) + #define TESSES_CPU_TARGET_OS "windows" +#else + #define TESSES_CPU_TARGET_OS "unknown" +#endif + + +/* ---- Arch ---- */ +#if defined(__x86_64__) || defined(_M_X64) + #define TESSES_CPU_TARGET_ARCH "x64" +#elif defined(__i386__) || defined(_M_IX86) + #define TESSES_CPU_TARGET_ARCH "x86" +#elif defined(__aarch64__) || defined(_M_ARM64) + #define TESSES_CPU_TARGET_ARCH "arm64" +#elif defined(__arm__) || defined(_M_ARM) + #define TESSES_CPU_TARGET_ARCH "arm" +#elif defined(__riscv) && __riscv_xlen == 64 + #define TESSES_CPU_TARGET_ARCH "riscv64" +#elif defined(__riscv) + #define TESSES_CPU_TARGET_ARCH "riscv" +#elif defined(__powerpc64__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + #define TESSES_CPU_TARGET_ARCH "ppc64le" +#elif defined(__powerpc64__) + #define TESSES_CPU_TARGET_ARCH "ppc64" +#elif defined(__powerpc__) + #define TESSES_CPU_TARGET_ARCH "ppc" +#elif defined(__s390x__) + #define TESSES_CPU_TARGET_ARCH "s390x" +#elif defined(__loongarch__) + #define TESSES_CPU_TARGET_ARCH "loongarch64" +#elif defined(__mips__) + #define TESSES_CPU_TARGET_ARCH "mips" +#elif defined(__sparc__) + #define TESSES_CPU_TARGET_ARCH "sparc" +#elif defined(__sh__) + #define TESSES_CPU_TARGET_ARCH "sh" +#elif defined(__m68k__) + #define TESSES_CPU_TARGET_ARCH "m68k" +#elif defined(__alpha__) + #define TESSES_CPU_TARGET_ARCH "alpha" +#elif defined(__arc__) + #define TESSES_CPU_TARGET_ARCH "arc" +#elif defined(__csky__) + #define TESSES_CPU_TARGET_ARCH "csky" +#elif defined(__hexagon__) + #define TESSES_CPU_TARGET_ARCH "hexagon" +#elif defined(__microblaze__) + #define TESSES_CPU_TARGET_ARCH "microblaze" +#elif defined(__nios2__) + #define TESSES_CPU_TARGET_ARCH "nios2" +#elif defined(__or1k__) + #define TESSES_CPU_TARGET_ARCH "openrisc" +#elif defined(__parisc__) + #define TESSES_CPU_TARGET_ARCH "parisc" +#elif defined(__xtensa__) + #define TESSES_CPU_TARGET_ARCH "xtensa" +#else + #define TESSES_CPU_TARGET_ARCH "unknown" +#endif + +#define TESSES_CPU_TARGET TESSES_CPU_TARGET_OS "-" TESSES_CPU_TARGET_ARCH + + +#endif diff --git a/main.c b/main.c new file mode 100644 index 0000000..64fbf0c --- /dev/null +++ b/main.c @@ -0,0 +1,8 @@ +#include "tesses_cpu_arch.h" +#include + +int main(int argc, char** argv) +{ + printf("%s\n", TESSES_CPU_TARGET); + return 0; +} \ No newline at end of file diff --git a/tesses_cpu_archConfig.cmake.in b/tesses_cpu_archConfig.cmake.in new file mode 100644 index 0000000..b033dc2 --- /dev/null +++ b/tesses_cpu_archConfig.cmake.in @@ -0,0 +1,5 @@ +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/tesses_cpu_arch-targets.cmake") + +check_required_components(tesses_cpu_arch) \ No newline at end of file