Skip to content

Commit b025fc8

Browse files
authored
Initial mips64/linux support (dotnet#2)
Co-Authored-By: Qiao Pengcheng <[email protected]> Co-Authored-By: Leslie Zhai <[email protected]> Co-Authored-By: Wang Haomin <[email protected]> Co-Authored-By: Ao Qi <[email protected]>
1 parent 519a44c commit b025fc8

File tree

274 files changed

+41860
-393
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

274 files changed

+41860
-393
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ else (WIN32)
113113

114114
# Ensure that objcopy is present
115115
if (CLR_UNIX_CROSS_BUILD AND NOT DEFINED CLR_CROSS_COMPONENTS_BUILD)
116-
if (CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l OR CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL arm)
116+
if (CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l OR CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL arm OR CMAKE_SYSTEM_PROCESSOR STREQUAL mips64)
117117
find_program(OBJCOPY ${TOOLCHAIN}-objcopy)
118118
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686)
119119
find_program(OBJCOPY objcopy)

build-test.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,11 @@ case $CPUName in
616616
__HostArch=arm64
617617
;;
618618

619+
mips64)
620+
__BuildArch=mips64
621+
__HostArch=mips64
622+
;;
623+
619624
*)
620625
echo "Unknown CPU $CPUName detected, configuring as if for x64"
621626
__BuildArch=x64
@@ -740,6 +745,10 @@ while :; do
740745
__BuildArch=arm64
741746
;;
742747

748+
mips64)
749+
__BuildArch=mips64
750+
;;
751+
743752
debug)
744753
__BuildType=Debug
745754
;;

build.sh

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export PYTHON
2626
usage()
2727
{
2828
echo "Usage: $0 [BuildArch] [BuildType] [-verbose] [-coverage] [-cross] [-gccx.y] [-clangx.y] [-ninja] [-configureonly] [-skipconfigure] [-skipnative] [-skipcrossarchnative] [-skipmanaged] [-skipmscorlib] [-skiptests] [-stripsymbols] [-ignorewarnings] [-cmakeargs] [-bindir]"
29-
echo "BuildArch can be: -x64, -x86, -arm, -armel, -arm64"
29+
echo "BuildArch can be: -x64, -x86, -arm, -armel, -arm64, -mips64"
3030
echo "BuildType can be: -debug, -checked, -release"
3131
echo "-coverage - optional argument to enable code coverage build (currently supported only for Linux and OSX)."
3232
echo "-ninja - target ninja instead of GNU make"
@@ -315,6 +315,8 @@ build_cross_architecture_components()
315315
__SkipCrossArchBuild=0
316316
elif [[ "$__BuildArch" == "arm64" && "$__CrossArch" == "x64" ]]; then
317317
__SkipCrossArchBuild=0
318+
elif [[ "$__BuildArch" == "mips64" && "$__CrossArch" == "x64" && $__SkipCrossgen == 0 ]]; then
319+
__SkipCrossArchBuild=0
318320
else
319321
# not supported
320322
return
@@ -479,6 +481,8 @@ build_CoreLib()
479481
build_CoreLib_ni "$__CrossComponentBinDir/crossgen" $__CoreLibILDir
480482
elif [[ ( "$__HostArch" == "x64" ) && ( "$__BuildArch" == "arm64" ) ]]; then
481483
build_CoreLib_ni "$__CrossComponentBinDir/crossgen" $__CoreLibILDir
484+
elif [[ ( "$__HostArch" == "x64" ) && ( "$__BuildArch" == "mips64" ) ]]; then
485+
build_CoreLib_ni "$__CrossComponentBinDir/crossgen" $__CoreLibILDir
482486
else
483487
# Crossgen not performed, so treat the IL version as the final version
484488
cp $__CoreLibILDir/System.Private.CoreLib.dll $__BinDir/System.Private.CoreLib.dll
@@ -563,6 +567,11 @@ case $CPUName in
563567
__BuildArch=x64
564568
__HostArch=x64
565569
;;
570+
571+
mips64)
572+
__BuildArch=mips64
573+
__HostArch=mips64
574+
;;
566575
*)
567576
echo "Unknown CPU $CPUName detected, configuring as if for x64"
568577
__BuildArch=x64
@@ -705,6 +714,10 @@ while :; do
705714
__BuildArch=arm64
706715
;;
707716

717+
mips64|-mips64)
718+
__BuildArch=mips64
719+
;;
720+
708721
debug|-debug)
709722
__BuildType=Debug
710723
;;
@@ -782,6 +795,11 @@ while :; do
782795
__ClangMinorVersion=
783796
;;
784797

798+
clang8.0|-clang8.0)
799+
__ClangMajorVersion=8
800+
__ClangMinorVersion=0
801+
;;
802+
785803
gcc5|-gcc5)
786804
__GccMajorVersion=5
787805
__GccMinorVersion=

clrdefinitions.cmake

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ elseif (CLR_CMAKE_TARGET_ARCH_ARM64)
2929
add_definitions(-DDBG_TARGET_ARM64)
3030
add_definitions(-DDBG_TARGET_WIN64)
3131
add_definitions(-DFEATURE_MULTIREG_RETURN)
32+
elseif (CLR_CMAKE_TARGET_ARCH_MIPS64)
33+
if (CLR_CMAKE_PLATFORM_UNIX)
34+
add_definitions(-DDBG_TARGET_MIPS64_UNIX)
35+
endif()
36+
add_definitions(-D_TARGET_MIPS64_)
37+
add_definitions(-D_TARGET_64BIT_)
38+
add_definitions(-DDBG_TARGET_64BIT)
39+
add_definitions(-DDBG_TARGET_MIPS64)
3240
elseif (CLR_CMAKE_TARGET_ARCH_ARM)
3341
if (CLR_CMAKE_PLATFORM_UNIX)
3442
add_definitions(-DDBG_TARGET_ARM_UNIX)

configurecompiler.cmake

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL Linux)
5252
set(CLR_CMAKE_PLATFORM_UNIX_ARM64 1)
5353
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL i686)
5454
set(CLR_CMAKE_PLATFORM_UNIX_X86 1)
55+
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL mips64)
56+
set(CLR_CMAKE_PLATFORM_UNIX_MIPS64 1)
5557
else()
5658
clr_unknown_arch()
5759
endif()
@@ -130,6 +132,9 @@ if(CLR_CMAKE_PLATFORM_UNIX_ARM)
130132
elseif(CLR_CMAKE_PLATFORM_UNIX_ARM64)
131133
set(CLR_CMAKE_PLATFORM_ARCH_ARM64 1)
132134
set(CLR_CMAKE_HOST_ARCH "arm64")
135+
elseif(CLR_CMAKE_PLATFORM_UNIX_MIPS64)
136+
set(CLR_CMAKE_PLATFORM_ARCH_MIPS64 1)
137+
set(CLR_CMAKE_HOST_ARCH "mips64")
133138
elseif(CLR_CMAKE_PLATFORM_UNIX_AMD64)
134139
set(CLR_CMAKE_PLATFORM_ARCH_AMD64 1)
135140
set(CLR_CMAKE_HOST_ARCH "x64")
@@ -170,13 +175,16 @@ if (CLR_CMAKE_TARGET_ARCH STREQUAL x64)
170175
elseif(CLR_CMAKE_TARGET_ARCH STREQUAL armel)
171176
set(CLR_CMAKE_TARGET_ARCH_ARM 1)
172177
set(ARM_SOFTFP 1)
178+
elseif(CLR_CMAKE_TARGET_ARCH STREQUAL mips64)
179+
set(CLR_CMAKE_TARGET_ARCH_MIPS64 1)
173180
else()
174181
clr_unknown_arch()
175182
endif()
176183

177184
# check if host & target arch combination are valid
178185
if(NOT(CLR_CMAKE_TARGET_ARCH STREQUAL CLR_CMAKE_HOST_ARCH))
179-
if(NOT((CLR_CMAKE_PLATFORM_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM64) OR (CLR_CMAKE_PLATFORM_ARCH_I386 AND CLR_CMAKE_TARGET_ARCH_ARM) OR (CLR_CMAKE_PLATFORM_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM)))
186+
####FIXME for MIPS.
187+
if(NOT((CLR_CMAKE_PLATFORM_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM64) OR (CLR_CMAKE_PLATFORM_ARCH_I386 AND CLR_CMAKE_TARGET_ARCH_ARM) OR (CLR_CMAKE_PLATFORM_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_ARM) OR (CLR_CMAKE_PLATFORM_ARCH_AMD64 AND CLR_CMAKE_TARGET_ARCH_MIPS64)))
180188
message(FATAL_ERROR "Invalid host and target arch combination")
181189
endif()
182190
endif()
@@ -306,7 +314,7 @@ elseif (CLR_CMAKE_PLATFORM_UNIX)
306314
string(FIND "$ENV{DEBUG_SANITIZERS}" "asan" __ASAN_POS)
307315
string(FIND "$ENV{DEBUG_SANITIZERS}" "ubsan" __UBSAN_POS)
308316
if ((${__ASAN_POS} GREATER -1) OR (${__UBSAN_POS} GREATER -1))
309-
set(CLR_SANITIZE_CXX_FLAGS "${CLR_SANITIZE_CXX_FLAGS} -fsanitize-blacklist=${CMAKE_CURRENT_SOURCE_DIR}/sanitizerblacklist.txt -fsanitize=")
317+
set(CLR_SANITIZE_CXX_FLAGS "${CLR_SANITIZE_CXX_FLAGS} -fsanitize-blacklist=${CMAKE_SOURCE_DIR}/sanitizerblacklist.txt -fsanitize=")
310318
set(CLR_SANITIZE_LINK_FLAGS "${CLR_SANITIZE_LINK_FLAGS} -fsanitize=")
311319
if (${__ASAN_POS} GREATER -1)
312320
set(CLR_SANITIZE_CXX_FLAGS "${CLR_SANITIZE_CXX_FLAGS}address,")
@@ -315,8 +323,12 @@ elseif (CLR_CMAKE_PLATFORM_UNIX)
315323
message("Address Sanitizer (asan) enabled")
316324
endif ()
317325
if (${__UBSAN_POS} GREATER -1)
318-
# all sanitizier flags are enabled except alignment (due to heavy use of __unaligned modifier)
319-
set(CLR_SANITIZE_CXX_FLAGS "${CLR_SANITIZE_CXX_FLAGS}bool,bounds,enum,float-cast-overflow,float-divide-by-zero,function,integer,nonnull-attribute,null,object-size,return,returns-nonnull-attribute,shift,unreachable,vla-bound,vptr")
326+
# all sanitizier flags are enabled except alignment (due to heavy use of __unaligned modifier) and vptr (due to -fno-rtti #553)
327+
if (CLR_CMAKE_PLATFORM_ARCH_MIPS64)
328+
set(CLR_SANITIZE_CXX_FLAGS "${CLR_SANITIZE_CXX_FLAGS}bool,bounds,enum,float-cast-overflow,float-divide-by-zero,integer,nonnull-attribute,null,object-size,return,returns-nonnull-attribute,shift,unreachable,vla-bound")
329+
else ()
330+
set(CLR_SANITIZE_CXX_FLAGS "${CLR_SANITIZE_CXX_FLAGS}bool,bounds,enum,float-cast-overflow,float-divide-by-zero,function,integer,nonnull-attribute,null,object-size,return,returns-nonnull-attribute,shift,unreachable,vla-bound")
331+
endif ()
320332
set(CLR_SANITIZE_LINK_FLAGS "${CLR_SANITIZE_LINK_FLAGS}undefined")
321333
message("Undefined Behavior Sanitizer (ubsan) enabled")
322334
endif ()
@@ -377,6 +389,13 @@ elseif (CLR_CMAKE_PLATFORM_ARCH_ARM64)
377389
add_definitions(-DARM64)
378390
add_definitions(-D_WIN64)
379391
add_definitions(-DBIT64)
392+
elseif (CLR_CMAKE_PLATFORM_ARCH_MIPS64)
393+
add_definitions(-D_MIPS64_)
394+
add_definitions(-D_WIN64)
395+
add_definitions(-DMIPS64)
396+
add_definitions(-DBIT64=1)
397+
##FIXME for MIPS: should detect loongson.
398+
#add_definitions(-DFEATURE_LOONGSONISA)
380399
else ()
381400
clr_unknown_arch()
382401
endif ()
@@ -395,6 +414,9 @@ if (CLR_CMAKE_PLATFORM_UNIX)
395414
elseif(CLR_CMAKE_PLATFORM_UNIX_X86)
396415
message("Detected Linux i686")
397416
add_definitions(-DLINUX32)
417+
elseif(CLR_CMAKE_PLATFORM_UNIX_MIPS64)
418+
message("Detected Linux MIPS64")
419+
add_definitions(-DLINUX64)
398420
else()
399421
clr_unknown_arch()
400422
endif()
@@ -435,6 +457,8 @@ elseif (CLR_CMAKE_TARGET_ARCH_ARM)
435457
set(ARCH_SOURCES_DIR arm)
436458
elseif (CLR_CMAKE_TARGET_ARCH_I386)
437459
set(ARCH_SOURCES_DIR i386)
460+
elseif (CLR_CMAKE_TARGET_ARCH_MIPS64)
461+
set(ARCH_SOURCES_DIR mips64)
438462
else ()
439463
clr_unknown_arch()
440464
endif ()

cross/toolchain.cmake

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@ elseif(TARGET_ARCH_NAME STREQUAL "arm64")
2727
elseif(TARGET_ARCH_NAME STREQUAL "x86")
2828
set(CMAKE_SYSTEM_PROCESSOR i686)
2929
set(TOOLCHAIN "i686-linux-gnu")
30+
elseif(TARGET_ARCH_NAME STREQUAL "mips64")
31+
set(CMAKE_SYSTEM_PROCESSOR mips64)
32+
set(TOOLCHAIN "mips64el-linux-gnuabi64")
3033
else()
31-
message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only armel, arm, arm64 and x86 are supported!")
34+
message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only armel, arm, arm64, mips64 and x86 are supported!")
3235
endif()
3336

3437
if(DEFINED ENV{TOOLCHAIN})

cross/tryrun.cmake

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ else()
1414
SET(ALPINE_LINUX 0)
1515
endif()
1616

17-
if(TARGET_ARCH_NAME MATCHES "^(armel|arm|arm64|x86)$")
17+
if(TARGET_ARCH_NAME MATCHES "^(armel|arm|arm64|x86|mips64)$")
1818
set_cache_value(FILE_OPS_CHECK_FERROR_OF_PREVIOUS_CALL_EXITCODE 1)
1919
set_cache_value(GETPWUID_R_SETS_ERRNO_EXITCODE 0)
2020
set_cache_value(HAS_POSIX_SEMAPHORES_EXITCODE 0)
@@ -58,9 +58,9 @@ if(TARGET_ARCH_NAME MATCHES "^(armel|arm|arm64|x86)$")
5858
endif()
5959

6060
else()
61-
message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only armel, arm, arm64 and x86 are supported!")
61+
message(FATAL_ERROR "Arch is ${TARGET_ARCH_NAME}. Only armel, arm, arm64, mips64 and x86 are supported!")
6262
endif()
6363

64-
if(TARGET_ARCH_NAME STREQUAL "x86")
64+
if(TARGET_ARCH_NAME STREQUAL "x86" OR TARGET_ARCH_NAME STREQUAL "mips64")
6565
set_cache_value(HAVE_FUNCTIONAL_PTHREAD_ROBUST_MUTEXES_EXITCODE 0)
6666
endif()

enablesanitizers.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ else
7373
__ClangMinorVersion=9
7474
__ExportSymbolizerPath=0
7575
;;
76+
clang8.0)
77+
__ClangMajorVersion=8
78+
__ClangMinorVersion=0
79+
__ExportSymbolizerPath=0
80+
;;
7681
*)
7782
echo "Unknown arg: $i"
7883
return 1

eng/common/cross/build-rootfs.sh

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
usage()
44
{
55
echo "Usage: $0 [BuildArch] [LinuxCodeName] [lldbx.y] [--skipunmount] --rootfsdir <directory>]"
6-
echo "BuildArch can be: arm(default), armel, arm64, x86"
7-
echo "LinuxCodeName - optional, Code name for Linux, can be: trusty, xenial(default), zesty, bionic, alpine. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen."
6+
echo "BuildArch can be: arm(default), armel, arm64, mips64el, x86"
7+
echo "LinuxCodeName - optional, Code name for Linux, can be: trusty, xenial(default), zesty, bionic, alpine. If BuildArch is armel, LinuxCodeName is jessie(default) or tizen. If BuildArch is mips64el, LinuxCodeName is stretch(default)."
88
echo "lldbx.y - optional, LLDB version, can be: lldb3.9(default), lldb4.0, lldb5.0, lldb6.0 no-lldb. Ignored for alpine"
99
echo "--skipunmount - optional, will skip the unmount of rootfs folder."
1010
exit 1
@@ -82,6 +82,13 @@ while :; do
8282
__UbuntuRepo="http://ftp.debian.org/debian/"
8383
__LinuxCodeName=jessie
8484
;;
85+
mips64el)
86+
__BuildArch=mips64el
87+
__UbuntuArch=mips64el
88+
__UbuntuRepo="http://ftp.debian.org/debian/"
89+
__LinuxCodeName=stretch
90+
__UbuntuPackages+=" liblzma-dev"
91+
;;
8592
x86)
8693
__BuildArch=x86
8794
__UbuntuArch=i386
@@ -174,6 +181,9 @@ done
174181
if [ "$__BuildArch" == "armel" ]; then
175182
__LLDB_Package="lldb-3.5-dev"
176183
fi
184+
if [ "$__BuildArch" == "mips64el" ]; then
185+
__LLDB_Package=""
186+
fi
177187
__UbuntuPackages+=" ${__LLDB_Package:-}"
178188

179189
if [ -z "$__RootfsDir" ] && [ ! -z "$ROOTFS_DIR" ]; then

scripts/coreclr_arguments.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def __init__(self,
7171
self.require_built_core_root = require_built_core_root
7272
self.require_built_test_dir = require_built_test_dir
7373

74-
self.valid_arches = ["x64", "x86", "arm", "arm64"]
74+
self.valid_arches = ["x64", "x86", "arm", "arm64", "mips64"]
7575
self.valid_build_types = ["Debug", "Checked", "Release"]
7676
self.valid_host_os = ["Windows", "Windows_NT", "OSX", "Linux"]
7777

@@ -188,6 +188,8 @@ def provide_default_arch():
188188
return "armel"
189189
elif platform_machine == "aarch64" or platform_machine == "arm64":
190190
return "arm64"
191+
elif platform_machine == "mips64":
192+
return "mips64"
191193
else:
192194
raise RuntimeError("Unsupported platform")
193195

@@ -269,4 +271,4 @@ def check_and_return_default_product_location(product_location):
269271
self.verify(args,
270272
"product_location",
271273
check_and_return_default_product_location,
272-
"Error, incorrect product_location.")
274+
"Error, incorrect product_location.")

0 commit comments

Comments
 (0)