PIP_NO_FILESYSTEM and PIP_NO_THREADS

This commit is contained in:
2026-03-29 12:22:35 +03:00
parent 15f90d9e17
commit a450235743
17 changed files with 55 additions and 33 deletions

View File

@@ -5,28 +5,28 @@
### Basic Build
```bash
# Configure with CMake (release build)
cmake -B build
cmake -B build -j16
# Build the project
cmake --build build
cmake --build build -j16
# Install (default system location)
cmake --build build --target install
cmake --build build --target install -j16
# Local install (bin/lib/include in build directory)
cmake -B build -DLOCAL=ON
cmake -B build -DLOCAL=ON -j16
```
### With Tests
```bash
cmake -B build -DTESTS=ON
cmake --build build
cmake -B build -DTESTS=ON -j16
cmake --build build -j16
cd build && ctest
```
### Build Only
```bash
cmake --build build
cmake --build build -j16
```
### Run Single Test

View File

@@ -69,6 +69,8 @@ option(STD_IOSTREAM "Building with std iostream operators support" OFF)
option(INTROSPECTION "Build with introspection" OFF)
option(TESTS "Build tests and perform their before install step" OFF)
option(COVERAGE "Build project with coverage info" OFF)
option(PIP_NO_FILESYSTEM "Disable filesystem support" OFF)
option(PIP_NO_THREADS "Disable threading support" OFF)
option(PIP_FFTW_F "Support fftw module for float" ON)
option(PIP_FFTW_L "Support fftw module for long double" ON)
option(PIP_FFTW_Q "Support fftw module for quad double" OFF)
@@ -231,9 +233,17 @@ if(PIP_FREERTOS)
endif()
if(DEFINED PICO_BOARD)
add_definitions(-DPICO_SDK)
set(PIP_NO_FILESYSTEM ON CACHE BOOL "" FORCE)
message(STATUS "Building PIP for Pi Pico SDK ${PICO_SDK_VERSION_STRING}")
endif()
if(PIP_NO_FILESYSTEM)
add_definitions(-DPIP_NO_FILESYSTEM)
endif()
if(PIP_NO_THREADS)
add_definitions(-DPIP_NO_THREADS)
endif()
# Check Bessel functions
set(CMAKE_REQUIRED_INCLUDES math.h)
set(CMAKE_REQUIRED_LIBRARIES m)

View File

@@ -35,6 +35,7 @@
class PIFile;
class PIStringList;
class PIInit;
class PIP_EXPORT __PIInit_Initializer__ {

View File

@@ -16,6 +16,7 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PIP_NO_FILESYSTEM
#include "pidir.h"
#include "piincludes_p.h"
@@ -610,3 +611,4 @@ void PIDir::CurrentDirOverrider::save(const PIFile::FileInfo & info) {
else
PIDir::setCurrent(PIDir::current().path() + PIDir::separator + p);
}
#endif // PIP_NO_FILESYSTEM

View File

@@ -30,6 +30,7 @@
#include "piregularexpression.h"
#ifndef PIP_NO_FILESYSTEM
//! \ingroup IO
//! \~\brief
//! \~english Local directory.
@@ -217,8 +218,10 @@ private:
PIString path_, scan_;
};
#endif // PIP_NO_FILESYSTEM
#ifndef PIP_NO_FILESYSTEM
inline bool operator<(const PIFile::FileInfo & v0, const PIFile::FileInfo & v1) {
return (v0.path < v1.path);
}
@@ -242,6 +245,7 @@ inline PICout operator<<(PICout s, const PIDir & v) {
s.restoreControls();
return s;
}
#endif // PIP_NO_FILESYSTEM
#endif // PIDIR_H

View File

@@ -17,6 +17,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PIP_NO_FILESYSTEM
#include "pifile.h"
#include "pidir.h"
@@ -635,3 +636,4 @@ int PIFile::writeAll(const PIString & path, const PIByteArray & data) {
f.clear();
return f.write(data.data(), data.size_s());
}
#endif // PIP_NO_FILESYSTEM

View File

@@ -30,6 +30,7 @@
#include "pipropertystorage.h"
#ifndef PIP_NO_FILESYSTEM
//! \ingroup IO
//! \~\brief
//! \~english Local file.
@@ -345,8 +346,10 @@ private:
llong _size = -1;
PIString prec_str;
};
#endif // PIP_NO_FILESYSTEM
#ifndef PIP_NO_FILESYSTEM
//! \relatesalso PICout
//! \~english Output operator to \a PICout
//! \~russian Оператор вывода в \a PICout
@@ -377,5 +380,6 @@ BINARY_STREAM_READ(PIFile::FileInfo) {
v.perm_group.raw >> v.perm_other.raw;
return s;
}
#endif // PIP_NO_FILESYSTEM
#endif // PIFILE_H

View File

@@ -56,7 +56,7 @@
# define PIP_NO_THREADS
# endif
# ifndef LWIP
# define PIP_NO_SOCKET
# define PIP_NO_SOCKET
# endif
# define PISERIAL_NO_PINS
#endif

View File

@@ -23,6 +23,7 @@
# define _WIN32_WINNT 0x0600
#endif
#ifndef PIP_NO_THREADS
#include "piconditionvar.h"
#include "piincludes_p.h"
#ifdef WINDOWS
@@ -179,3 +180,4 @@ void PIConditionVariable::notifyAll() {
pthread_cond_broadcast(&PRIVATE->nativeHandle);
#endif
}
#endif // PIP_NO_THREADS

View File

@@ -30,6 +30,7 @@
#include "pisystemtime.h"
#ifndef PIP_NO_THREADS
/**
* \brief A condition variable is an object able to block the calling thread until notified to resume.
*
@@ -121,5 +122,5 @@ private:
PRIVATE_DECLARATION(PIP_EXPORT)
};
#endif // PIP_NO_THREADS
#endif // PICONDITIONVAR_H

View File

@@ -107,6 +107,7 @@
//! \}
#ifndef PIP_NO_THREADS
#include "pimutex.h"
#include "piincludes_p.h"
@@ -228,3 +229,4 @@ void PIMutex::destroy() {
pthread_mutex_destroy(&(PRIVATE->mutex));
#endif
}
#endif // PIP_NO_THREADS

View File

@@ -29,6 +29,7 @@
#include "piinit.h"
#ifndef PIP_NO_THREADS
class PIP_EXPORT PIMutex {
public:
NO_COPY_CLASS(PIMutex);
@@ -85,5 +86,5 @@ private:
bool cond;
};
#endif // PIP_NO_THREADS
#endif // PIMUTEX_H

View File

@@ -17,6 +17,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PIP_NO_THREADS
#include "pithread.h"
#include "piincludes_p.h"
@@ -1086,3 +1087,4 @@ bool PIThread::_waitForFinish(PISystemTime max_tm) {
#endif
return false;
}
#endif // PIP_NO_THREADS

View File

@@ -33,6 +33,7 @@
class PIThread;
#ifndef PIP_NO_THREADS
#ifndef MICRO_PIP
class PIIntrospectionThreads;
@@ -304,5 +305,5 @@ private:
void setThreadName();
};
#endif // PIP_NO_THREADS
#endif // PITHREAD_H

View File

@@ -17,6 +17,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef PIP_NO_THREADS
#include "pitimer.h"
#include "piconditionvar.h"
@@ -302,3 +303,4 @@ void PITimer::stop() {
thread->stop();
event.notifyAll();
}
#endif // PIP_NO_THREADS

View File

@@ -33,6 +33,7 @@
class PIThread;
#ifndef PIP_NO_THREADS
class PIP_EXPORT PITimer: public PIObject {
PIOBJECT_SUBCLASS(PITimer, PIObject);
@@ -209,5 +210,5 @@ protected:
PIConditionVariable event;
};
#endif // PIP_NO_THREADS
#endif // PITIMER_H

View File

@@ -26,6 +26,8 @@
# include "pisystemtests.h"
#elif defined(ARDUINO)
# include <Arduino.h>
#elif defined(PICO_SDK)
# include "hardware/time.h"
#endif
#ifdef MICRO_PIP
# include <sys/time.h>
@@ -48,28 +50,13 @@
void piUSleep(int usecs) {
if (usecs <= 0) return;
#ifdef WINDOWS
// printf("Sleep %d\n", usecs / 1000);
if (usecs > 0) Sleep(usecs / 1000);
// printf("Sleep end");
#else
# ifdef FREERTOS
Sleep(usecs / 1000);
#elif defined(FREERTOS)
vTaskDelay(usecs / 1000 / portTICK_PERIOD_MS);
# else
# ifdef MICRO_PIP
if (usecs > 0) {
struct timeval start;
gettimeofday(&start, nullptr);
long long elapsed = 0;
while (elapsed < usecs) {
struct timeval now;
gettimeofday(&now, nullptr);
elapsed = (now.tv_sec - start.tv_sec) * 1000000LL + (now.tv_usec - start.tv_usec);
}
}
# else
#elif defined(PICO_SDK)
sleep_us(usecs);
#else
usecs -= PISystemTests::usleep_offset_us;
if (usecs > 0) usleep(usecs);
# endif
# endif
#endif
}