summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorMan, Jianting (Meco) <[email protected]>2022-04-07 02:24:11 -0400
committerGitHub <[email protected]>2022-04-07 14:24:11 +0800
commitc318dfa964c8967325b945fe851e9554fdae0638 (patch)
tree53f0597bf2abe96632ac9c721b7f5f7c19f3fab4 /components
parente68f934ff8c83d36f162b80e240e633b58949036 (diff)
improve libc time and MSVC simulator (#5775)
- [libc] 解决由于类unix操作系统发展历史原因fcntl.h定义的标志位在不同编译器中定义不同的问题 - [simulator] 部分宏定义转为全局宏定义以确保vs内置文件可以正确配置 - [simulator] 取消自欺欺人式的警告消除处理方式 - [libc][time] 优化time相关结构体在不同编译器下的包含
Diffstat (limited to 'components')
-rw-r--r--components/libc/compilers/common/extension/SConscript11
-rw-r--r--components/libc/compilers/common/extension/fcntl/README.md4
-rw-r--r--components/libc/compilers/common/extension/fcntl/SConscript15
-rw-r--r--components/libc/compilers/common/extension/fcntl/octal/SConscript14
-rw-r--r--components/libc/compilers/common/extension/fcntl/octal/fcntl.h (renamed from components/libc/compilers/common/extension/fcntl.h)0
-rw-r--r--components/libc/compilers/common/sys/time.h14
6 files changed, 50 insertions, 8 deletions
diff --git a/components/libc/compilers/common/extension/SConscript b/components/libc/compilers/common/extension/SConscript
index dbc26ac177..ddd83c8234 100644
--- a/components/libc/compilers/common/extension/SConscript
+++ b/components/libc/compilers/common/extension/SConscript
@@ -1,5 +1,5 @@
+import os
from building import *
-
Import('rtconfig')
src = []
@@ -9,6 +9,13 @@ group = []
src += Glob('*.c')
-if rtconfig.PLATFORM != 'gcc' or rtconfig.ARCH == 'sim':
+if rtconfig.PLATFORM != 'gcc':
group = DefineGroup('Compiler', src, depend = [''], CPPPATH = CPPPATH)
+
+list = os.listdir(cwd)
+for d in list:
+ path = os.path.join(cwd, d)
+ if os.path.isfile(os.path.join(path, 'SConscript')):
+ group = group + SConscript(os.path.join(d, 'SConscript'))
+
Return('group')
diff --git a/components/libc/compilers/common/extension/fcntl/README.md b/components/libc/compilers/common/extension/fcntl/README.md
new file mode 100644
index 0000000000..8866eace7c
--- /dev/null
+++ b/components/libc/compilers/common/extension/fcntl/README.md
@@ -0,0 +1,4 @@
+Because of the history issue, flags in fcntl.h, such as O_CREAT, have difference types of value. Some OS use hex flags and others use octal flags.
+
+In terms of RT-Thread, Keil, IAR and MSVC use octal flags, which is located in the `tcntl/octal` folder; newlib uses hex flags; musl uses octal flags.
+
diff --git a/components/libc/compilers/common/extension/fcntl/SConscript b/components/libc/compilers/common/extension/fcntl/SConscript
new file mode 100644
index 0000000000..4c815c49b8
--- /dev/null
+++ b/components/libc/compilers/common/extension/fcntl/SConscript
@@ -0,0 +1,15 @@
+# RT-Thread building script for bridge
+
+import os
+from building import *
+
+cwd = GetCurrentDir()
+objs = []
+list = os.listdir(cwd)
+
+for d in list:
+ path = os.path.join(cwd, d)
+ if os.path.isfile(os.path.join(path, 'SConscript')):
+ objs = objs + SConscript(os.path.join(d, 'SConscript'))
+
+Return('objs')
diff --git a/components/libc/compilers/common/extension/fcntl/octal/SConscript b/components/libc/compilers/common/extension/fcntl/octal/SConscript
new file mode 100644
index 0000000000..22d72dff05
--- /dev/null
+++ b/components/libc/compilers/common/extension/fcntl/octal/SConscript
@@ -0,0 +1,14 @@
+from building import *
+Import('rtconfig')
+
+src = []
+cwd = GetCurrentDir()
+CPPPATH = [cwd]
+group = []
+
+if rtconfig.PLATFORM == 'armcc' or\
+ rtconfig.PLATFORM == 'armclang' or\
+ rtconfig.PLATFORM == 'iar' or\
+ rtconfig.CROSS_TOOL == 'msvc':
+ group = DefineGroup('Compiler', src, depend = [''], CPPPATH = CPPPATH)
+Return('group')
diff --git a/components/libc/compilers/common/extension/fcntl.h b/components/libc/compilers/common/extension/fcntl/octal/fcntl.h
index c3bf851523..c3bf851523 100644
--- a/components/libc/compilers/common/extension/fcntl.h
+++ b/components/libc/compilers/common/extension/fcntl/octal/fcntl.h
diff --git a/components/libc/compilers/common/sys/time.h b/components/libc/compilers/common/sys/time.h
index a3af31b20b..3fe6ae4a26 100644
--- a/components/libc/compilers/common/sys/time.h
+++ b/components/libc/compilers/common/sys/time.h
@@ -18,7 +18,9 @@
#include <time.h>
#ifdef _WIN32
#include <winsock.h> /* for struct timeval */
-#endif
+#include <corecrt.h> /* for __time64_t */
+typedef __time64_t time_t;
+#endif /* _WIN32 */
#ifdef __cplusplus
extern "C" {
@@ -50,17 +52,17 @@ struct timeval
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* and microseconds */
};
-#endif
+#endif /* !defined(_TIMEVAL_DEFINED) && !defined(_WIN32) */
-#if !(defined(__GNUC__) && !defined(__ARMCC_VERSION)/*GCC*/) && \
- !(defined(__ICCARM__) && (__VER__ >= 8010001)) && \
- !defined(_WIN32)
+#if defined(__ARMCC_VERSION) || defined(_WIN32) || (defined(__ICCARM__) && (__VER__ >= 8010001))
struct timespec
{
time_t tv_sec; /* seconds */
long tv_nsec; /* and nanoseconds */
};
+#endif /* defined(__ARMCC_VERSION) || defined(_WIN32) || (defined(__ICCARM__) && (__VER__ >= 8010001)) */
+#if !(defined(__GNUC__) && !defined(__ARMCC_VERSION)/*GCC*/)
/*
* Structure defined by POSIX.1b to be like a itimerval, but with
* timespecs. Used in the timer_*() system calls.
@@ -70,7 +72,7 @@ struct itimerspec
struct timespec it_interval;
struct timespec it_value;
};
-#endif
+#endif /* !(defined(__GNUC__) && !defined(__ARMCC_VERSION)) */
int stime(const time_t *t);
time_t timegm(struct tm * const t);