From 966c3b04a297a41a9ce35ee94513f360a06539cb Mon Sep 17 00:00:00 2001
From: yeqinglong <yeqinglong@kylinsec.com.cn>
Date: Fri, 11 Aug 2023 14:09:33 +0800
Subject: [PATCH] add sw_64 support

---
 .../CIM_ProcessorAllocationSettingData.mof    |   1 +
 mak/SDKMakefile                               |  15 +++
 mak/platform_LINUX_SW_64_GNU.mak              |  36 ++++++
 src/Pegasus/Common/Config.h                   |   2 +
 src/Pegasus/Common/Platform_LINUX_SW_64_GNU.h | 108 ++++++++++++++++++
 .../samples/mak/platform_LINUX_SW_64_GNU.mak  |  33 ++++++
 6 files changed, 195 insertions(+)
 create mode 100644 mak/platform_LINUX_SW_64_GNU.mak
 create mode 100644 src/Pegasus/Common/Platform_LINUX_SW_64_GNU.h
 create mode 100644 src/SDK/samples/mak/platform_LINUX_SW_64_GNU.mak

diff --git a/Schemas/CIM236/DMTF/Core/CIM_ProcessorAllocationSettingData.mof b/Schemas/CIM236/DMTF/Core/CIM_ProcessorAllocationSettingData.mof
index c956b63..3891d6d 100644
--- a/Schemas/CIM236/DMTF/Core/CIM_ProcessorAllocationSettingData.mof
+++ b/Schemas/CIM236/DMTF/Core/CIM_ProcessorAllocationSettingData.mof
@@ -132,6 +132,7 @@ class CIM_ProcessorAllocationSettingData : CIM_ResourceAllocationSettingData {
           "IBM z/Architecture 2 (ARCHLVL 3, 64-bit)", 
           "PA-RISC 1.0 (64-bit)", "PA-RISC 2.0 (64-bit)", 
           "ARM A32 (AArch32, 32-bit)", "ARM A64 (AArch64, 64-bit)", 
+          "SW_64 sw_64 (Sw_64, 64-bit)", 
           "MIPS I (32-bit)", "MIPS II (32-bit)", 
           "MIPS III (32-bit)", "MIPS IV (32-bit)", 
           "MIPS V (32-bit)", "MIPS32 (32-bit)", "MIPS64 (64-bit)", 
diff --git a/mak/SDKMakefile b/mak/SDKMakefile
index 4d141f6..fd13abf 100644
--- a/mak/SDKMakefile
+++ b/mak/SDKMakefile
@@ -68,6 +68,7 @@ endif
 ifeq ($(OS),linux)
    PACKAGED_PLATFORM_FILES = \
       LINUX_AARCH64_GNU \
+      LINUX_SW_64_GNU \
       LINUX_IA64_GNU \
       LINUX_IX86_GNU \
       LINUX_IX86_CLANG \
@@ -445,6 +446,13 @@ ifeq ($(RUNTIME_PLATFORM_TEST_NEEDED), true)
 	@$(ECHO-E) "   endif" \
             >> $(PEGASUS_STAGING_DIR)$(PEGASUS_SAMPLES_DIR)/mak/config.mak
 
+	@$(ECHO-E) "   ifeq (\044(shell uname -i),sw_64)" \
+            >> $(PEGASUS_STAGING_DIR)$(PEGASUS_SAMPLES_DIR)/mak/config.mak
+	@$(ECHO-E) "      PEGASUS_PLATFORM = LINUX_SW_64_GNU" \
+            >> $(PEGASUS_STAGING_DIR)$(PEGASUS_SAMPLES_DIR)/mak/config.mak
+	@$(ECHO-E) "   endif" \
+            >> $(PEGASUS_STAGING_DIR)$(PEGASUS_SAMPLES_DIR)/mak/config.mak
+
 	@$(ECHO-E) "   ifeq (\044(shell uname -i),ia64)" \
             >> $(PEGASUS_STAGING_DIR)$(PEGASUS_SAMPLES_DIR)/mak/config.mak
 	@$(ECHO-E) "      PEGASUS_PLATFORM = LINUX_IA64_GNU" \
@@ -531,6 +539,13 @@ ifeq ($(RUNTIME_PLATFORM_TEST_NEEDED), true)
 	@$(ECHO-E) "endif" \
             >> $(PEGASUS_STAGING_DIR)$(PEGASUS_SAMPLES_DIR)/mak/config.mak
 
+	@$(ECHO-E) "ifeq (\044(PEGASUS_PLATFORM),LINUX_SW_64_GNU)" \
+            >> $(PEGASUS_STAGING_DIR)$(PEGASUS_SAMPLES_DIR)/mak/config.mak
+	@$(ECHO-E) "   PEGASUS_ARCH_LIB = lib" \
+            >> $(PEGASUS_STAGING_DIR)$(PEGASUS_SAMPLES_DIR)/mak/config.mak
+	@$(ECHO-E) "endif" \
+            >> $(PEGASUS_STAGING_DIR)$(PEGASUS_SAMPLES_DIR)/mak/config.mak
+
 	@$(ECHO-E) "ifeq (\044(PEGASUS_PLATFORM),LINUX_IA64_GNU)" \
             >> $(PEGASUS_STAGING_DIR)$(PEGASUS_SAMPLES_DIR)/mak/config.mak
 	@$(ECHO-E) "   PEGASUS_ARCH_LIB = lib" \
diff --git a/mak/platform_LINUX_SW_64_GNU.mak b/mak/platform_LINUX_SW_64_GNU.mak
new file mode 100644
index 0000000..30dfd3b
--- /dev/null
+++ b/mak/platform_LINUX_SW_64_GNU.mak
@@ -0,0 +1,36 @@
+#//%LICENSE////////////////////////////////////////////////////////////////
+#//
+#// Licensed to The Open Group (TOG) under one or more contributor license
+#// agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
+#// this work for additional information regarding copyright ownership.
+#// Each contributor licenses this file to you under the OpenPegasus Open
+#// Source License; you may not use this file except in compliance with the
+#// License.
+#//
+#// Permission is hereby granted, free of charge, to any person obtaining a
+#// copy of this software and associated documentation files (the "Software"),
+#// to deal in the Software without restriction, including without limitation
+#// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#// and/or sell copies of the Software, and to permit persons to whom the
+#// Software is furnished to do so, subject to the following conditions:
+#//
+#// The above copyright notice and this permission notice shall be included
+#// in all copies or substantial portions of the Software.
+#//
+#// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+#// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+#// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+#// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+#// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+#// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+#// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#//
+#//////////////////////////////////////////////////////////////////////////
+# Platform Configuration for Linux on SW_64
+# If you have generic Linux config options, please place them in config-linux.mak
+
+include $(ROOT)/mak/config-linux.mak
+
+ARCHITECTURE = SW_64
+CXX_MACHINE_OPTIONS = 
+LINK_MACHINE_OPTIONS = 
diff --git a/src/Pegasus/Common/Config.h b/src/Pegasus/Common/Config.h
index afe1224..0b2db35 100644
--- a/src/Pegasus/Common/Config.h
+++ b/src/Pegasus/Common/Config.h
@@ -102,6 +102,8 @@
 # include <Pegasus/Common/Platform_LINUX_LOONGARCH64_GNU.h>
 #elif defined (PEGASUS_PLATFORM_LINUX_X86_64_CLANG)
 # include <Pegasus/Common/Platform_LINUX_X86_64_CLANG.h>
+#elif defined (PEGASUS_PLATFORM_LINUX_SW_64_GNU)
+# include <Pegasus/Common/Platform_LINUX_SW_64_GNU.h>
 #elif defined (PEGASUS_PLATFORM_LINUX_IX86_CLANG)
 # include <Pegasus/Common/Platform_LINUX_IX86_CLANG.h>
 #elif defined (PEGASUS_PLATFORM_LINUX_SH4_GNU)
diff --git a/src/Pegasus/Common/Platform_LINUX_SW_64_GNU.h b/src/Pegasus/Common/Platform_LINUX_SW_64_GNU.h
new file mode 100644
index 0000000..ffccae1
--- /dev/null
+++ b/src/Pegasus/Common/Platform_LINUX_SW_64_GNU.h
@@ -0,0 +1,108 @@
+//%LICENSE////////////////////////////////////////////////////////////////
+//
+// Licensed to The Open Group (TOG) under one or more contributor license
+// agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
+// this work for additional information regarding copyright ownership.
+// Each contributor licenses this file to you under the OpenPegasus Open
+// Source License; you may not use this file except in compliance with the
+// License.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the "Software"),
+// to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+// and/or sell copies of the Software, and to permit persons to whom the
+// Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+//////////////////////////////////////////////////////////////////////////
+//
+//%/////////////////////////////////////////////////////////////////////////////
+
+/*****************************************************************************
+  The platform configuration files in pegasus/src/Pegasus/Common/Platform_*.h
+  are intended to normalize platform/compiler differences so that Pegasus code
+  can be written to work on all platforms without requiring platform ifdefs.
+  Since these files are part of the Pegasus SDK, their contents should be
+  the minimum that achieves the stated purpose.
+
+  Examples of differences that are normalized here are support for C++
+  namespaces, 64-bit integer type, support for C++ template specialization.
+
+  Examples of things that are not appropriate in these files are the enablement
+  of Pegasus features for a specific platform and other build configuration.
+******************************************************************************/
+
+#ifndef Pegasus_Platform_LINUX_SW_64_GNU_h
+#define Pegasus_Platform_LINUX_SW_64_GNU_h
+
+#include <stddef.h>
+
+#define PEGASUS_OS_TYPE_UNIX
+
+#ifndef PEGASUS_PLATFORM_LINUX_GENERIC_GNU
+#define PEGASUS_PLATFORM_LINUX_GENERIC_GNU
+#endif
+
+#define PEGASUS_OS_LINUX
+
+#define PEGASUS_POINTER_64BIT
+
+#define PEGASUS_COMPILER_GNU
+
+#define PEGASUS_UINT64 unsigned long long
+
+#define PEGASUS_SINT64 long long
+
+#define PEGASUS_HAVE_NAMESPACES
+
+#define PEGASUS_HAVE_FOR_SCOPE
+
+#define PEGASUS_HAVE_TEMPLATE_SPECIALIZATION
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+#ifndef _REENTRANT
+#define _REENTRANT
+#endif
+#define _THREAD_SAFE
+#include <features.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/param.h> /* For MAXHOSTNAMELEN */
+#include <limits.h>    /* _POSIX_HOST_NAME_MAX  */
+
+#if (__GNUC__ >= 4)
+# define PEGASUS_EXPORT __attribute__ ((visibility("default")))
+# define PEGASUS_IMPORT __attribute__ ((visibility("default")))
+# define PEGASUS_HIDDEN_LINKAGE __attribute__((visibility("hidden")))
+#endif
+
+#define PEGASUS_HAVE_PTHREADS
+
+#define PEGASUS_HAVE_NANOSLEEP
+
+#define PEGASUS_HAS_SIGNALS
+
+#define PEGASUS_INTEGERS_BOUNDARY_ALIGNED
+
+/* getifaddrs() avilable in gcc version >= 3.4 */
+#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))
+# define PEGASUS_HAS_GETIFADDRS
+#endif
+
+/* use POSIX read-write locks on this platform */
+#define PEGASUS_USE_POSIX_RWLOCK
+
+#endif /* Pegasus_Platform_LINUX_SW_64_GNU_h */
diff --git a/src/SDK/samples/mak/platform_LINUX_SW_64_GNU.mak b/src/SDK/samples/mak/platform_LINUX_SW_64_GNU.mak
new file mode 100644
index 0000000..eee4887
--- /dev/null
+++ b/src/SDK/samples/mak/platform_LINUX_SW_64_GNU.mak
@@ -0,0 +1,33 @@
+#//%LICENSE////////////////////////////////////////////////////////////////
+#//
+#// Licensed to The Open Group (TOG) under one or more contributor license
+#// agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
+#// this work for additional information regarding copyright ownership.
+#// Each contributor licenses this file to you under the OpenPegasus Open
+#// Source License; you may not use this file except in compliance with the
+#// License.
+#//
+#// Permission is hereby granted, free of charge, to any person obtaining a
+#// copy of this software and associated documentation files (the "Software"),
+#// to deal in the Software without restriction, including without limitation
+#// the rights to use, copy, modify, merge, publish, distribute, sublicense,
+#// and/or sell copies of the Software, and to permit persons to whom the
+#// Software is furnished to do so, subject to the following conditions:
+#//
+#// The above copyright notice and this permission notice shall be included
+#// in all copies or substantial portions of the Software.
+#//
+#// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+#// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+#// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+#// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+#// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+#// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+#// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#//
+#//////////////////////////////////////////////////////////////////////////
+
+CXX_MACHINE_OPTIONS =
+LINK_MACHINE_OPTIONS =
+
+include $(ROOT)/mak/platform_LINUX_GNU.mak
-- 
2.33.0

