include(CheckFunctionExists)
include(TestBigEndian)
include(FindPkgConfig)
+include(CheckCCompilerFlag)
include("cmake/QuietOSXRanlib.cmake")
set(MONO_CROSS_COMPILE 1)
add_definitions(-DNO_GLOBALIZATION_SHIM)
if(NOT AOT_OFFSETS_FILE STREQUAL "")
- set(MONO_OFFSETS_FILE "${AOT_OFFSETS_FILE}")
+ set(MONO_OFFSETS_FILE "${AOT_OFFSETS_FILE}")
endif()
if(AOT_TARGET_TRIPLE STREQUAL "x86_64-apple-darwin10")
- set(TARGET_SYSTEM_NAME "iOS")
- set(TARGET_ARCH "x86_64")
+ set(TARGET_SYSTEM_NAME "iOS")
+ set(TARGET_ARCH "x86_64")
elseif(AOT_TARGET_TRIPLE STREQUAL "i386-apple-darwin10")
- set(TARGET_SYSTEM_NAME "iOS")
- set(TARGET_ARCH "x86")
+ set(TARGET_SYSTEM_NAME "iOS")
+ set(TARGET_ARCH "x86")
elseif(AOT_TARGET_TRIPLE STREQUAL "aarch64-apple-darwin10")
- set(TARGET_SYSTEM_NAME "iOS")
- set(TARGET_ARCH "arm64")
+ set(TARGET_SYSTEM_NAME "iOS")
+ set(TARGET_ARCH "arm64")
elseif(AOT_TARGET_TRIPLE STREQUAL "arm-apple-darwin10")
- set(TARGET_SYSTEM_NAME "iOS")
- set(TARGET_ARCH "arm")
+ set(TARGET_SYSTEM_NAME "iOS")
+ set(TARGET_ARCH "arm")
elseif(AOT_TARGET_TRIPLE STREQUAL "wasm32-unknown-none")
- set(TARGET_SYSTEM_NAME "Emscripten")
- set(TARGET_ARCH "wasm")
+ set(TARGET_SYSTEM_NAME "Emscripten")
+ set(TARGET_ARCH "wasm")
else()
- message(FATAL_ERROR "AOT target '${AOT_TARGET_TRIPLE}' not supported.")
+ message(FATAL_ERROR "AOT target '${AOT_TARGET_TRIPLE}' not supported.")
endif()
endif()
# We rely on signed overflow to behave
append("-fwrapv" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
- set(WARNINGS "-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes -Qunused-arguments -Wno-unused-function -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand -Wno-zero-length-array -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length")
+ set(WARNINGS "-Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -Wno-attributes -Wmissing-prototypes -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length -Wno-unused-function")
- set(WERROR "-Werror=incompatible-pointer-types -Werror=return-type -Werror-implicit-function-declaration")
+ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ set(WARNINGS "${WARNINGS} -Qunused-arguments -Wno-tautological-compare -Wno-parentheses-equality -Wno-self-assign -Wno-return-stack-address -Wno-constant-logical-operand -Wno-zero-length-array")
+ endif()
+
+ check_c_compiler_flag("-Werror=incompatible-pointer-types" WERROR_INCOMPATIBLE_POINTER_TYPES)
+ if(WERROR_INCOMPATIBLE_POINTER_TYPES)
+ set(WERROR "${WERROR} -Werror=incompatible-pointer-types")
+ endif()
+ set(WERROR "${WERROR} -Werror=return-type -Werror-implicit-function-declaration")
append("${WARNINGS} ${WERROR}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
set(MONO_ZERO_LEN_ARRAY 0)
if(ENABLE_WERROR)
- append("-Werror" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
+ append("-Werror" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
endif()
endif()
set(PTHREAD_POINTER_ID 1)
set(USE_MACH_SEMA 1)
if (GC_SUSPEND STREQUAL "default")
- set(GC_SUSPEND "hybrid")
+ set(GC_SUSPEND "hybrid")
endif()
-elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS")
+elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS" OR CMAKE_SYSTEM_NAME STREQUAL "tvOS")
# See man cmake-toolchains(7) on which variables
# control cross-compiling to ios
add_definitions(-DNO_GLOBALIZATION_SHIM)
set(DISABLE_CRASH_REPORTING 1)
set(ENABLE_MONOTOUCH 1)
add_definitions(-DMONOTOUCH=1)
- add_definitions(-DHOST_IOS=1)
set(HAVE_SYSTEM 0)
set(MONO_DL_NEED_USCORE 1)
+ if(CMAKE_SYSTEM_NAME STREQUAL "tvOS")
+ set(HOST_TVOS 1)
+ endif()
# Force some defines
set(HAVE_GETPWUID_R 0)
set(HAVE_SYS_USER_H 0)
set(HAVE_GETENTROPY 0)
+ if(CMAKE_SYSTEM_NAME STREQUAL "tvOS")
+ set(HAVE_PTHREAD_KILL 0)
+ set(HAVE_KILL 0)
+ set(HAVE_SIGACTION 0)
+ set(HAVE_FORK 0)
+ set(HAVE_EXECV 0)
+ set(HAVE_EXECVE 0)
+ set(HAVE_EXECVP 0)
+ set(HAVE_SIGNAL 0)
+ endif()
+ add_definitions("-DSMALL_CONFIG")
+ add_definitions("-D_XOPEN_SOURCE")
+ add_definitions("-DHAVE_LARGE_FILE_SUPPORT=1")
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(HOST_LINUX 1)
+ add_definitions(-D_GNU_SOURCE -D_REENTRANT)
elseif(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
set(HOST_WASM 1)
+ set(TARGET_ARCH "wasm")
+ # CMAKE_SYSTEM_PROCESSOR is set to x86
+ set(CMAKE_SYSTEM_PROCESSOR "wasm")
set(DISABLE_EXECUTABLES 1)
# FIXME: Is there a cmake option for this ?
set(DISABLE_SHARED_LIBS 1)
if(TARGET_SYSTEM_NAME STREQUAL "Darwin")
set(TARGET_MACH 1)
set(TARGET_OSX 1)
-elseif(TARGET_SYSTEM_NAME STREQUAL "iOS")
+elseif(TARGET_SYSTEM_NAME STREQUAL "iOS" OR TARGET_SYSTEM_NAME STREQUAL "tvOS")
set(TARGET_MACH 1)
set(TARGET_IOS 1)
+elseif(TARGET_SYSTEM_NAME STREQUAL "Linux")
elseif(TARGET_SYSTEM_NAME STREQUAL "Emscripten")
set(TARGET_WASM 1)
if (CMAKE_BUILD_TYPE STREQUAL "Release")
# HOST ARCH CHECKS
######################################
-if(NOT CMAKE_OSX_ARCHITECTURES STREQUAL "")
+if(NOT "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "")
set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_OSX_ARCHITECTURES}")
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "i386")
- set(CMAKE_SYSTEM_PROCESSOR "x86")
+ set(CMAKE_SYSTEM_PROCESSOR "x86")
endif()
endif()
set(HOST_X86 1)
elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm64")
set(HOST_ARM64 1)
-elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm")
+elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "arm" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7s")
set(HOST_ARM 1)
-elseif(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
- # CMAKE_SYSTEM_PROCESSOR is set to x86
+elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "wasm")
else()
message(FATAL_ERROR "CMAKE_SYSTEM_PROCESSOR='${CMAKE_SYSTEM_PROCESSOR}' not supported.")
endif()
elseif(TARGET_ARCH STREQUAL "arm64")
set(TARGET_ARM64 1)
set(MONO_ARCHITECTURE "\"arm64\"")
-elseif(TARGET_ARCH STREQUAL "arm")
+elseif(TARGET_ARCH STREQUAL "arm" OR TARGET_ARCH STREQUAL "armv7s")
set(TARGET_ARM 1)
set(MONO_ARCHITECTURE "\"arm\"")
+ if(TARGET_IOS)
+ add_definitions("-DARM_FPU_VFP=1")
+ endif()
elseif(TARGET_ARCH STREQUAL "wasm")
set(MONO_ARCHITECTURE "\"wasm\"")
-elseif(CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
- # CMAKE_SYSTEM_PROCESSOR is set to x86
- set(MONO_ARCHITECTURE "\"wasm\"")
else()
message(FATAL_ERROR "TARGET_ARCH='${TARGET_ARCH}' not supported.")
endif()
-
######################################
# LLVM CHECKS
######################################
set(LLVM_CONFIG ${LLVM_PREFIX}/bin/llvm-config)
if (NOT EXISTS ${LLVM_CONFIG})
- message(FATAL_ERROR "LLVM executable '${LLVM_CONFIG}' not found.")
+ message(FATAL_ERROR "LLVM executable '${LLVM_CONFIG}' not found.")
endif()
if(TARGET_ARCH STREQUAL "x86_64")
- set(llvm_codegen_libs "x86codegen")
+ set(llvm_codegen_libs "x86codegen")
elseif(TARGET_ARCH STREQUAL "x86")
- set(llvm_codegen_libs "x86codegen")
+ set(llvm_codegen_libs "x86codegen")
elseif(TARGET_ARCH STREQUAL "arm64")
- set(llvm_codegen_libs "aarch64codegen")
+ set(llvm_codegen_libs "aarch64codegen")
elseif(TARGET_ARCH STREQUAL "arm")
- set(llvm_codegen_libs "armcodegen")
+ set(llvm_codegen_libs "armcodegen")
elseif(TARGET_ARCH STREQUAL "wasm")
- set(llvm_codegen_libs "")
+ set(llvm_codegen_libs "")
else()
- message(FATAL_ERROR "FIXME")
+ message(FATAL_ERROR "FIXME")
endif()
execute_process(COMMAND ${LLVM_CONFIG} --mono-api-version RESULT_VARIABLE llvm_config_res OUTPUT_VARIABLE llvm_api_version OUTPUT_STRIP_TRAILING_WHITESPACE)
if (NOT ${llvm_config_res} EQUAL 0)
- message(FATAL_ERROR "'${LLVM_CONFIG} --mono-api-version' failed. Use the llvm fork at https://github.com/dotnet/llvm-project.")
+ message(FATAL_ERROR "'${LLVM_CONFIG} --mono-api-version' failed. Use the llvm fork at https://github.com/dotnet/llvm-project.")
endif()
execute_process(COMMAND ${LLVM_CONFIG} --cflags OUTPUT_VARIABLE llvm_cflags OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${LLVM_CONFIG} --cxxflags OUTPUT_VARIABLE llvm_cxxflags OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${LLVM_CONFIG} --libs analysis core bitwriter orcjit ${llvm_codegen_libs} OUTPUT_VARIABLE llvm_libs OUTPUT_STRIP_TRAILING_WHITESPACE)
if (${llvm_api_version} LESS 900)
- message(FATAL_ERROR "LLVM version too old.")
+ message(FATAL_ERROR "LLVM version too old.")
endif()
set(ENABLE_LLVM 1)
set(ENV{PKG_CONFIG_PATH} "{$PKG_CONFIG_PATH}:/usr/local/lib/pkgconfig:/usr/local/opt/icu4c/lib/pkgconfig")
pkg_check_modules(ICU icu-uc)
set(OSX_ICU_LIBRARY_PATH /usr/lib/libicucore.dylib)
- set(ICU_FLAGS "-DTARGET_UNIX -DU_DISABLE_RENAMING -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option -Wno-deprecated-declarations")
+ set(ICU_FLAGS "-DTARGET_UNIX -DU_DISABLE_RENAMING -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option -Wno-deprecated-declarations")
set(HAVE_SYS_ICU 1)
elseif(TARGET_WASM)
#set(ICU_CFLAGS "-DTARGET_UNIX -DU_DISABLE_RENAMING -DHAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS -DHAVE_SET_MAX_VARIABLE")
- set(ICU_FLAGS "-DPALEXPORT=\"\" -DTARGET_UNIX -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option")
+ set(ICU_FLAGS "-DPALEXPORT=\"\" -DTARGET_UNIX -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option")
set(HAVE_SYS_ICU 1)
set(STATIC_ICU 1)
+ set(ICU_LIBS "icucore")
elseif(TARGET_IOS)
# FIXME:
+elseif(HOST_LINUX)
+ pkg_check_modules(ICU icu-uc)
+ set(ICU_FLAGS "-DTARGET_UNIX -DU_DISABLE_RENAMING -Wno-reserved-id-macro -Wno-documentation -Wno-documentation-unknown-command -Wno-switch-enum -Wno-covered-switch-default -Wno-extra-semi-stmt -Wno-unknown-warning-option -Wno-deprecated-declarations")
+ set(HAVE_SYS_ICU 1)
else()
message(FATAL_ERROR "")
endif()