feat: make hwinfo features modular (#98)

* feat: make hwinfo features modular

* fix: use the latest available C++ standard

* fix!: deprecate NO_OCL in favour of HWINFO_GPU_OPENCL

* doc: add docs for the modular targets/options

* fix: add preprocessor feature guards

* ci: test build of all features in ci

* fix: detect C++ standard after enabling C++ language
This commit is contained in:
Amin Yahyaabadi
2024-07-23 23:41:46 -07:00
committed by GitHub
parent 13be72801b
commit ef8fce2d91
28 changed files with 489 additions and 123 deletions

View File

@@ -18,12 +18,5 @@ jobs:
- name: Setup clang - name: Setup clang
uses: egor-tensin/setup-clang@v1 uses: egor-tensin/setup-clang@v1
- name: Configure CMake - name: Build and Test
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=Release -DNO_OCL=ON run: ./scripts/feature-tests.shell
- name: Build
run: cmake --build ${{github.workspace}}/build
- name: Run Example
working-directory: ${{github.workspace}}/build
run: ctest --verbose

View File

@@ -6,29 +6,18 @@ on:
pull_request: pull_request:
branches: [ "main" ] branches: [ "main" ]
env:
BUILD_TYPE: Release
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Setup gcc - name: Setup gcc
uses: egor-tensin/setup-gcc@v1 uses: egor-tensin/setup-gcc@v1
- name: Setup gitmodules - name: Setup gitmodules
run: git submodule update --init --recursive run: git submodule update --init --recursive
- name: Configure CMake - name: Build and Test
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DNO_OCL=ON run: ./scripts/feature-tests.shell
- name: Build
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
- name: Run Example
working-directory: ${{github.workspace}}/build
run: ctest --verbose

View File

@@ -15,12 +15,5 @@ jobs:
- name: Setup gitmodules - name: Setup gitmodules
run: git submodule update --init --recursive run: git submodule update --init --recursive
- name: Configure CMake - name: Build and Test
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=Release -DNO_OCL=ON run: ./scripts/feature-tests.shell
- name: Build
run: cmake --build ${{github.workspace}}/build
- name: Run Example
working-directory: ${{github.workspace}}/build
run: ctest --verbose

View File

@@ -17,12 +17,6 @@ jobs:
- name: Setup Visual Studio - name: Setup Visual Studio
uses: egor-tensin/vs-shell@v2 uses: egor-tensin/vs-shell@v2
- name: Configure CMake - name: Build and Test
run: cmake -B ${{github.workspace}}\build -DCMAKE_BUILD_TYPE=Release -UOPENCL_SDK_BUILD_SAMPLES -DNO_OCL=ON run: ./scripts/feature-tests.shell
shell: bash
- name: Build
run: cmake --build ${{github.workspace}}\build
- name: Run Example
working-directory: ${{github.workspace}}/build
run: ctest --verbose

View File

@@ -1,4 +1,5 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.16)
project(hwinfo VERSION 1.0.0 LANGUAGES CXX) project(hwinfo VERSION 1.0.0 LANGUAGES CXX)
include(GNUInstallDirs) include(GNUInstallDirs)
@@ -6,34 +7,55 @@ string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" PROJECT
option(BUILD_EXAMPLES "Build example program" ${PROJECT_IS_TOP_LEVEL}) option(BUILD_EXAMPLES "Build example program" ${PROJECT_IS_TOP_LEVEL})
option(BUILD_TESTING "Build test program" ${PROJECT_IS_TOP_LEVEL}) option(BUILD_TESTING "Build test program" ${PROJECT_IS_TOP_LEVEL})
option(NO_OCL "Disable OCL" OFF)
# set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") # Components
option(HWINFO_OS "Enable OS detection" ON)
option(HWINFO_MAINBOARD "Enable mainboard detection" ON)
option(HWINFO_CPU "Enable CPU detection" ON)
option(HWINFO_DISK "Enable disk detection" ON)
option(HWINFO_RAM "Enable RAM detection" ON)
option(HWINFO_GPU "Enable GPU detection" ON)
option(HWINFO_GPU_OPENCL "Enable usage of OpenCL in GPU information" OFF)
option(HWINFO_BATTERY "Enable battery detection" ON)
if (NOT DEFINED NO_OCL) # deprecated NO_OCL
set(CMAKE_CXX_STANDARD 20) if (DEFINED NO_OCL)
else () message(WARNING "NO_OCL is deprecated, use HWINFO_GPU_OPENCL instead")
set(CMAKE_CXX_STANDARD 11) set(HWINFO_GPU_OPENCL NOT NO_OCL)
endif () endif()
# Use the latest C++ standard available
if("${CMAKE_CXX_STANDARD}" STREQUAL "")
if(DEFINED CMAKE_CXX23_STANDARD_COMPILE_OPTION OR DEFINED CMAKE_CXX23_EXTENSION_COMPILE_OPTION)
set(CMAKE_CXX_STANDARD 23)
elseif(DEFINED CMAKE_CXX20_STANDARD_COMPILE_OPTION OR DEFINED CMAKE_CXX20_EXTENSION_COMPILE_OPTION)
set(CMAKE_CXX_STANDARD 20)
elseif(DEFINED CMAKE_CXX17_STANDARD_COMPILE_OPTION OR DEFINED
CMAKE_CXX17_EXTENSION_COMPILE_OPTION
)
set(CMAKE_CXX_STANDARD 17)
elseif(DEFINED CMAKE_CXX14_STANDARD_COMPILE_OPTION OR DEFINED
CMAKE_CXX14_EXTENSION_COMPILE_OPTION
)
set(CMAKE_CXX_STANDARD 14)
else()
set(CMAKE_CXX_STANDARD 11)
endif()
endif()
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(HWINFO_GPU_OPENCL)
if(NOT TARGET miss-opencl_static)
add_subdirectory(${PROJECT_SOURCE_DIR}/external/miss-opencl)
endif()
endif()
# set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
if (NOT DEFINED NO_OCL) set(HWINFO_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
if (NOT TARGET miss-opencl_static)
add_subdirectory(external/miss-opencl)
endif ()
add_compile_definitions(USE_OCL)
add_compile_definitions(NOMINMAX)
endif ()
include_directories({PROJECT_SOURCE_DIR}/include)
add_subdirectory(src) add_subdirectory(src)
target_include_directories(HWinfo PUBLIC ${PROJECT_SOURCE_DIR}/include/)
install(DIRECTORY include/hwinfo DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
if (NOT PROJECT_IS_TOP_LEVEL) if (NOT PROJECT_IS_TOP_LEVEL)
return() return()

View File

@@ -12,8 +12,7 @@
hwinfo provides an easy-to-use and modern C++ API for retrieving hardware information of your systems components such as hwinfo provides an easy-to-use and modern C++ API for retrieving hardware information of your systems components such as
CPU, RAM, GPU, Disks, Mainboard, ... CPU, RAM, GPU, Disks, Mainboard, ...
hwinfo builds using C++20. However, if your compiler does not support C++20, you can fall back to C++11 by setting the hwinfo automatically uses the latest C++ standard supported by your compiler. C++20 is required for GPU OpenCL support if enabled (configurable with `HWINFO_GPU_OPENCL`).
`NO_OCL` CMake variable (add `-DNO_OCL=ON` to the CMake command).
> **Note** > **Note**
> >
@@ -74,6 +73,37 @@ hwinfo builds using C++20. However, if your compiler does not support C++20, you
| | Capacity | ✔️ | ✔️ | ️❌ | | | Capacity | ✔️ | ✔️ | ️❌ |
| | Charging | ✔️ | ✔️ | ❌ | | | Charging | ✔️ | ✔️ | ❌ |
All components are available via the `hwinfo::hwinfo` target, or via individual CMake targets, which you can choose and link against depending on your needs.
```cmake
target_link_libraries(your_target PRIVATE hwinfo::hwinfo)
```
or
```cmake
target_link_libraries(
your_target
PRIVATE hwinfo::cpu
hwinfo::gpu
hwinfo::ram
hwinfo::mainboard
hwinfo::disk
hwinfo::os
hwinfo::battery)
```
The CMake options control which components will be built and available in the library:
- `HWINFO_OS` "Enable OS detection" (default to `ON`)
- `HWINFO_MAINBOARD` "Enable mainboard detection" (default to `ON`)
- `HWINFO_CPU` "Enable CPU detection" (default to `ON`)
- `HWINFO_DISK` "Enable disk detection" (default to `ON`)
- `HWINFO_RAM` "Enable RAM detection" (default to `ON`)
- `HWINFO_GPU` "Enable GPU detection" (default to `ON`)
- `HWINFO_GPU_OPENCL` "Enable usage of OpenCL in GPU information" (default to `OFF`)
- `HWINFO_BATTERY` "Enable battery detection" (default to `ON`)
## API ## API
This section describes, how you can get information about the supported components of your computer. This section describes, how you can get information about the supported components of your computer.
@@ -231,7 +261,7 @@ Disk 4:
``` ```
## Include `hwinfo` in your cmake project ## Directly including `hwinfo` in your cmake project
1. Download `hwinfo` into your project (e.g. in `<project-root>/third_party/hwinfo`) 1. Download `hwinfo` into your project (e.g. in `<project-root>/third_party/hwinfo`)
``` ```
@@ -243,6 +273,8 @@ Disk 4:
```cmake ```cmake
# file: <project-root>/CMakeLists.txt # file: <project-root>/CMakeLists.txt
# define the HWINFO_* options if you want to change the default values
add_subdirectory(third_party/hwinfo) add_subdirectory(third_party/hwinfo)
``` ```
3. Include `hwinfo` into your `.cpp/.h` files: 3. Include `hwinfo` into your `.cpp/.h` files:
@@ -258,5 +290,5 @@ Disk 4:
4. Link it in cmake 4. Link it in cmake
```cmake ```cmake
add_executable(your_executable your_executable.cpp) add_executable(your_executable your_executable.cpp)
target_link_libraries(your_executable PUBLIC hwinfo::HWinfo) target_link_libraries(your_executable PUBLIC hwinfo::hwinfo)
``` ```

View File

@@ -7,4 +7,4 @@ FetchContent_Declare(
GIT_TAG 11.0.1) GIT_TAG 11.0.1)
FetchContent_MakeAvailable(fmt) FetchContent_MakeAvailable(fmt)
target_link_libraries(Example PRIVATE hwinfo::HWinfo fmt::fmt) target_link_libraries(Example PRIVATE hwinfo::hwinfo fmt::fmt)

View File

@@ -3,6 +3,8 @@
#pragma once #pragma once
#ifdef HWINFO_BATTERY
#include <cstdint> #include <cstdint>
#include <string> #include <string>
#include <vector> #include <vector>
@@ -46,3 +48,5 @@ class Battery {
std::vector<Battery> getAllBatteries(); std::vector<Battery> getAllBatteries();
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_BATTERY

View File

@@ -3,6 +3,8 @@
#pragma once #pragma once
#ifdef HWINFO_CPU
#include <hwinfo/platform.h> #include <hwinfo/platform.h>
#include <hwinfo/utils/wmi_wrapper.h> #include <hwinfo/utils/wmi_wrapper.h>
@@ -74,3 +76,5 @@ class CPU {
std::vector<CPU> getAllCPUs(); std::vector<CPU> getAllCPUs();
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_CPU

View File

@@ -3,6 +3,8 @@
#pragma once #pragma once
#ifdef HWINFO_CPU
#include "hwinfo/platform.h" #include "hwinfo/platform.h"
#if defined(HWINFO_X86) #if defined(HWINFO_X86)
@@ -52,3 +54,5 @@ inline void cpuid(uint32_t func_id, uint32_t sub_func_id, uint32_t regs[4]) {
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_X86 #endif // HWINFO_X86
#endif // HWINFO_CPU

View File

@@ -3,6 +3,8 @@
#pragma once #pragma once
#ifdef HWINFO_DISK
#include <hwinfo/platform.h> #include <hwinfo/platform.h>
#include <cstdint> #include <cstdint>
@@ -39,3 +41,5 @@ class Disk {
std::vector<Disk> getAllDisks(); std::vector<Disk> getAllDisks();
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_DISK

View File

@@ -3,6 +3,8 @@
#pragma once #pragma once
#ifdef HWINFO_GPU
#include <hwinfo/platform.h> #include <hwinfo/platform.h>
#include <cstdint> #include <cstdint>
@@ -43,3 +45,5 @@ class GPU {
std::vector<GPU> getAllGPUs(); std::vector<GPU> getAllGPUs();
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_GPU

View File

@@ -9,4 +9,4 @@
#include <hwinfo/gpu.h> #include <hwinfo/gpu.h>
#include <hwinfo/mainboard.h> #include <hwinfo/mainboard.h>
#include <hwinfo/os.h> #include <hwinfo/os.h>
#include <hwinfo/ram.h> #include <hwinfo/ram.h>

View File

@@ -3,6 +3,8 @@
#pragma once #pragma once
#ifdef HWINFO_MAINBOARD
#include <hwinfo/platform.h> #include <hwinfo/platform.h>
#include <string> #include <string>
@@ -29,3 +31,5 @@ class MainBoard {
}; };
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_MAINBOARD

View File

@@ -3,6 +3,8 @@
#pragma once #pragma once
#ifdef HWINFO_OS
#include <hwinfo/platform.h> #include <hwinfo/platform.h>
#include <string> #include <string>
@@ -33,3 +35,5 @@ class OS {
}; };
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_OS

View File

@@ -3,6 +3,8 @@
#pragma once #pragma once
#ifdef HWINFO_RAM
#include <hwinfo/platform.h> #include <hwinfo/platform.h>
#include <cstdint> #include <cstdint>
@@ -37,3 +39,5 @@ class Memory {
}; };
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_RAM

View File

@@ -3,6 +3,9 @@
#pragma once #pragma once
#if defined(HWINFO_CPU) && defined(HWINFO_GPU) && defined(HWINFO_RAM) && defined(HWINFO_DISK)
#define HWINFO_SYSTEM
#include <hwinfo/cpu.h> #include <hwinfo/cpu.h>
#include <hwinfo/disk.h> #include <hwinfo/disk.h>
#include <hwinfo/gpu.h> #include <hwinfo/gpu.h>
@@ -29,3 +32,5 @@ class System {
}; };
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_SYSTEM

View File

@@ -3,6 +3,7 @@
#include <hwinfo/cpu.h> #include <hwinfo/cpu.h>
#include <string> #include <string>
#include <vector>
namespace hwinfo { namespace hwinfo {
namespace filesystem { namespace filesystem {
@@ -15,7 +16,7 @@ std::vector<std::string> getDirectoryEntries(const std::string& path);
int64_t get_specs_by_file_path(const std::string& path); int64_t get_specs_by_file_path(const std::string& path);
#endif // HWINFO_UNIX || HWINFO_APPLE #endif // HWINFO_UNIX || HWINFO_APPLE
#ifdef HWINFO_UNIX #if defined(HWINFO_UNIX) && defined(HWINFO_CPU)
Jiffies get_jiffies(int index); Jiffies get_jiffies(int index);
#endif // HWINFO_UNIX #endif // HWINFO_UNIX

52
scripts/feature-tests.shell Executable file
View File

@@ -0,0 +1,52 @@
#!/bin/bash -ex
# bash or pwsh
# Test default (all)
cmake -B ./build -DCMAKE_BUILD_TYPE=Release
cmake --build ./build --parallel --config Release
cd build
ctest -C Release -V
cd ..
# Test OS target
rm build/CMakeCache.txt
cmake -B ./build -DCMAKE_BUILD_TYPE=Debug -DHWINFO_OS=ON -DHWINFO_MAINBOARD=OFF -DHWINFO_CPU=OFF -DHWINFO_DISK=OFF -DHWINFO_RAM=OFF -DHWINFO_GPU=OFF -DHWINFO_GPU_OPENCL=OFF -DHWINFO_BATTERY=OFF
cmake --build ./build --parallel --config Debug -t hwinfo_os
# Test mainboard target
rm build/CMakeCache.txt
cmake -B ./build -DCMAKE_BUILD_TYPE=Debug -DHWINFO_OS=OFF -DHWINFO_MAINBOARD=ON -DHWINFO_CPU=OFF -DHWINFO_DISK=OFF -DHWINFO_RAM=OFF -DHWINFO_GPU=OFF -DHWINFO_GPU_OPENCL=OFF -DHWINFO_BATTERY=OFF
cmake --build ./build --parallel --config Debug -t hwinfo_mainboard
# Test CPU target
rm build/CMakeCache.txt
cmake -B ./build -DCMAKE_BUILD_TYPE=Debug -DHWINFO_OS=OFF -DHWINFO_MAINBOARD=OFF -DHWINFO_CPU=ON -DHWINFO_DISK=OFF -DHWINFO_RAM=OFF -DHWINFO_GPU=OFF -DHWINFO_GPU_OPENCL=OFF -DHWINFO_BATTERY=OFF
cmake --build ./build --parallel --config Debug -t hwinfo_cpu
# Test disk target
rm build/CMakeCache.txt
cmake -B ./build -DCMAKE_BUILD_TYPE=Debug -DHWINFO_OS=OFF -DHWINFO_MAINBOARD=OFF -DHWINFO_CPU=OFF -DHWINFO_DISK=ON -DHWINFO_RAM=OFF -DHWINFO_GPU=OFF -DHWINFO_GPU_OPENCL=OFF -DHWINFO_BATTERY=OFF
cmake --build ./build --parallel --config Debug -t hwinfo_disk
# Test RAM target
rm build/CMakeCache.txt
cmake -B ./build -DCMAKE_BUILD_TYPE=Debug -DHWINFO_OS=OFF -DHWINFO_MAINBOARD=OFF -DHWINFO_CPU=OFF -DHWINFO_DISK=OFF -DHWINFO_RAM=ON -DHWINFO_GPU=OFF -DHWINFO_GPU_OPENCL=OFF -DHWINFO_BATTERY=OFF
cmake --build ./build --parallel --config Debug -t hwinfo_ram
# Test GPU target
rm build/CMakeCache.txt
cmake -B ./build -DCMAKE_BUILD_TYPE=Debug -DHWINFO_OS=OFF -DHWINFO_MAINBOARD=OFF -DHWINFO_CPU=OFF -DHWINFO_DISK=OFF -DHWINFO_RAM=OFF -DHWINFO_GPU=ON -DHWINFO_GPU_OPENCL=OFF -DHWINFO_BATTERY=OFF
cmake --build ./build --parallel --config Debug -t hwinfo_gpu
# # Test GPU target with OpenCL
# rm build/CMakeCache.txt
# cmake -B ./build -DCMAKE_BUILD_TYPE=Debug -DHWINFO_OS=OFF -DHWINFO_MAINBOARD=OFF -DHWINFO_CPU=OFF -DHWINFO_DISK=OFF -DHWINFO_RAM=OFF -DHWINFO_GPU=ON -DHWINFO_GPU_OPENCL=ON -DHWINFO_BATTERY=OFF
# cmake --build ./build --parallel --config Debug -t hwinfo_gpu
# Test battery target
rm build/CMakeCache.txt
cmake -B ./build -DCMAKE_BUILD_TYPE=Debug -DHWINFO_OS=OFF -DHWINFO_MAINBOARD=OFF -DHWINFO_CPU=OFF -DHWINFO_DISK=OFF -DHWINFO_RAM=OFF -DHWINFO_GPU=OFF -DHWINFO_GPU_OPENCL=OFF -DHWINFO_BATTERY=ON
cmake --build ./build --parallel --config Debug -t hwinfo_battery
# Clean up
rm build/CMakeCache.txt

View File

@@ -1,56 +1,277 @@
add_library(HWinfo STATIC # hwinfo (all in one target)
hwinfo.cpp add_library(hwinfo hwinfo.cpp)
# platform independent definitions add_library(hwinfo::hwinfo ALIAS hwinfo)
PCIMapper.cpp
battery.cpp
cpu.cpp
gpu.cpp
ram.cpp
os.cpp
mainboard.cpp
disk.cpp
# apple specific definitions
apple/utils/filesystem.cpp
apple/battery.cpp
apple/cpu.cpp
apple/gpu.cpp
apple/ram.cpp
apple/os.cpp
apple/mainboard.cpp
apple/disk.cpp
# linux specific definitions
linux/utils/filesystem.cpp
linux/battery.cpp
linux/cpu.cpp
linux/gpu.cpp
linux/ram.cpp
linux/os.cpp
linux/mainboard.cpp
linux/disk.cpp
# windows specific definitions
windows/utils/filesystem.cpp
windows/utils/wmi_wrapper.cpp
windows/battery.cpp
windows/cpu.cpp
windows/gpu.cpp
windows/ram.cpp
windows/os.cpp
windows/mainboard.cpp
windows/disk.cpp
)
if (WIN32 AND ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") # for backward compatibility
target_link_libraries(HWinfo PUBLIC "wbemuuid") add_library(HWinfo ALIAS hwinfo)
endif () add_library(hwinfo::HWinfo ALIAS hwinfo)
if (APPLE) target_include_directories(hwinfo PUBLIC ${PROJECT_SOURCE_DIR}/include/)
target_link_libraries(HWinfo PUBLIC "-framework IOKit" "-framework CoreFoundation")
# C++ options based on CMake options
set(HWINFO_DEFINITIONS "")
set(OPTIONS_LIST
HWINFO_OS
HWINFO_MAINBOARD
HWINFO_CPU
HWINFO_DISK
HWINFO_RAM
HWINFO_GPU
HWINFO_BATTERY)
foreach(OPTION IN LISTS OPTIONS_LIST)
if(${OPTION})
list(APPEND HWINFO_DEFINITIONS ${OPTION})
endif()
endforeach()
target_compile_definitions(hwinfo PUBLIC ${HWINFO_DEFINITIONS})
install(TARGETS hwinfo DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(DIRECTORY include/hwinfo DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
# filesystem_utils
add_library(
hwinfo_utils_filesystem
# apple specific definitions
apple/utils/filesystem.cpp
# linux specific definitions
linux/utils/filesystem.cpp
# windows specific definitions
windows/utils/filesystem.cpp)
add_library(hwinfo::utils::filesystem ALIAS hwinfo_utils_filesystem)
target_include_directories(
hwinfo_utils_filesystem
PUBLIC $<BUILD_INTERFACE:${HWINFO_INCLUDE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_compile_definitions(hwinfo_utils_filesystem PUBLIC ${HWINFO_DEFINITIONS})
# wmi_wrapper on windows
add_library(
hwinfo_utils_wmi
# windows specific definitions
windows/utils/wmi_wrapper.cpp)
add_library(hwinfo::utils::wmi ALIAS hwinfo_utils_wmi)
if(WIN32 AND ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
target_link_libraries(hwinfo_utils_wmi PRIVATE "wbemuuid")
endif() endif()
if (NOT DEFINED NO_OCL) target_include_directories(
target_link_libraries(HWinfo PUBLIC miss-opencl_static) hwinfo_utils_wmi PUBLIC $<BUILD_INTERFACE:${HWINFO_INCLUDE_DIR}>
endif () $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
add_library(${PROJECT_NAME}::HWinfo ALIAS HWinfo) target_compile_definitions(hwinfo_utils_wmi PUBLIC ${HWINFO_DEFINITIONS})
install(TARGETS HWinfo DESTINATION ${CMAKE_INSTALL_LIBDIR}) # PCIMapper on Unix
add_library(hwinfo_utils_PCIMapper PCIMapper.cpp)
add_library(hwinfo::utils::PCIMapper ALIAS hwinfo_utils_PCIMapper)
target_include_directories(
hwinfo_utils_PCIMapper
PUBLIC $<BUILD_INTERFACE:${HWINFO_INCLUDE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_compile_definitions(hwinfo_utils_PCIMapper PUBLIC ${HWINFO_DEFINITIONS})
# battery
if(HWINFO_BATTERY)
add_library(
hwinfo_battery
battery.cpp
# apple specific definitions
apple/battery.cpp
# linux specific definitions
linux/battery.cpp
# windows specific definitions
windows/battery.cpp)
add_library(hwinfo::battery ALIAS hwinfo_battery)
target_include_directories(
hwinfo_battery PUBLIC $<BUILD_INTERFACE:${HWINFO_INCLUDE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_link_libraries(hwinfo_battery PRIVATE hwinfo::utils::filesystem
hwinfo::utils::wmi)
target_compile_definitions(hwinfo_battery PUBLIC ${HWINFO_DEFINITIONS})
install(TARGETS hwinfo_battery DESTINATION ${CMAKE_INSTALL_LIBDIR})
target_link_libraries(hwinfo PUBLIC hwinfo_battery)
endif()
# cpu
if(HWINFO_CPU)
add_library(
hwinfo_cpu
cpu.cpp
# apple specific definitions
apple/cpu.cpp
# linux specific definitions
linux/cpu.cpp
# windows specific definitions
windows/cpu.cpp)
add_library(hwinfo::cpu ALIAS hwinfo_cpu)
target_include_directories(
hwinfo_cpu PUBLIC $<BUILD_INTERFACE:${HWINFO_INCLUDE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_link_libraries(hwinfo_cpu PRIVATE hwinfo::utils::filesystem
hwinfo::utils::wmi)
target_compile_definitions(hwinfo_cpu PUBLIC ${HWINFO_DEFINITIONS})
target_link_libraries(hwinfo PUBLIC hwinfo_cpu)
install(TARGETS hwinfo_cpu DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
# disk
if(HWINFO_DISK)
add_library(
hwinfo_disk
disk.cpp
# apple specific definitions
apple/disk.cpp
# linux specific definitions
linux/disk.cpp
# windows specific definitions
windows/disk.cpp)
add_library(hwinfo::disk ALIAS hwinfo_disk)
target_include_directories(
hwinfo_disk PUBLIC $<BUILD_INTERFACE:${HWINFO_INCLUDE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_compile_definitions(hwinfo_disk PUBLIC ${HWINFO_DEFINITIONS})
target_link_libraries(hwinfo_disk PRIVATE hwinfo::utils::filesystem
hwinfo::utils::wmi)
if(APPLE)
target_link_libraries(hwinfo_disk PRIVATE "-framework IOKit"
"-framework CoreFoundation")
endif()
install(TARGETS hwinfo_disk DESTINATION ${CMAKE_INSTALL_LIBDIR})
target_link_libraries(hwinfo PUBLIC hwinfo_disk)
endif()
# gpu
if(HWINFO_GPU)
add_library(
hwinfo_gpu
gpu.cpp
# apple specific definitions
apple/gpu.cpp
# linux specific definitions
linux/gpu.cpp
# windows specific definitions
windows/gpu.cpp)
add_library(hwinfo::gpu ALIAS hwinfo_gpu)
target_include_directories(
hwinfo_gpu PUBLIC $<BUILD_INTERFACE:${HWINFO_INCLUDE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_link_libraries(
hwinfo_gpu PRIVATE hwinfo::utils::filesystem hwinfo::utils::wmi
hwinfo::utils::PCIMapper)
target_compile_definitions(hwinfo_gpu PUBLIC ${HWINFO_DEFINITIONS})
if(HWINFO_GPU_OPENCL)
if(NOT TARGET miss-opencl_static)
add_subdirectory(${PROJECT_SOURCE_DIR}/external/miss-opencl)
endif()
target_compile_definitions(hwinfo_gpu PRIVATE USE_OCL NOMINMAX)
target_link_libraries(hwinfo_gpu PRIVATE miss-opencl_static)
endif()
install(TARGETS hwinfo_gpu DESTINATION ${CMAKE_INSTALL_LIBDIR})
target_link_libraries(hwinfo PUBLIC hwinfo_gpu)
endif()
# mainboard
if(HWINFO_MAINBOARD)
add_library(
hwinfo_mainboard
mainboard.cpp
# apple specific definitions
apple/mainboard.cpp
# linux specific definitions
linux/mainboard.cpp
# windows specific definitions
windows/mainboard.cpp)
add_library(hwinfo::mainboard ALIAS hwinfo_mainboard)
target_include_directories(
hwinfo_mainboard PUBLIC $<BUILD_INTERFACE:${HWINFO_INCLUDE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_compile_definitions(hwinfo_mainboard PUBLIC ${HWINFO_DEFINITIONS})
target_link_libraries(hwinfo_mainboard PRIVATE hwinfo::utils::wmi)
install(TARGETS hwinfo_mainboard DESTINATION ${CMAKE_INSTALL_LIBDIR})
target_link_libraries(hwinfo PUBLIC hwinfo_mainboard)
endif()
# os
if(HWINFO_OS)
add_library(
hwinfo_os
os.cpp
# apple specific definitions
apple/os.cpp
# linux specific definitions
linux/os.cpp
# windows specific definitions
windows/os.cpp)
add_library(hwinfo::os ALIAS hwinfo_os)
target_include_directories(
hwinfo_os PUBLIC $<BUILD_INTERFACE:${HWINFO_INCLUDE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_compile_definitions(hwinfo_os PUBLIC ${HWINFO_DEFINITIONS})
target_link_libraries(hwinfo_os PRIVATE hwinfo::utils::wmi)
target_link_libraries(hwinfo PUBLIC hwinfo_os)
install(TARGETS hwinfo_os DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()
# ram
if(HWINFO_RAM)
add_library(
hwinfo_ram
ram.cpp
# apple specific definitions
apple/ram.cpp
# linux specific definitions
linux/ram.cpp
# windows specific definitions
windows/ram.cpp)
add_library(hwinfo::ram ALIAS hwinfo_ram)
target_include_directories(
hwinfo_ram PUBLIC $<BUILD_INTERFACE:${HWINFO_INCLUDE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_compile_definitions(hwinfo_ram PUBLIC ${HWINFO_DEFINITIONS})
target_link_libraries(hwinfo_ram PRIVATE hwinfo::utils::wmi)
target_link_libraries(hwinfo PUBLIC hwinfo_ram)
install(TARGETS hwinfo_ram DESTINATION ${CMAKE_INSTALL_LIBDIR})
endif()

View File

@@ -1,6 +1,8 @@
// Copyright Leon Freist // Copyright Leon Freist
// Author Leon Freist <freist@informatik.uni-freiburg.de> // Author Leon Freist <freist@informatik.uni-freiburg.de>
#ifdef HWINFO_BATTERY
#include "hwinfo/battery.h" #include "hwinfo/battery.h"
namespace hwinfo { namespace hwinfo {
@@ -52,4 +54,6 @@ uint32_t Battery::energyFull() {
// _____________________________________________________________________________________________________________________ // _____________________________________________________________________________________________________________________
double Battery::capacity() { return static_cast<double>(energyNow()) / energyFull(); } double Battery::capacity() { return static_cast<double>(energyNow()) / energyFull(); }
} // namespace hwinfo } // namespace hwinfo
#endif

View File

@@ -1,6 +1,8 @@
// Copyright (c) Leon Freist <freist@informatik.uni-freiburg.de> // Copyright (c) Leon Freist <freist@informatik.uni-freiburg.de>
// This software is part of HWBenchmark // This software is part of HWBenchmark
#ifdef HWINFO_CPU
#include "hwinfo/cpu.h" #include "hwinfo/cpu.h"
#include <string> #include <string>
@@ -41,4 +43,6 @@ int64_t CPU::regularClockSpeed_MHz() const { return _regularClockSpeed_MHz; }
// _____________________________________________________________________________________________________________________ // _____________________________________________________________________________________________________________________
const std::vector<std::string>& CPU::flags() const { return _flags; } const std::vector<std::string>& CPU::flags() const { return _flags; }
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_CPU

View File

@@ -1,6 +1,8 @@
// Copyright Leon Freist // Copyright Leon Freist
// Author Leon Freist <freist@informatik.uni-freiburg.de> // Author Leon Freist <freist@informatik.uni-freiburg.de>
#ifdef HWINFO_DISK
#include <hwinfo/disk.h> #include <hwinfo/disk.h>
namespace hwinfo { namespace hwinfo {
@@ -21,3 +23,5 @@ int64_t Disk::size_Bytes() const { return _size_Bytes; }
int Disk::id() const { return _id; } int Disk::id() const { return _id; }
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_DISK

View File

@@ -1,6 +1,8 @@
// Copyright Leon Freist // Copyright Leon Freist
// Author Leon Freist <freist@informatik.uni-freiburg.de> // Author Leon Freist <freist@informatik.uni-freiburg.de>
#ifdef HWINFO_GPU
#include <hwinfo/gpu.h> #include <hwinfo/gpu.h>
#include <string> #include <string>
@@ -34,4 +36,6 @@ const std::string& GPU::vendor_id() const { return _vendor_id; }
// _____________________________________________________________________________________________________________________ // _____________________________________________________________________________________________________________________
const std::string& GPU::device_id() const { return _device_id; } const std::string& GPU::device_id() const { return _device_id; }
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_GPU

View File

@@ -55,6 +55,8 @@ int64_t hwinfo::filesystem::get_specs_by_file_path(const std::string& path) {
} }
} }
#if defined(HWINFO_CPU)
hwinfo::Jiffies hwinfo::filesystem::get_jiffies(int index) { hwinfo::Jiffies hwinfo::filesystem::get_jiffies(int index) {
// std::string text = "cpu 349585 0 30513 875546 0 935 0 0 0 0"; // std::string text = "cpu 349585 0 30513 875546 0 935 0 0 0 0";
@@ -92,4 +94,6 @@ hwinfo::Jiffies hwinfo::filesystem::get_jiffies(int index) {
return {all, working}; return {all, working};
} }
#endif // HWINFO_CPU
#endif // HWINFO_UNIX #endif // HWINFO_UNIX

View File

@@ -1,6 +1,8 @@
// Copyright (c) Leon Freist <freist@informatik.uni-freiburg.de> // Copyright (c) Leon Freist <freist@informatik.uni-freiburg.de>
// This software is part of HWBenchmark // This software is part of HWBenchmark
#ifdef HWINFO_MAINBOARD
#include <hwinfo/mainboard.h> #include <hwinfo/mainboard.h>
namespace hwinfo { namespace hwinfo {
@@ -17,4 +19,6 @@ const std::string& MainBoard::version() const { return _version; }
// _____________________________________________________________________________________________________________________ // _____________________________________________________________________________________________________________________
const std::string& MainBoard::serialNumber() const { return _serialNumber; } const std::string& MainBoard::serialNumber() const { return _serialNumber; }
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_MAINBOARD

View File

@@ -1,6 +1,8 @@
// Copyright (c) Leon Freist <freist@informatik.uni-freiburg.de> // Copyright (c) Leon Freist <freist@informatik.uni-freiburg.de>
// This software is part of HWBenchmark // This software is part of HWBenchmark
#ifdef HWINFO_OS
#include "hwinfo/os.h" #include "hwinfo/os.h"
#include <string> #include <string>
@@ -28,4 +30,6 @@ bool OS::isBigEndian() const { return _bigEndian; }
// _____________________________________________________________________________________________________________________ // _____________________________________________________________________________________________________________________
bool OS::isLittleEndian() const { return _littleEndian; } bool OS::isLittleEndian() const { return _littleEndian; }
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_OS

View File

@@ -1,6 +1,8 @@
// Copyright (c) Leon Freist <freist@informatik.uni-freiburg.de> // Copyright (c) Leon Freist <freist@informatik.uni-freiburg.de>
// This software is part of HWBenchmark // This software is part of HWBenchmark
#ifdef HWINFO_RAM
#include <hwinfo/ram.h> #include <hwinfo/ram.h>
namespace hwinfo { namespace hwinfo {
@@ -18,3 +20,5 @@ int64_t Memory::total_Bytes() const {
} }
} // namespace hwinfo } // namespace hwinfo
#endif // HWINFO_RAM