| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336 |
- cmake_minimum_required(VERSION 3.2)
- project (CHAKRACORE)
- # Keep CMake from caching static/shared library
- # option. Otherwise, CMake fails to update cached
- # references
- if(SHARED_LIBRARY_SH)
- unset(SHARED_LIBRARY_SH CACHE)
- unset(STATIC_LIBRARY_SH CACHE)
- unset(STATIC_LIBRARY CACHE)
- set(SHARED_LIBRARY 1)
- endif()
- if(STATIC_LIBRARY_SH)
- unset(SHARED_LIBRARY_SH CACHE)
- unset(STATIC_LIBRARY_SH CACHE)
- unset(SHARED_LIBRARY CACHE)
- set(STATIC_LIBRARY 1)
- endif()
- if(CC_TARGETS_AMD64_SH)
- unset(CC_TARGETS_X86 CACHE)
- unset(CC_TARGETS_X86_SH CACHE)
- unset(CC_TARGETS_AMD64_SH CACHE)
- set(CC_TARGETS_AMD64 1)
- endif()
- if(CC_TARGETS_X86_SH)
- unset(CC_TARGETS_X86_SH CACHE)
- unset(CC_TARGETS_AMD64_SH CACHE)
- unset(CC_TARGETS_AMD64 CACHE)
- set(CC_TARGETS_X86 1)
- set(CMAKE_SYSTEM_PROCESSOR "i386")
- endif()
- if(ICU_SETTINGS_RESET)
- unset(ICU_SETTINGS_RESET CACHE)
- unset(ICU_INCLUDE_PATH CACHE)
- unset(ICU_INCLUDE_PATH_SH CACHE)
- unset(NO_ICU_PATH_GIVEN_SH CACHE)
- unset(NO_ICU_PATH_GIVEN CACHE)
- unset(CC_EMBED_ICU_SH CACHE)
- endif()
- if(CC_EMBED_ICU_SH)
- unset(CC_EMBED_ICU_SH CACHE)
- set(CC_EMBED_ICU 1)
- set(ICU_INCLUDE_PATH "deps/icu/source/output/include/")
- add_definitions(-DU_STATIC_IMPLEMENTATION)
- endif()
- if(ICU_INCLUDE_PATH_SH)
- set(ICU_INCLUDE_PATH ${ICU_INCLUDE_PATH_SH})
- unset(NO_ICU_PATH_GIVEN_SH CACHE)
- unset(NO_ICU_PATH_GIVEN CACHE)
- unset(ICU_INCLUDE_PATH_SH CACHE)
- endif()
- if(NO_ICU_PATH_GIVEN_SH)
- set(NO_ICU_PATH_GIVEN ${NO_ICU_PATH_GIVEN_SH})
- unset(NO_ICU_PATH_GIVEN_SH CACHE)
- unset(ICU_INCLUDE_PATH_SH CACHE)
- unset(ICU_INCLUDE_PATH CACHE)
- endif()
- function(clr_unknown_arch)
- if (WIN32)
- message(FATAL_ERROR "Only AMD64, ARM and I386 are supported")
- else()
- message(FATAL_ERROR "Only AMD64 and I386 are supported")
- endif()
- endfunction()
- if(ICU_INCLUDE_PATH)
- add_definitions(-DHAS_REAL_ICU=1)
- set(ICU_CC_PATH "${ICU_INCLUDE_PATH}/../lib/")
- find_library(ICUUC icuuc PATHS ${ICU_CC_PATH} NO_DEFAULT_PATH)
- find_library(ICU18 icui18n PATHS ${ICU_CC_PATH} NO_DEFAULT_PATH)
- find_library(ICUDATA icudata PATHS ${ICU_CC_PATH} NO_DEFAULT_PATH)
- if(ICUUC)
- message("found libraries on ${ICU_CC_PATH}")
- set(ICULIB
- ${ICUUC}
- ${ICU18}
- ${ICUDATA}
- )
- endif()
- elseif(CC_EMBED_ICU)
- set(ICU_CC_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../../deps/icu/source/output/lib/")
- find_library(ICUUC icuuc PATHS ${ICU_CC_PATH} NO_DEFAULT_PATH)
- find_library(ICU18 icui18n PATHS ${ICU_CC_PATH} NO_DEFAULT_PATH)
- find_library(ICUDATA icudata PATHS ${ICU_CC_PATH} NO_DEFAULT_PATH)
- set(ICULIB
- ${ICUUC}
- ${ICU18}
- ${ICUDATA}
- )
- endif()
- set(CLR_CMAKE_PLATFORM_XPLAT 1)
- if(CC_TARGETS_AMD64)
- add_definitions(-D_M_X64_OR_ARM64)
- add_compile_options(-msse4.2)
- elseif(CC_TARGETS_X86)
- add_definitions(-D__i686__)
- add_definitions(-D_M_IX86_OR_ARM32)
- add_compile_options(-arch i386)
- add_compile_options(-msse3)
- set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} \
- -m32"
- )
- else()
- clr_unknown_arch()
- endif()
- if(CMAKE_SYSTEM_NAME STREQUAL Linux)
- if(NOT ICULIB)
- if(NOT NO_ICU_PATH_GIVEN)
- if(NOT CC_EMBED_ICU)
- set(ICULIB "icuuc")
- endif()
- add_definitions(-DHAS_REAL_ICU=1)
- endif()
- endif()
- set(CLR_CMAKE_PLATFORM_LINUX 1)
- # OSX 10.12 Clang deprecates libstdc++ [See GH #1599]
- # So, -Werror is linux only for now
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
- -Werror"
- )
- elseif(CMAKE_SYSTEM_NAME STREQUAL Darwin)
- add_definitions(
- -DPLATFORM_UNIX
- )
- if(NOT ICULIB)
- if(NOT NO_ICU_PATH_GIVEN)
- add_definitions(-DHAS_REAL_ICU=1)
- if(NOT CC_EMBED_ICU)
- set(ICULIB "icucore")
- add_definitions(
- -DU_DISABLE_RENAMING=1 #in case we link against to an older binary of icu
- )
- endif()
- message("using ICU from system default: ${ICULIB}")
- endif()
- endif()
- if(NOT CC_XCODE_PROJECT)
- set(CLR_CMAKE_PLATFORM_DARWIN 1)
- add_compile_options(-mmacosx-version-min=10.7)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
- -mmacosx-version-min=10.7")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
- -mmacosx-version-min=10.7")
- endif()
- else()
- message(FATAL_ERROR "This OS is not supported")
- endif()
- if (CMAKE_CXX_COMPILER_ID STREQUAL AppleClang
- OR CMAKE_CXX_COMPILER_ID STREQUAL Clang
- OR CMAKE_CXX_COMPILER_ID STREQUAL GNU)
- # Color diagnostics for g++ and clang++
- add_definitions("-fdiagnostics-color=always")
- endif()
- if(STATIC_LIBRARY)
- add_definitions(-DCHAKRA_STATIC_LIBRARY=1)
- endif()
- if(CLR_CMAKE_PLATFORM_XPLAT)
- add_definitions(-DFEATURE_PAL)
- add_definitions(-DPLATFORM_UNIX=1)
- if(CLR_CMAKE_PLATFORM_LINUX)
- add_definitions(-D__LINUX__=1)
- if(CC_TARGETS_AMD64)
- add_definitions(-DLINUX64)
- endif(CC_TARGETS_AMD64)
- endif(CLR_CMAKE_PLATFORM_LINUX)
- if(CC_TARGETS_AMD64)
- set(IS_64BIT_BUILD 1)
- add_definitions(-D_M_X64 -D_M_AMD64 -D_AMD64_)
- endif(CC_TARGETS_AMD64)
- add_definitions(
- -DUNICODE
- -D_SAFECRT_USE_CPP_OVERLOADS=1
- -D__STDC_WANT_LIB_EXT1__=1
- )
- set(CMAKE_CXX_STANDARD 11)
- # CC WARNING FLAGS
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
- -Wno-implicit-function-declaration"
- )
- # todo: fix general visibility of the interface
- # do not set to `fvisibility=hidden` as it is going to
- # prevent the required interface is being exported
- # clang by default sets fvisibility=default
- # CXX WARNING FLAGS
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
- -Wno-ignored-attributes\
- -Wno-deprecated-declarations\
- -Wno-parentheses-equality\
- -Wno-missing-braces\
- -Wno-reorder\
- -Wno-microsoft\
- -Wno-unused-value\
- -Wno-int-to-void-pointer-cast\
- -Wno-invalid-offsetof\
- -Wno-undefined-inline\
- -Wno-inconsistent-missing-override\
- -Wno-c++14-extensions\
- -Wno-macro-redefined\
- -Wno-pragmas\
- -Wno-invalid-token-paste\
- -Wno-format\
- -Wno-invalid-noreturn\
- -Wno-null-arithmetic\
- -Wno-tautological-constant-out-of-range-compare\
- -Wno-tautological-undefined-compare\
- -Wno-address-of-temporary\
- -Wno-null-conversion\
- -Wno-return-type\
- -Wno-switch\
- -Wno-int-to-pointer-cast"
- )
- # notes..
- # -Wno-address-of-temporary # vtinfo.h, VirtualTableInfo<T>::RegisterVirtualTable
- # -Wno-null-conversion # Check shmemory.cpp and cs.cpp here...
- # -Wno-return-type # switch unreachable code
- # -Wno-switch # switch values not handled
- include(Build/CMakeFeatureDetect.cmake)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
- ${CXX_DO_NOT_OPTIMIZE_SIBLING_CALLS} \
- -fno-omit-frame-pointer \
- -fdelayed-template-parsing"
- )
- # CXX / CC COMPILER FLAGS
- add_compile_options(
- -fasm-blocks
- -fms-extensions
- -fwrapv # Treat signed integer overflow as two's complement
- )
- # Clang -fsanitize.
- if (CLANG_SANITIZE_SH)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${CLANG_SANITIZE_SH}")
- set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -fsanitize=${CLANG_SANITIZE_SH}")
- unset(CLANG_SANITIZE_SH CACHE) # don't cache
- endif()
- endif(CLR_CMAKE_PLATFORM_XPLAT)
- if(ENABLE_FULL_LTO_SH)
- unset(DENABLE_FULL_LTO_SH CACHE)
- add_compile_options(-flto)
- elseif(ENABLE_THIN_LTO_SH)
- unset(ENABLE_THIN_LTO_SH CACHE)
- add_compile_options(-flto=thin)
- endif()
- if(CMAKE_BUILD_TYPE STREQUAL Debug)
- add_definitions(
- -DDBG=1
- -DDEBUG=1
- -D_DEBUG=1 # for PAL
- -DDBG_DUMP=1
- )
- elseif(CMAKE_BUILD_TYPE STREQUAL Test)
- add_definitions(
- -DENABLE_DEBUG_CONFIG_OPTIONS=1
- )
- endif(CMAKE_BUILD_TYPE STREQUAL Debug)
- if(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
- add_compile_options(-O3)
- endif(NOT CMAKE_BUILD_TYPE STREQUAL Debug)
- if(IS_64BIT_BUILD)
- add_definitions(
- -DBIT64=1
- -DSTACK_ALIGN=16
- )
- endif(IS_64BIT_BUILD)
- if(NO_JIT_SH)
- unset(NO_JIT_SH CACHE) # don't cache
- unset(BuildJIT CACHE) # also clear it just in case
- add_definitions(-DDISABLE_JIT=1)
- else()
- set(BuildJIT 1)
- endif()
- if(WITHOUT_FEATURES_SH)
- unset(WITHOUT_FEATURES_SH CACHE) # don't cache
- add_definitions(${WITHOUT_FEATURES_SH})
- endif(WITHOUT_FEATURES_SH)
- enable_language(ASM)
- include_directories(
- .
- lib/Common
- lib/Common/PlaceHolder
- pal
- pal/inc
- pal/inc/rt
- ${ICU_INCLUDE_PATH}
- )
- if(ICU_INCLUDE_PATH)
- if(NOT HAVE_LIBICU_UCHAR_H)
- set(HAVE_LIBICU_UCHAR_H "1")
- endif()
- endif()
- add_subdirectory (pal)
- # build the rest with NO_PAL_MINMAX and PAL_STDCPP_COMPAT
- add_definitions(
- -DNO_PAL_MINMAX
- -DPAL_STDCPP_COMPAT
- )
- add_subdirectory (lib)
- add_subdirectory (bin)
|