Adds cmake and proj entries to support building for s390x.
Includes a bug fix to CMakeLists.txt where IS_BIG_ENDIAN
was used before it was defined, causing failures on big-
endian platforms.
set(HOST_ARM64 1)
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
set(HOST_ARM 1)
+elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "s390x")
+ set(HOST_S390X 1)
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "wasm")
set(HOST_WASM 1)
else()
add_definitions("-DARM_FPU_VFP=1")
set(TARGET_SIZEOF_VOID_P 4)
set(SIZEOF_REGISTER 4)
+elseif(TARGET_ARCH STREQUAL "s390x")
+ set(TARGET_S390X 1)
+ set(MONO_ARCHITECTURE "\"s390x\"")
+ set(TARGET_SIZEOF_VOID_P 8)
+ set(SIZEOF_REGISTER 8)
elseif(TARGET_ARCH STREQUAL "wasm")
set(TARGET_WASM 1)
set(MONO_ARCHITECTURE "\"wasm\"")
endif()
endif()
+TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
+
+if(IS_BIG_ENDIAN)
+ set(TARGET_BYTE_ORDER G_BIG_ENDIAN)
+else()
+ set(TARGET_BYTE_ORDER G_LITTLE_ENDIAN)
+endif()
+
if(IS_BIG_ENDIAN)
set(ORDER G_BIG_ENDIAN)
else()
# END OF EGLIB CHECKS
#
-TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
-
-if(IS_BIG_ENDIAN)
- set(TARGET_BYTE_ORDER G_BIG_ENDIAN)
-else()
- set(TARGET_BYTE_ORDER G_LITTLE_ENDIAN)
-endif()
-
######################################
# DEBUG BUILD CHECKS
######################################
<_MonoBuildEnv Condition="'$(Platform)' == 'arm'" Include="PKG_CONFIG_PATH=$(MonoCrossDir)/usr/lib/arm-linux-gnueabihf/pkgconfig" />
</ItemGroup>
+ <!-- s390x Linux cross build options -->
+ <ItemGroup Condition="'$(MonoCrossDir)' != '' and '$(TargetArchitecture)' == 's390x'">
+ <_MonoCMakeArgs Include="-DCMAKE_TOOLCHAIN_FILE=$([MSBuild]::NormalizePath('$(RepositoryEngineeringDir)', 'common', 'cross', 'toolchain.cmake'))" />
+ <_MonoBuildEnv Include="TARGET_BUILD_ARCH=s390x" />
+ <_MonoBuildEnv Include="PKG_CONFIG_PATH=$(MonoCrossDir)/usr/lib/s390x-linux-gnu/pkgconfig" />
+ </ItemGroup>
+
<!-- Windows specific options -->
<ItemGroup Condition="'$(TargetsWindows)' == 'true'">
<_MonoCPPFLAGS Include="-DWIN32" />
tramp-arm-gsharedvt.c
cpu-arm.h)
+set(s390x_sources
+ mini-s390x.c
+ mini-s390x.h
+ exceptions-s390x.c
+ tramp-s390x.c
+ cpu-s390x.h)
+
set(wasm_sources
mini-wasm.c
tramp-wasm.c
set(arch_sources ${arm64_sources})
elseif(TARGET_ARM)
set(arch_sources ${arm_sources})
+elseif(TARGET_S390X)
+set(arch_sources ${s390x_sources})
elseif(TARGET_WASM)
set(arch_sources ${wasm_sources})
endif()
)
add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpu-s390x.h
+ COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/genmdesc.py TARGET_S390X ${CMAKE_CURRENT_SOURCE_DIR} cpu-s390x.h s390x_cpu_desc ${CMAKE_CURRENT_SOURCE_DIR}/cpu-s390x.md
+ VERBATIM
+)
+
+add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpu-wasm.h
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/genmdesc.py TARGET_WASM ${CMAKE_CURRENT_SOURCE_DIR} cpu-wasm.h wasm_desc ${CMAKE_CURRENT_SOURCE_DIR}/cpu-wasm.md
VERBATIM
set(utils_arch_sources "${utils_arch_sources};mono-hwcap-arm64.c")
elseif(TARGET_ARM)
set(utils_arch_sources "${utils_arch_sources};mono-hwcap-arm.c")
+elseif(TARGET_S390X)
+set(utils_arch_sources "${utils_arch_sources};mono-hwcap-s390x.c")
elseif(TARGET_WASM)
set(utils_arch_sources "${utils_arch_sources};mono-hwcap-wasm.c;mono-mmap-wasm.c")
else()