diff --git a/CMakeLists.txt b/CMakeLists.txt index c330522ea..a4da789fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,11 @@ add_subdirectory(${CMAKE_SOURCE_DIR}/modula) add_subdirectory(${CMAKE_SOURCE_DIR}/client) add_subdirectory(${CMAKE_SOURCE_DIR}/extensions) +if(BUILD_TESTS OR BUILD_CLASSIFIER) + add_compile_definitions(ENABLE_TEST_VISIBILITY) + message(STATUS "Internal Visibility Enabled (Required for Tests or Classifier)") +endif() + # resource-tuner is a mandatory build add_subdirectory(${CMAKE_SOURCE_DIR}/resource-tuner) diff --git a/resource-tuner/CMakeLists.txt b/resource-tuner/CMakeLists.txt index 35b573175..e32e543be 100644 --- a/resource-tuner/CMakeLists.txt +++ b/resource-tuner/CMakeLists.txt @@ -39,6 +39,8 @@ else() endif() add_library(RestuneCore ${SOURCES}) +target_compile_options(RestuneCore PRIVATE -fvisibility=hidden) + set_target_properties(RestuneCore PROPERTIES VERSION 1.0.0 SOVERSION 1) target_link_libraries(RestuneCore PUBLIC ${LINK_LIBS}) diff --git a/resource-tuner/core/Include/ClientDataManager.h b/resource-tuner/core/Include/ClientDataManager.h index 63d765d25..bb64e7230 100644 --- a/resource-tuner/core/Include/ClientDataManager.h +++ b/resource-tuner/core/Include/ClientDataManager.h @@ -22,6 +22,8 @@ #include "Logger.h" #include "Utils.h" +#include "RestuneVisibility.h" + #define PER_CLIENT_TID_CAP 32 typedef struct _client_info { @@ -48,7 +50,7 @@ typedef struct { * - Essentially ClientDataManager is a central storage for Client Data, and other Components * like RateLimiter, PulseMonitor and RequestManager are clients of the ClientDataManager. */ -class ClientDataManager { +class RESTUNE_INTERNAL_EXPORT ClientDataManager { private: static std::shared_ptr mClientDataManagerInstance; static std::mutex instanceProtectionLock; diff --git a/resource-tuner/core/Include/ClientGarbageCollector.h b/resource-tuner/core/Include/ClientGarbageCollector.h index f94150a3d..84cb15120 100644 --- a/resource-tuner/core/Include/ClientGarbageCollector.h +++ b/resource-tuner/core/Include/ClientGarbageCollector.h @@ -77,8 +77,8 @@ class ClientGarbageCollector { } }; -ErrCode startClientGarbageCollectorDaemon(); -void stopClientGarbageCollectorDaemon(); +__attribute__((visibility("default"))) ErrCode startClientGarbageCollectorDaemon(); +__attribute__((visibility("default"))) void stopClientGarbageCollectorDaemon(); #endif diff --git a/resource-tuner/core/Include/CocoTable.h b/resource-tuner/core/Include/CocoTable.h index b9a01f86d..a136ec199 100644 --- a/resource-tuner/core/Include/CocoTable.h +++ b/resource-tuner/core/Include/CocoTable.h @@ -87,7 +87,7 @@ * The actual resource applier, teardown callbacks are invoked through * the CocoTable. */ -class CocoTable { +class __attribute__((visibility("default"))) CocoTable { private: static std::shared_ptr mCocoTableInstance; static std::mutex instanceProtectionLock; diff --git a/resource-tuner/core/Include/PropertiesRegistry.h b/resource-tuner/core/Include/PropertiesRegistry.h index 85b3f5f42..b6c09fa12 100644 --- a/resource-tuner/core/Include/PropertiesRegistry.h +++ b/resource-tuner/core/Include/PropertiesRegistry.h @@ -10,11 +10,13 @@ #include #include +#include "RestuneVisibility.h" + /** * @brief PropertiesRegistry * @details Stores and manages all the properties parsed from the Properties Config files. */ -class PropertiesRegistry { +class RESTUNE_INTERNAL_EXPORT PropertiesRegistry { private: static std::shared_ptr propRegistryInstance; std::unordered_map mProperties; diff --git a/resource-tuner/core/Include/PulseMonitor.h b/resource-tuner/core/Include/PulseMonitor.h index 4622e40b6..3fc1e9144 100644 --- a/resource-tuner/core/Include/PulseMonitor.h +++ b/resource-tuner/core/Include/PulseMonitor.h @@ -77,8 +77,8 @@ class PulseMonitor { } }; -ErrCode startPulseMonitorDaemon(); -void stopPulseMonitorDaemon(); +__attribute__((visibility("default"))) ErrCode startPulseMonitorDaemon(); +__attribute__((visibility("default"))) void stopPulseMonitorDaemon(); #endif diff --git a/resource-tuner/core/Include/RateLimiter.h b/resource-tuner/core/Include/RateLimiter.h index 90b84c6d6..fb3e90811 100644 --- a/resource-tuner/core/Include/RateLimiter.h +++ b/resource-tuner/core/Include/RateLimiter.h @@ -1,3 +1,4 @@ + // Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. // SPDX-License-Identifier: BSD-3-Clause-Clear @@ -31,11 +32,12 @@ #include "ClientDataManager.h" #include "UrmSettings.h" +#include "RestuneVisibility.h" /** * @brief RateLimiter * @details Responsible for Tracking Client Behaviour, and Protect against System Abuse. */ -class RateLimiter { +class RESTUNE_INTERNAL_EXPORT RateLimiter { private: static std::shared_ptr mRateLimiterInstance; static std::mutex instanceProtectionLock; diff --git a/resource-tuner/core/Include/RequestQueue.h b/resource-tuner/core/Include/RequestQueue.h index 3a950d38c..5d99b9d24 100644 --- a/resource-tuner/core/Include/RequestQueue.h +++ b/resource-tuner/core/Include/RequestQueue.h @@ -15,7 +15,7 @@ * @details It stores the pointer to the Requests and compares their priorities. The server thread picks up * these requests in the order of their priorities and processes them. */ -class RequestQueue : public OrderedQueue { +class __attribute__((visibility("default"))) RequestQueue : public OrderedQueue { private: static std::shared_ptr mRequestQueueInstance; static std::mutex instanceProtectionLock; diff --git a/resource-tuner/core/Include/ResourceRegistry.h b/resource-tuner/core/Include/ResourceRegistry.h index b984451e2..41410f5d0 100644 --- a/resource-tuner/core/Include/ResourceRegistry.h +++ b/resource-tuner/core/Include/ResourceRegistry.h @@ -97,7 +97,7 @@ typedef struct { * @details Stores information Relating to all the Resources available for Tuning. * Note: This information is extracted from Config YAML files. */ -class ResourceRegistry { +class __attribute__((visibility("default"))) ResourceRegistry { private: static std::shared_ptr resourceRegistryInstance; int32_t mTotalResources; diff --git a/resource-tuner/core/Include/RestuneInternal.h b/resource-tuner/core/Include/RestuneInternal.h index 4b30c9e1a..91b97f7b2 100644 --- a/resource-tuner/core/Include/RestuneInternal.h +++ b/resource-tuner/core/Include/RestuneInternal.h @@ -43,7 +43,7 @@ void submitResProvisionRequest(Request* request, int8_t isVerified); size_t submitPropGetRequest(void* request, std::string& result); -size_t submitPropGetRequest(const std::string& propName, std::string& result, const std::string& defVal); +__attribute__((visibility("default"))) size_t submitPropGetRequest(const std::string& propName, std::string& result, const std::string& defVal); ErrCode translateToPhysicalIDs(Resource* resource); diff --git a/resource-tuner/core/Include/RestuneVisibility.h b/resource-tuner/core/Include/RestuneVisibility.h new file mode 100644 index 000000000..3ffe60c48 --- /dev/null +++ b/resource-tuner/core/Include/RestuneVisibility.h @@ -0,0 +1,13 @@ +#ifndef RESTUNE_VISIBILITY_H +#define RESTUNE_VISIBILITY_H + +// If we are building tests, we force these symbols to be visible (default) +#if defined(ENABLE_TEST_VISIBILITY) + #define RESTUNE_INTERNAL_EXPORT __attribute__((visibility("default"))) + +// If we are building for production (and not testing), we hide them +#else + #define RESTUNE_INTERNAL_EXPORT __attribute__((visibility("hidden"))) +#endif + +#endif // RESTUNE_VISIBILITY_H diff --git a/resource-tuner/core/Include/TargetRegistry.h b/resource-tuner/core/Include/TargetRegistry.h index 3cac58a7a..7f9a863f3 100644 --- a/resource-tuner/core/Include/TargetRegistry.h +++ b/resource-tuner/core/Include/TargetRegistry.h @@ -78,7 +78,7 @@ typedef struct { * @details Stores all the target related info, fetched dynamically or provided * statically via Target and Init Config files. */ -class TargetRegistry { +class __attribute__((visibility("default"))) TargetRegistry { private: static std::shared_ptr targetRegistryInstance; diff --git a/resource-tuner/core/Server/Include/RequestReceiver.h b/resource-tuner/core/Server/Include/RequestReceiver.h index 824d0814b..0ae328a94 100644 --- a/resource-tuner/core/Server/Include/RequestReceiver.h +++ b/resource-tuner/core/Server/Include/RequestReceiver.h @@ -24,7 +24,7 @@ * appropriate module, using that module's registered callback. * Note, the callback is invoked on a separate thread (taken from the ThreadPool) */ -class RequestReceiver { +class __attribute__((visibility("default"))) RequestReceiver { private: static std::shared_ptr mRequestReceiverInstance; @@ -43,6 +43,6 @@ class RequestReceiver { } }; -void listenerThreadStartRoutine(); +__attribute__((visibility("default"))) void listenerThreadStartRoutine(); #endif diff --git a/resource-tuner/init/Include/RestuneParser.h b/resource-tuner/init/Include/RestuneParser.h index 41a90b268..09087353d 100644 --- a/resource-tuner/init/Include/RestuneParser.h +++ b/resource-tuner/init/Include/RestuneParser.h @@ -306,7 +306,7 @@ * Note, this class uses the YamlParser class for actually Reading and * Parsing the YAML data. */ -class RestuneParser { +class __attribute__((visibility("default"))) RestuneParser { private: ErrCode parseResourceConfigYamlNode(const std::string& filePath); ErrCode parsePropertiesConfigYamlNode(const std::string& filePath); diff --git a/resource-tuner/signals/Include/AppConfigs.h b/resource-tuner/signals/Include/AppConfigs.h index 4a28444f8..a6a638ec2 100644 --- a/resource-tuner/signals/Include/AppConfigs.h +++ b/resource-tuner/signals/Include/AppConfigs.h @@ -13,6 +13,8 @@ #include "UrmPlatformAL.h" #include "ErrCodes.h" +#include "RestuneVisibility.h" + typedef struct { std::string mAppName; int32_t mNumThreads; @@ -22,7 +24,7 @@ typedef struct { uint32_t* mSignalCodes; } AppConfig; -class AppConfigs { +class RESTUNE_INTERNAL_EXPORT AppConfigs { private: static std::shared_ptr appConfigRegistryInstance; std::unordered_map mAppConfig; diff --git a/resource-tuner/signals/Include/ExtFeaturesRegistry.h b/resource-tuner/signals/Include/ExtFeaturesRegistry.h index 264aa45ff..e89d9b9d2 100644 --- a/resource-tuner/signals/Include/ExtFeaturesRegistry.h +++ b/resource-tuner/signals/Include/ExtFeaturesRegistry.h @@ -33,7 +33,7 @@ typedef void (*RelayFeature)(uint32_t, const std::string&, const std::string&, i * @details Stores information Relating to all the Ext Features registered with resource-tuner. * Note: This information is extracted from Config YAML files. */ -class ExtFeaturesRegistry { +class __attribute__((visibility("default"))) ExtFeaturesRegistry { private: static std::shared_ptr extFeaturesRegistryInstance; int32_t mTotalExtFeatures; diff --git a/resource-tuner/signals/Include/SignalRegistry.h b/resource-tuner/signals/Include/SignalRegistry.h index bb45286bb..9ca4b0345 100644 --- a/resource-tuner/signals/Include/SignalRegistry.h +++ b/resource-tuner/signals/Include/SignalRegistry.h @@ -16,6 +16,8 @@ #include "MemoryPool.h" #include "UrmSettings.h" +#include "RestuneVisibility.h" + /** * @struct SignalInfo * @brief Representation of a single Signal Configuration @@ -68,7 +70,7 @@ typedef struct { * @details Stores information Relating to all the Signals available for Tuning. * Note: This information is extracted from Config YAML files. */ -class SignalRegistry { +class RESTUNE_INTERNAL_EXPORT SignalRegistry { private: static std::shared_ptr signalRegistryInstance;