From 9385b3323a64d01245379e813c16aca679d10258 Mon Sep 17 00:00:00 2001
From: Torsten Merz <mer114@moon-ph.nexus.csiro.au>
Date: Mon, 10 Feb 2020 15:59:54 +1000
Subject: [PATCH] added "long" data type check for 64bit

---
 smi/CMakeLists.txt.64_gnu90 | 7 ++++---
 smi/src/nrt_system.c        | 7 ++++++-
 smi/src/rt_def.h            | 4 ++++
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/smi/CMakeLists.txt.64_gnu90 b/smi/CMakeLists.txt.64_gnu90
index ff1eee9..5122d58 100644
--- a/smi/CMakeLists.txt.64_gnu90
+++ b/smi/CMakeLists.txt.64_gnu90
@@ -9,13 +9,14 @@ endif()
 
 # RTAI
 if($ENV{RTAI})
-SET(RTCFLAGS    "$(shell rtai-config --lxrt-cflags) -D_RTAI -Wall -std=gnu90")
+SET(RTCFLAGS    "$(shell rtai-config --lxrt-cflags) -D_RTAI -Wall -std=gnu90
+-D_64")
 else()
 # PREEMPT_RT
-SET(RTCFLAGS    "-O2 -Wall -fno-stack-protector -std=gnu90")
+SET(RTCFLAGS    "-O2 -Wall -fno-stack-protector -std=gnu90 -D_64")
 endif()
 
-SET(NRTCFLAGS    "-D_NRT -O2 -Wall -std=gnu90")
+SET(NRTCFLAGS    "-D_NRT -D_64 -O2 -Wall -std=gnu90")
 
 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin)
 
diff --git a/smi/src/nrt_system.c b/smi/src/nrt_system.c
index 940f118..1d11dc4 100644
--- a/smi/src/nrt_system.c
+++ b/smi/src/nrt_system.c
@@ -388,10 +388,15 @@ int nrtSmi(char *esmFile, char *tssFile, char *tdeFile, char *cfgFile) {
 	/* check size of data types */
 	if (sizeof(char)!=CHAR_S || sizeof(short)!=SHORT_S || 
 	 sizeof(int)!=INT_S || sizeof(long)!=LONG_S || 
-	 sizeof(RTIME)!=RTIME_S)
+	 sizeof(RTIME)!=RTIME_S || sizeof(float)!=FLOAT_S || 
+	 sizeof(double)!=DOUBLE_S)
 	{
 		error=4;
 		printf("[nrtSmi] data type mismatch\n");
+//printf("CHAR_BIT=%d\n",CHAR_BIT);		
+//printf("%d %d %d %d %d\n",CHAR_S,SHORT_S,INT_S,LONG_S,RTIME_S);		
+//printf("%ld %ld %ld %ld %ld\n",sizeof(char),sizeof(short),sizeof(int),
+//sizeof(long),sizeof(RTIME));
 		goto exit;
 	}
 	
diff --git a/smi/src/rt_def.h b/smi/src/rt_def.h
index 2b39eaf..10bf737 100644
--- a/smi/src/rt_def.h
+++ b/smi/src/rt_def.h
@@ -20,7 +20,11 @@
 #define CHAR_S 1
 #define SHORT_S 2
 #define INT_S 4
+#ifdef _64
+#define LONG_S 8
+#elif
 #define LONG_S 4
+#endif
 #define RTIME_S 8
 #define DOUBLE_S 8
 #define FLOAT_S 4
-- 
GitLab