From fed1b0a0774e6b0b301fbe11cea70dbd0eac2c19 Mon Sep 17 00:00:00 2001 From: James Cowgill Date: Thu, 3 Aug 2017 17:37:02 +0100 Subject: [PATCH] Add mips64 and mips64el CPU platforms (#5866) --- compiler/installer.ini | 2 +- compiler/platform.nim | 7 +++++-- lib/posix/posix_other.nim | 3 ++- lib/system.nim | 2 +- lib/system/platforms.nim | 4 ++++ tools/niminst/buildsh.tmpl | 10 +++++++++- tools/niminst/makefile.tmpl | 7 +++++-- 7 files changed, 27 insertions(+), 8 deletions(-) diff --git a/compiler/installer.ini b/compiler/installer.ini index 8cc89da9fc..680a5f9d58 100644 --- a/compiler/installer.ini +++ b/compiler/installer.ini @@ -6,7 +6,7 @@ Name: "Nim" Version: "$version" Platforms: """ windows: i386;amd64 - linux: i386;amd64;powerpc64;arm;sparc;mips;mipsel;powerpc;powerpc64el;arm64 + linux: i386;amd64;powerpc64;arm;sparc;mips;mipsel;mips64;mips64el;powerpc;powerpc64el;arm64 macosx: i386;amd64;powerpc64 solaris: i386;amd64;sparc;sparc64 freebsd: i386;amd64 diff --git a/compiler/platform.nim b/compiler/platform.nim index eb0aca186f..e8b80ab9c2 100644 --- a/compiler/platform.nim +++ b/compiler/platform.nim @@ -171,7 +171,8 @@ type # alias conditionals to condsyms (end of module). cpuNone, cpuI386, cpuM68k, cpuAlpha, cpuPowerpc, cpuPowerpc64, cpuPowerpc64el, cpuSparc, cpuVm, cpuIa64, cpuAmd64, cpuMips, cpuMipsel, - cpuArm, cpuArm64, cpuJS, cpuNimrodVM, cpuAVR, cpuMSP430, cpuSparc64 + cpuArm, cpuArm64, cpuJS, cpuNimrodVM, cpuAVR, cpuMSP430, cpuSparc64, + cpuMips64, cpuMips64el type TEndian* = enum @@ -200,7 +201,9 @@ const (name: "nimrodvm", intSize: 32, endian: bigEndian, floatSize: 64, bit: 32), (name: "avr", intSize: 16, endian: littleEndian, floatSize: 32, bit: 16), (name: "msp430", intSize: 16, endian: littleEndian, floatSize: 32, bit: 16), - (name: "sparc64", intSize: 64, endian: bigEndian, floatSize: 64, bit: 64)] + (name: "sparc64", intSize: 64, endian: bigEndian, floatSize: 64, bit: 64), + (name: "mips64", intSize: 64, endian: bigEndian, floatSize: 64, bit: 64), + (name: "mips64el", intSize: 64, endian: littleEndian, floatSize: 64, bit: 64)] var targetCPU*, hostCPU*: TSystemCPU diff --git a/lib/posix/posix_other.nim b/lib/posix/posix_other.nim index 1d50f2bac1..9629b399e8 100644 --- a/lib/posix/posix_other.nim +++ b/lib/posix/posix_other.nim @@ -572,7 +572,8 @@ else: MAP_POPULATE*: cint = 0 when defined(linux) or defined(nimdoc): - when defined(alpha) or defined(mips) or defined(parisc) or + when defined(alpha) or defined(mips) or defined(mipsel) or + defined(mips64) or defined(mips64el) or defined(parisc) or defined(sparc) or defined(nimdoc): const SO_REUSEPORT* = cint(0x0200) ## Multiple binding: load balancing on incoming TCP connections diff --git a/lib/system.nim b/lib/system.nim index f84a47df0c..e6d961a35a 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -1313,7 +1313,7 @@ const hostCPU* {.magic: "HostCPU".}: string = "" ## a string that describes the host CPU. Possible values: ## "i386", "alpha", "powerpc", "powerpc64", "powerpc64el", "sparc", - ## "amd64", "mips", "mipsel", "arm", "arm64". + ## "amd64", "mips", "mipsel", "arm", "arm64", "mips64", "mips64el". seqShallowFlag = low(int) diff --git a/lib/system/platforms.nim b/lib/system/platforms.nim index eeada5c517..9bdbbaa590 100644 --- a/lib/system/platforms.nim +++ b/lib/system/platforms.nim @@ -24,6 +24,8 @@ type amd64, ## x86_64 (AMD64); 64 bit x86 compatible CPU mips, ## Mips based processor mipsel, ## Little Endian Mips based processor + mips64, ## 64-bit MIPS processor + mips64el, ## Little Endian 64-bit MIPS processor arm, ## ARM based processor arm64, ## ARM64 based processor vm, ## Some Virtual machine: Nim's VM or JavaScript @@ -73,6 +75,8 @@ const elif defined(amd64): CpuPlatform.amd64 elif defined(mips): CpuPlatform.mips elif defined(mipsel): CpuPlatform.mipsel + elif defined(mips64): CpuPlatform.mips64 + elif defined(mips64el): CpuPlatform.mips64el elif defined(arm): CpuPlatform.arm elif defined(arm64): CpuPlatform.arm64 elif defined(vm): CpuPlatform.vm diff --git a/tools/niminst/buildsh.tmpl b/tools/niminst/buildsh.tmpl index e90ad97c0c..956c5ead84 100644 --- a/tools/niminst/buildsh.tmpl +++ b/tools/niminst/buildsh.tmpl @@ -123,7 +123,15 @@ case $ucpu in *power*|*ppc* ) mycpu="powerpc" ;; *mips* ) - mycpu="mips" ;; + mycpu="$("$CC" -dumpmachine | sed 's/-.*//')" + case $mycpu in + mips|mipsel|mips64|mips64el) + ;; + *) + echo 2>&1 "Error: unknown MIPS target: $mycpu" + exit 1 + esac + ;; *arm*|*armv6l* ) mycpu="arm" ;; *aarch64* ) diff --git a/tools/niminst/makefile.tmpl b/tools/niminst/makefile.tmpl index c4e0be55e5..2203d05e9c 100644 --- a/tools/niminst/makefile.tmpl +++ b/tools/niminst/makefile.tmpl @@ -114,8 +114,11 @@ endif ifeq ($(ucpu),ppc) mycpu = ppc endif -ifeq ($(ucpu),mips) - mycpu = mips +ifneq (,$(filter $(ucpu), mips mips64)) + mycpu = $(shell /bin/sh -c '"$(CC)" -dumpmachine | sed "s/-.*//"') + ifeq (,$(filter $(mycpu), mips mipsel mips64 mips64el)) + $(error unknown MIPS target: $(mycpu)) + endif endif ifeq ($(ucpu),arm) mycpu = arm