- Building in debug mode for platform x64
```bash
-./src/libraries/Native/build-native.sh debug x64
+./src/native/libs/build-native.sh debug x64
```
- The following example shows how you would do an arm cross-compile build
```bash
-./src/libraries/Native/build-native.sh debug arm cross verbose
+./src/native/libs/build-native.sh debug arm cross verbose
```
For Windows, replace `build-native.sh` with `build-native.cmd`.
<!-- Libraries sets -->
<ItemGroup Condition="$(_subset.Contains('+libs.native+'))">
- <ProjectToBuild Include="$(LibrariesProjectRoot)Native\build-native.proj" Category="libs" />
+ <ProjectToBuild Include="$(SharedNativeRoot)libs\build-native.proj" Category="libs" />
</ItemGroup>
<ItemGroup Condition="$(_subset.Contains('+libs.ref+'))">
# disable C++ RTTI
# /GR is added by default by CMake, so remove it manually.
- string(REPLACE "/GR" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ string(REPLACE "/GR " " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GR-")
add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:/FC>) # use full pathnames in diagnostics
get_filename_component(CLR_REPO_ROOT_DIR ${CMAKE_CURRENT_LIST_DIR}/../.. ABSOLUTE)
set(CLR_ENG_NATIVE_DIR ${CMAKE_CURRENT_LIST_DIR})
get_filename_component(CLR_SRC_NATIVE_DIR ${CMAKE_CURRENT_LIST_DIR}/../../src/native ABSOLUTE)
-get_filename_component(CLR_SRC_LIBS_NATIVE_DIR ${CMAKE_CURRENT_LIST_DIR}/../../src/libraries/Native ABSOLUTE)
set (CLR_ARTIFACTS_OBJ_DIR "${CLR_REPO_ROOT_DIR}/artifacts/obj")
set(VERSION_HEADER_PATH "${CLR_ARTIFACTS_OBJ_DIR}/_version.h")
set(VERSION_FILE_PATH "${CLR_ARTIFACTS_OBJ_DIR}/_version.c")
- subset: coreclr
include:
- src/libraries/System.Private.CoreLib/*
- - src/libraries/Native/Unix/System.Globalization.Native/*
- - src/libraries/Native/Unix/Common/*
- - src/native/*
+ - src/native/libs/Common/*
+ - src/native/libs/System.Globalization.Native/*
+ - src/native/libs/System.IO.Compression.Native/*
exclude:
- eng/Version.Details.xml
- '*.md'
- src/installer/*
- src/mono/*
- src/libraries/*
+ - src/native/libs/*
- src/tests/*
- eng/pipelines/installer/*
- eng/pipelines/mono/*
- subset: mono
include:
- src/libraries/System.Private.CoreLib/*
- - src/libraries/Native/Unix/System.Globalization.Native/*
- - src/libraries/Native/Unix/Common/*
- - src/native/*
+ - src/native/libs/Common/*
+ - src/native/libs/System.Globalization.Native/*
+ - src/native/libs/System.IO.Compression.Native/*
exclude:
- eng/Version.Details.xml
- '*.md'
- src/installer/*
- src/coreclr/*
- src/libraries/*
+ - src/native/libs/*
- src/tests/*
- eng/pipelines/installer/*
- eng/pipelines/coreclr/*
- eng/pipelines/libraries/enterprise/*
- src/libraries/Common/src/System/Net/*
- src/libraries/Common/tests/System/Net/*
- - src/libraries/Native/Unix/System.Net.Security.Native/*
+ - src/native/libs/System.Net.Security.Native/*
- src/libraries/System.Net.Http/*
- src/libraries/System.Net.Security/*
#-------------------------------
if(NOT CLR_CROSS_COMPONENTS_BUILD)
set(STATIC_LIBS_ONLY 1)
-
- if(CLR_CMAKE_TARGET_WIN32)
- add_subdirectory(${CLR_REPO_ROOT_DIR}/src/libraries/Native/Windows Native.Windows)
- else()
- add_subdirectory(${CLR_REPO_ROOT_DIR}/src/libraries/Native/Unix Native.Unix)
- endif()
+ add_subdirectory(${CLR_SRC_NATIVE_DIR}/libs libs-native)
endif(NOT CLR_CROSS_COMPONENTS_BUILD)
#-----------------------------------------
include_directories(${CLR_SRC_NATIVE_DIR})
# needed when zLib compression is used
-include_directories(${CLR_SRC_LIBS_NATIVE_DIR}/AnyOS/zlib)
-if(NOT CLR_CMAKE_TARGET_WIN32)
- include_directories(${CLR_SRC_LIBS_NATIVE_DIR}/Unix/Common)
-endif()
+include_directories(${CLR_SRC_NATIVE_DIR}/libs/System.IO.Compression.Native)
+include_directories(${CLR_SRC_NATIVE_DIR}/libs/Common)
add_definitions(-DUNICODE)
add_definitions(-D_UNICODE)
+++ /dev/null
----
-Language: Cpp
-# BasedOnStyle: LLVM
-AlignEscapedNewlinesLeft: false
-AllowShortFunctionsOnASingleLine: false
-AlwaysBreakTemplateDeclarations: true
-BinPackArguments: false
-BinPackParameters: false
-BreakBeforeBraces: Allman
-ColumnLimit: 120
-ConstructorInitializerAllOnOneLineOrOnePerLine: true
-IndentCaseLabels: true
-IndentWidth: 4
-PointerAlignment: Left
-TabWidth: 4
-...
-
+++ /dev/null
-cmake_minimum_required(VERSION 3.6.2)
-include(CheckCCompilerFlag)
-
-if(CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
- # CMake 3.14.5 contains bug fixes for iOS
- cmake_minimum_required(VERSION 3.14.5)
-elseif(CLR_CMAKE_TARGET_MACCATALYST)
- # CMake 3.18.1 properly generates MacCatalyst C compiler
- cmake_minimum_required(VERSION 3.18.1)
-endif()
-cmake_policy(SET CMP0042 NEW)
-
-project(CoreFX C)
-
-include(../../../../eng/native/configurepaths.cmake)
-include(${CLR_ENG_NATIVE_DIR}/configurecompiler.cmake)
-
-include_directories(${CLR_SRC_NATIVE_DIR})
-
-set(CMAKE_MACOSX_RPATH ON)
-if(CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
- set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON)
- set(CMAKE_INSTALL_NAME_DIR "@rpath")
-endif()
-set(CMAKE_INSTALL_PREFIX $ENV{__CMakeBinDir})
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
-
-add_compile_options(-I${CMAKE_CURRENT_SOURCE_DIR}/Common)
-add_compile_options(-I${CMAKE_CURRENT_BINARY_DIR}/Common)
-
-if(STATIC_LIBS_ONLY)
- # Suppress exporting of the PAL APIs
- add_definitions(-DPALEXPORT=EXTERN_C)
-
- set(STATIC_LIB_DESTINATION lib)
- set(GEN_SHARED_LIB 0)
-else()
- set(STATIC_LIB_DESTINATION .)
- set(GEN_SHARED_LIB 1)
-endif()
-
-if(CLR_CMAKE_TARGET_BROWSER)
- set(GEN_SHARED_LIB 0)
- set(STATIC_LIB_DESTINATION .)
-endif()
-
-if(CLR_CMAKE_TARGET_TVOS)
- # with -fembed-bitcode passing -headerpad_max_install_names is not allowed so remove it from the CMake flags
- string(REPLACE "-Wl,-headerpad_max_install_names" "" CMAKE_C_LINK_FLAGS ${CMAKE_C_LINK_FLAGS})
- string(REPLACE "-Wl,-headerpad_max_install_names" "" CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS})
- add_compile_options(-fembed-bitcode)
- add_link_options(-fembed-bitcode)
-endif()
-
-if(CLR_CMAKE_TARGET_ANDROID)
- if(CROSS_ROOTFS)
- include_directories(SYSTEM "${CROSS_ROOTFS}/usr/include")
- endif()
-endif()
-
-string(TOUPPER ${CMAKE_BUILD_TYPE} UPPERCASE_CMAKE_BUILD_TYPE)
-
-if (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
- if (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG)
- add_compile_options(-O0)
- elseif (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
- add_compile_options(-O2)
- endif ()
-
- add_definitions(-DDEBUG)
-
- # obtain settings from running coreclr\enablesanitizers.sh
- string(FIND "$ENV{DEBUG_SANITIZERS}" "asan" __ASAN_POS)
- string(FIND "$ENV{DEBUG_SANITIZERS}" "ubsan" __UBSAN_POS)
- if ((${__ASAN_POS} GREATER -1) OR (${__UBSAN_POS} GREATER -1))
- set(CLR_SANITIZE_LINK_FLAGS "${CLR_SANITIZE_LINK_FLAGS} -fsanitize=")
- if (${__ASAN_POS} GREATER -1)
- set(CLR_SANITIZE_LINK_FLAGS "${CLR_SANITIZE_LINK_FLAGS}address,")
- message("Address Sanitizer (asan) enabled")
- endif ()
- if (${__UBSAN_POS} GREATER -1)
- set(CLR_SANITIZE_LINK_FLAGS "${CLR_SANITIZE_LINK_FLAGS}undefined")
- message("Undefined Behavior Sanitizer (ubsan) enabled")
- endif ()
-
- set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CLR_SANITIZE_LINK_FLAGS}")
-
- # -Wl and --gc-sections: drop unused sections\functions (similar to Windows /Gy function-level-linking)
- set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CLR_SANITIZE_LINK_FLAGS} -Wl,--gc-sections")
- endif ()
-elseif (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL RELEASE)
- # Use O1 option when the clang version is smaller than 3.9
- # Otherwise use O3 option in release build
- if (CLR_CMAKE_TARGET_ARCH_ARMV7L AND DEFINED ENV{CROSSCOMPILE} AND CMAKE_C_COMPILER_VERSION VERSION_LESS 3.9)
- add_compile_options (-O1)
- else()
- add_compile_options (-O3)
- endif()
- add_definitions(-DNDEBUG)
-else ()
- message(FATAL_ERROR "Unknown build type. Set CMAKE_BUILD_TYPE to DEBUG or RELEASE.")
-endif ()
-
-if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
- add_definitions(-D__APPLE_USE_RFC_3542)
-endif ()
-
-if (CLR_CMAKE_TARGET_LINUX)
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE")
-endif ()
-
-include(configure.cmake)
-
-add_subdirectory(System.IO.Compression.Native)
-
-if (NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID)
- add_subdirectory(System.IO.Ports.Native)
-endif()
-
-if(CMAKE_C_COMPILER_ID STREQUAL Clang)
- add_compile_options(-Weverything)
- add_compile_options(-Wno-format-nonliteral)
- add_compile_options(-Wno-disabled-macro-expansion)
- add_compile_options(-Wno-padded)
- add_compile_options(-Wno-empty-translation-unit)
- add_compile_options(-Wno-cast-align)
- add_compile_options(-Wno-typedef-redefinition)
- add_compile_options(-Wno-c11-extensions)
- add_compile_options(-Wno-thread-safety-analysis)
-endif()
-
-add_subdirectory(System.Native)
-
-if(CLR_CMAKE_TARGET_BROWSER)
- # skip for now
-elseif(CLR_CMAKE_TARGET_MACCATALYST)
- add_subdirectory(System.Net.Security.Native)
- # System.Security.Cryptography.Native is intentionally disabled on iOS
- # it is only used for interacting with OpenSSL which isn't useful there
-elseif(CLR_CMAKE_TARGET_IOS)
- add_subdirectory(System.Net.Security.Native)
- # System.Security.Cryptography.Native is intentionally disabled on iOS
- # it is only used for interacting with OpenSSL which isn't useful there
-elseif(CLR_CMAKE_TARGET_TVOS)
- #add_subdirectory(System.Net.Security.Native) # no gssapi on tvOS, see https://developer.apple.com/documentation/gss
- # System.Security.Cryptography.Native is intentionally disabled on tvOS
- # it is only used for interacting with OpenSSL which isn't useful there
-elseif(CLR_CMAKE_TARGET_ANDROID)
- add_subdirectory(System.Security.Cryptography.Native.Android)
-else()
- add_subdirectory(System.Globalization.Native)
- add_subdirectory(System.Net.Security.Native)
- add_subdirectory(System.Security.Cryptography.Native)
-endif()
-
-if(CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
- add_subdirectory(System.Security.Cryptography.Native.Apple)
-endif()
+++ /dev/null
-project(System.IO.Compression.Native C)
-
-if (CLR_CMAKE_TARGET_BROWSER)
- add_definitions(-s USE_ZLIB)
-endif()
-
-include(${CMAKE_CURRENT_LIST_DIR}/extra_libs.cmake)
-
-set(NATIVE_LIBS_EXTRA)
-append_extra_compression_libs(NATIVE_LIBS_EXTRA)
-
-set(NATIVECOMPRESSION_SOURCES
- ../../AnyOS/zlib/pal_zlib.c
-)
-
-if (NOT CLR_CMAKE_TARGET_BROWSER)
- #Include Brotli include files
- include_directories("../../AnyOS/brotli/include")
-
- set (NATIVECOMPRESSION_SOURCES
- ${NATIVECOMPRESSION_SOURCES}
- ../../AnyOS/brotli/common/constants.c
- ../../AnyOS/brotli/common/context.c
- ../../AnyOS/brotli/common/dictionary.c
- ../../AnyOS/brotli/common/platform.c
- ../../AnyOS/brotli/common/transform.c
- ../../AnyOS/brotli/dec/bit_reader.c
- ../../AnyOS/brotli/dec/decode.c
- ../../AnyOS/brotli/dec/huffman.c
- ../../AnyOS/brotli/dec/state.c
- ../../AnyOS/brotli/enc/backward_references.c
- ../../AnyOS/brotli/enc/backward_references_hq.c
- ../../AnyOS/brotli/enc/bit_cost.c
- ../../AnyOS/brotli/enc/block_splitter.c
- ../../AnyOS/brotli/enc/brotli_bit_stream.c
- ../../AnyOS/brotli/enc/cluster.c
- ../../AnyOS/brotli/enc/command.c
- ../../AnyOS/brotli/enc/compress_fragment.c
- ../../AnyOS/brotli/enc/compress_fragment_two_pass.c
- ../../AnyOS/brotli/enc/dictionary_hash.c
- ../../AnyOS/brotli/enc/encode.c
- ../../AnyOS/brotli/enc/encoder_dict.c
- ../../AnyOS/brotli/enc/entropy_encode.c
- ../../AnyOS/brotli/enc/fast_log.c
- ../../AnyOS/brotli/enc/histogram.c
- ../../AnyOS/brotli/enc/literal_cost.c
- ../../AnyOS/brotli/enc/memory.c
- ../../AnyOS/brotli/enc/metablock.c
- ../../AnyOS/brotli/enc/static_dict.c
- ../../AnyOS/brotli/enc/utf8_util.c
- ../../AnyOS/System.IO.Compression.Native/entrypoints.c
- )
-
- # Disable implicit fallthrough warning for Brotli
- set(FLAGS -Wno-implicit-fallthrough)
-
- # Delete this supression once brotli is upgraded to vNext (current latest v1.0.9
- # does not contain upstream fix: https://github.com/google/brotli/commit/0a3944c)
- set(FLAGS "${FLAGS} -Wno-vla-parameter")
-
- set_source_files_properties(${NATIVECOMPRESSION_SOURCES} PROPERTIES COMPILE_FLAGS ${FLAGS})
-endif()
-
-if (GEN_SHARED_LIB)
- add_definitions(-DBROTLI_SHARED_COMPILATION)
-
- add_library(System.IO.Compression.Native
- SHARED
- ${NATIVECOMPRESSION_SOURCES}
- ${VERSION_FILE_PATH}
- )
-
- target_link_libraries(System.IO.Compression.Native
- ${NATIVE_LIBS_EXTRA}
- )
-
- if (NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID)
- set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/System.IO.Compression.Native_unixexports.src)
- set(EXPORTS_FILE ${CMAKE_CURRENT_BINARY_DIR}/System.IO.Compression.Native.exports)
- generate_exports_file(${DEF_SOURCES} ${EXPORTS_FILE})
- set_exports_linker_option(${EXPORTS_FILE})
-
- add_custom_target(System.IO.Compression.Native_exports DEPENDS ${EXPORTS_FILE})
- add_dependencies(System.IO.Compression.Native System.IO.Compression.Native_exports)
-
- set_property(TARGET System.IO.Compression.Native APPEND_STRING PROPERTY LINK_FLAGS ${EXPORTS_LINKER_OPTION})
- set_property(TARGET System.IO.Compression.Native APPEND_STRING PROPERTY LINK_DEPENDS ${EXPORTS_FILE})
-
- add_custom_command(TARGET System.IO.Compression.Native POST_BUILD
- COMMENT "Verifying System.IO.Compression.Native entry points against entrypoints.c "
- COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../verify-entrypoints.sh
- $<TARGET_FILE:System.IO.Compression.Native>
- ${CMAKE_CURRENT_SOURCE_DIR}/../../AnyOS/System.IO.Compression.Native/entrypoints.c
- ${CMAKE_NM}
- VERBATIM
- )
- endif()
-
- install_with_stripped_symbols (System.IO.Compression.Native PROGRAMS .)
-endif ()
-
-add_library(System.IO.Compression.Native-Static
- STATIC
- ${NATIVECOMPRESSION_SOURCES}
-)
-
-set_target_properties(System.IO.Compression.Native-Static PROPERTIES OUTPUT_NAME System.IO.Compression.Native CLEAN_DIRECT_OUTPUT 1)
-
-install (TARGETS System.IO.Compression.Native-Static DESTINATION ${STATIC_LIB_DESTINATION} COMPONENT libs)
+++ /dev/null
-cmake_minimum_required(VERSION 3.16)
-cmake_policy(SET CMP0091 NEW)
-
-include(../../../../eng/native/configurepaths.cmake)
-
-# C Compiler flags
-SET (CMAKE_C_FLAGS_INIT "/W3 /FC")
-SET (CMAKE_C_FLAGS_DEBUG_INIT "/Od /Zi")
-SET (CMAKE_C_FLAGS_RELEASE_INIT "/Ox")
-SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/O2 /Zi")
-SET (CMAKE_ASM_MASM_FLAGS "${CMAKE_ASM_MASM_FLAGS} /ZH:SHA_256")
-
-# Configuration of our libray specs and our directories
-SET (CMAKE_INCLUDE_CURRENT_DIR ON)
-SET (CMAKE_SHARED_LIBRARY_PREFIX "")
-
-set(__SharedLinkArgs)
-set(__LinkArgs)
-
-# Force an out of source build
-if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
- message(FATAL_ERROR "Binary directory isn't being correctly set before calling Cmake. Tree must be built in separate directory from source.")
-endif()
-
-if(STATIC_LIBS_ONLY)
- # Suppress exporting of the PAL APIs
- add_definitions(-DPALEXPORT=EXTERN_C)
-
- set(GEN_SHARED_LIB 0)
- set(STATIC_LIB_DESTINATION lib)
-else()
- set(GEN_SHARED_LIB 1)
- set(STATIC_LIB_DESTINATION .)
-endif()
-
-project(CoreFX)
-
-include(../../../../eng/native/configurepaths.cmake)
-
-# The following options are set by the razzle build
-add_compile_options(/d2Zi+) # make optimized builds debugging easier
-add_compile_options(/nologo) # Suppress Startup Banner
-add_compile_options(/Oi) # enable intrinsics
-add_compile_options(/Oy-) # disable suppressing of the creation of frame pointers on the call stack for quicker function calls
-add_compile_options(/U_MT) # undefine the predefined _MT macro
-add_compile_options(/GF) # enable read-only string pooling
-add_compile_options(/Gm-) # disable minimal rebuild
-string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
-add_compile_options(/EHa) # enable C++ EH (w/ SEH exceptions)
-add_compile_options(/Zp8) # pack structs on 8-byte boundary
-add_compile_options(/Gy) # separate functions for linker
-add_compile_options(/Zc:forScope) # C++ language conformance: enforce Standard C++ for scoping rules
-string(REPLACE "/GR " " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
-add_compile_options(/GR-) # disable C++ RTTI
-add_compile_options(/FC) # use full pathnames in diagnostics
-add_compile_options(/MP) # Build with Multiple Processes (number of processes equal to the number of processors)
-add_compile_options(/GS) # Buffer Security Check
-add_compile_options(/Zm200) # Specify Precompiled Header Memory Allocation Limit of 150MB
-add_compile_options(/Zi) # enable debugging information
-add_compile_options(/Zl) # enable debugging information
-add_compile_options(/wd4960 /wd4961 /wd4603 /wd4627 /wd4838 /wd4456 /wd4457 /wd4458 /wd4459 /wd4091 /we4640)
-add_compile_options(/ZH:SHA_256) # use SHA256 for generating hashes of compiler processed source files.
-
-if (${CLR_CMAKE_HOST_ARCH} STREQUAL "x86")
- add_compile_options(/Gz)
-endif ()
-
-# enable control-flow-guard support for native components
-add_compile_options(/guard:cf)
-list(APPEND __SharedLinkArgs /guard:cf)
-
-if (${CLR_CMAKE_HOST_ARCH} STREQUAL "x86_64" OR ${CLR_CMAKE_HOST_ARCH} STREQUAL "amd64" OR ${CLR_CMAKE_HOST_ARCH} STREQUAL "x64")
- # Enable EH continuation table and CETCOMPAT for native components
- add_compile_options(/guard:ehcont)
- list(APPEND __SharedLinkArgs /guard:ehcont)
- list(APPEND __SharedLinkArgs /CETCOMPAT)
-endif ()
-
-# Statically linked CRT (libcmt[d].lib, libvcruntime[d].lib and libucrt[d].lib) by default. This is done to avoid
-# linking in VCRUNTIME140.DLL for a simplified xcopy experience by reducing the dependency on VC REDIST.
-#
-# For Release builds, we shall dynamically link into uCRT [ucrtbase.dll] (which is pushed down as a Windows Update on downlevel OS) but
-# won't do the same for debug/checked builds since ucrtbased.dll is not redistributable and Debug/Checked builds are not
-# production-time scenarios.
-
-set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
-
-add_compile_options($<$<CONFIG:RELEASE>:/GL>)
-
-list(APPEND __LinkLibraries $<$<CONFIG:DEBUG>:libcmtd.lib>)
-list(APPEND __LinkLibraries $<$<CONFIG:RELEASE>:libcmt.lib>)
-
-list(APPEND __LinkLibraries $<$<CONFIG:DEBUG>:libvcruntimed.lib>)
-list(APPEND __LinkLibraries $<$<CONFIG:RELEASE>:libvcruntime.lib>)
-
-# Linker flags
-list(APPEND __SharedLinkArgs /INCREMENTAL:NO)
-list(APPEND __SharedLinkArgs /MANIFEST:NO) #Do not create Side-by-Side Assembly Manifest
-list(APPEND __SharedLinkArgs /LARGEADDRESSAWARE) # can handle addresses larger than 2 gigabytes
-list(APPEND __SharedLinkArgs /RELEASE) #sets the checksum in the header
-list(APPEND __SharedLinkArgs /NXCOMPAT) #Compatible with Data Execution Prevention
-list(APPEND __SharedLinkArgs /DYNAMICBASE) #Use address space layout randomization
-list(APPEND __SharedLinkArgs /DEBUGTYPE:cv,fixup) #debugging format
-list(APPEND __SharedLinkArgs /PDBCOMPRESS) #shrink pdb size
-list(APPEND __SharedLinkArgs /DEBUG)
-list(APPEND __SharedLinkArgs /IGNORE:4197,4013,4254,4070,4221)
-
-# Release build specific flags
-list(APPEND __LinkArgs $<$<CONFIG:RELEASE>:/LTCG>)
-list(APPEND __SharedLinkArgs $<$<CONFIG:RELEASE>:/OPT:REF>)
-list(APPEND __SharedLinkArgs $<$<CONFIG:RELEASE>:/OPT:ICF>)
-
-# Force uCRT to be dynamically linked for Release build (unless env variable CLR_CMAKE_WIN32_FORCE_STATIC_LINK is set to true)
-set(CLR_CMAKE_WIN32_FORCE_STATIC_LINK $ENV{CLR_CMAKE_WIN32_FORCE_STATIC_LINK})
-if(NOT CLR_CMAKE_WIN32_FORCE_STATIC_LINK)
- list(APPEND __SharedLinkArgs $<$<CONFIG:RELEASE>:/NODEFAULTLIB:libucrt.lib>)
- list(APPEND __SharedLinkArgs $<$<CONFIG:RELEASE>:/DEFAULTLIB:ucrt.lib>)
-endif()
-
-# Debug build specific flags
-list(INSERT __SharedLinkArgs 0 $<$<OR:$<CONFIG:DEBUG>,$<CONFIG:CHECKED>>:/NOVCFEATURE>)
-
-if (${CLR_CMAKE_HOST_ARCH} STREQUAL "x86_64" OR ${CLR_CMAKE_HOST_ARCH} STREQUAL "amd64" OR ${CLR_CMAKE_HOST_ARCH} STREQUAL "x64")
- add_definitions(-DTARGET_64BIT=1)
-endif ()
-
-# Do not define DEBUG. zlib has asserts under DEBUG for non-catastrophic cases,
-# such as on bad user-provided inputs. We leave NDEBUG defined, however,
-# as other asserts should still be included.
-add_compile_definitions($<$<CONFIG:RELEASE>:NDEBUG>)
-
-include_directories(${CLR_SRC_NATIVE_DIR})
-
-# we only need to build System.Globalization.Native when building static libs.
-if(STATIC_LIBS_ONLY)
- add_subdirectory(../Unix/System.Globalization.Native System.Globalization.Native)
-endif()
-
-add_subdirectory(System.IO.Compression.Native)
+++ /dev/null
-project(System.IO.Compression.Native)
-
-if("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
- message(FATAL_ERROR "Binary directory isn't being correctly set before calling Cmake. Tree must be built in separate directory from source.")
-endif()
-
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-if (GEN_SHARED_LIB)
- include (GenerateExportHeader)
-endif()
-
-if(${CLR_CMAKE_HOST_ARCH} STREQUAL x86 OR ${CLR_CMAKE_HOST_ARCH} STREQUAL x64)
- set(NATIVECOMPRESSION_SOURCES
- zlib-intel/adler32.c
- zlib-intel/compress.c
- zlib-intel/crc_folding.c
- zlib-intel/crc32.c
- zlib-intel/deflate_medium.c
- zlib-intel/deflate_quick.c
- zlib-intel/deflate.c
- zlib-intel/inffast.c
- zlib-intel/inflate.c
- zlib-intel/inftrees.c
- zlib-intel/match.c
- zlib-intel/slide_sse.c
- zlib-intel/trees.c
- zlib-intel/x86.c
- zlib-intel/zutil.c
-)
-else()
- set(NATIVECOMPRESSION_SOURCES
- zlib/adler32.c
- zlib/compress.c
- zlib/crc32.c
- zlib/deflate.c
- zlib/inffast.c
- zlib/inflate.c
- zlib/inftrees.c
- zlib/trees.c
- zlib/zutil.c
- )
-endif()
-
-set (NATIVECOMPRESSION_SOURCES
- ${NATIVECOMPRESSION_SOURCES}
- ../../AnyOS/zlib/pal_zlib.c
- ../../AnyOS/brotli/common/constants.c
- ../../AnyOS/brotli/common/context.c
- ../../AnyOS/brotli/common/dictionary.c
- ../../AnyOS/brotli/common/platform.c
- ../../AnyOS/brotli/common/transform.c
- ../../AnyOS/brotli/dec/bit_reader.c
- ../../AnyOS/brotli/dec/decode.c
- ../../AnyOS/brotli/dec/huffman.c
- ../../AnyOS/brotli/dec/state.c
- ../../AnyOS/brotli/enc/backward_references.c
- ../../AnyOS/brotli/enc/backward_references_hq.c
- ../../AnyOS/brotli/enc/bit_cost.c
- ../../AnyOS/brotli/enc/block_splitter.c
- ../../AnyOS/brotli/enc/brotli_bit_stream.c
- ../../AnyOS/brotli/enc/cluster.c
- ../../AnyOS/brotli/enc/command.c
- ../../AnyOS/brotli/enc/compress_fragment.c
- ../../AnyOS/brotli/enc/compress_fragment_two_pass.c
- ../../AnyOS/brotli/enc/dictionary_hash.c
- ../../AnyOS/brotli/enc/encode.c
- ../../AnyOS/brotli/enc/encoder_dict.c
- ../../AnyOS/brotli/enc/entropy_encode.c
- ../../AnyOS/brotli/enc/fast_log.c
- ../../AnyOS/brotli/enc/histogram.c
- ../../AnyOS/brotli/enc/literal_cost.c
- ../../AnyOS/brotli/enc/memory.c
- ../../AnyOS/brotli/enc/metablock.c
- ../../AnyOS/brotli/enc/static_dict.c
- ../../AnyOS/brotli/enc/utf8_util.c
-)
-
-#Include Brotli include files
-include_directories("../../AnyOS/brotli/include")
-
-if (GEN_SHARED_LIB)
- add_library(System.IO.Compression.Native
- SHARED
- ${NATIVECOMPRESSION_SOURCES}
- System.IO.Compression.Native.def
- # This will add versioning to the library
- ${VERSION_FILE_RC_PATH}
- )
-endif()
-
-if (NOT GEN_SHARED_LIB AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_BROWSER)
- set(NATIVECOMPRESSION_SOURCES ${NATIVECOMPRESSION_SOURCES} ../../AnyOS/System.IO.Compression.Native/entrypoints.c)
-endif()
-
-add_library(System.IO.Compression.Native-Static
- STATIC
- ${NATIVECOMPRESSION_SOURCES}
-)
-
-# Allow specification of arguments that should be passed to the linker
-if (GEN_SHARED_LIB)
- SET_TARGET_PROPERTIES(System.IO.Compression.Native PROPERTIES LINK_OPTIONS "${__LinkArgs};${__SharedLinkArgs}")
-endif()
-SET_TARGET_PROPERTIES(System.IO.Compression.Native-Static PROPERTIES STATIC_LIBRARY_OPTIONS "${__LinkArgs}")
-
-# Allow specification of libraries that should be linked against
-if (GEN_SHARED_LIB)
- target_link_libraries(System.IO.Compression.Native ${__LinkLibraries})
-endif()
-target_link_libraries(System.IO.Compression.Native-Static ${__LinkLibraries})
-
-if (GEN_SHARED_LIB)
- GENERATE_EXPORT_HEADER( System.IO.Compression.Native
- BASE_NAME System.IO.Compression.Native
- EXPORT_MACRO_NAME System.IO.Compression.Native_EXPORT
- EXPORT_FILE_NAME System.IO.Compression.Native_Export.h
- STATIC_DEFINE System.IO.Compression.Native_BUILT_AS_STATIC
- )
-
- install (TARGETS System.IO.Compression.Native DESTINATION .)
- install (FILES $<TARGET_PDB_FILE:System.IO.Compression.Native> DESTINATION .)
-endif()
-
-install (TARGETS System.IO.Compression.Native-Static DESTINATION ${STATIC_LIB_DESTINATION} COMPONENT libs)
######################################
# ICU CHECKS
######################################
-set(ICU_SHIM_PATH "${CLR_SRC_LIBS_NATIVE_DIR}/Unix/System.Globalization.Native")
+set(ICU_SHIM_PATH "${CLR_SRC_NATIVE_DIR}/libs/System.Globalization.Native")
if(MONO_CROSS_COMPILE)
elseif(HOST_OSX AND NOT HOST_MACCAT)
include(FindPkgConfig)
</PropertyGroup>
<PropertyGroup>
- <!-- Minimum target OS version, keep in sync with src/libraries/Native/build-native.sh -->
+ <!-- Minimum target OS version, keep in sync with src/native/libs/build-native.sh -->
<iOSVersionMin>10.0</iOSVersionMin>
<tvOSVersionMin>10.0</tvOSVersionMin>
<watchOSVersionMin>2.0</watchOSVersionMin>
${pal_icushim_sources_base})
addprefix(icu_shim_sources "${ICU_SHIM_PATH}" "${icu_shim_sources_base}")
set_source_files_properties(${icu_shim_sources} PROPERTIES COMPILE_DEFINITIONS OSX_ICU_LIBRARY_PATH="${OSX_ICU_LIBRARY_PATH}")
- set_source_files_properties(${icu_shim_sources} PROPERTIES COMPILE_FLAGS "-I\"${ICU_INCLUDEDIR}\" -I\"${CMAKE_CURRENT_SOURCE_DIR}/../../../libraries/Native/Unix/System.Globalization.Native/\" -I\"${CMAKE_CURRENT_SOURCE_DIR}/../../../libraries/Native/Unix/Common/\" ${ICU_FLAGS}")
+ set_source_files_properties(${icu_shim_sources} PROPERTIES COMPILE_FLAGS "-I\"${ICU_INCLUDEDIR}\" -I\"${CLR_SRC_NATIVE_DIR}/libs/System.Globalization.Native/\" -I\"${CLR_SRC_NATIVE_DIR}/libs/Common/\" ${ICU_FLAGS}")
if(TARGET_WIN32)
set_source_files_properties(${icu_shim_sources} PROPERTIES LANGUAGE CXX)
endif()
MONO_BIN_DIR?=$(BINDIR)/mono/Browser.wasm.$(CONFIG)
NATIVE_BIN_DIR?=$(BINDIR)/native/net7.0-Browser-$(CONFIG)-wasm
ICU_LIBDIR?=
-SYSTEM_NATIVE_LIBDIR?=$(TOP)/src/libraries/Native/Unix/System.Native
+SYSTEM_NATIVE_LIBDIR?=$(TOP)/src/native/libs/System.Native
_MSBUILD_WASM_BUILD_ARGS=/p:TargetOS=Browser /p:TargetArchitecture=wasm /p:Configuration=$(CONFIG)
XHARNESS_BROWSER?=chrome
EMCC_DEFAULT_RSP=$(NATIVE_BIN_DIR)/src/emcc-default.rsp
<CMakeConfigurationLinkFlags Condition="'$(Configuration)' == 'Debug'">$(CMakeConfigurationEmccFlags)</CMakeConfigurationLinkFlags>
<CMakeConfigurationLinkFlags Condition="'$(Configuration)' == 'Release'">-O2</CMakeConfigurationLinkFlags>
<CMakeConfigurationEmsdkPath Condition="'$(Configuration)' == 'Release'"> -DEMSDK_PATH="$(EMSDK_PATH.TrimEnd('\/'))"</CMakeConfigurationEmsdkPath>
- <CMakeBuildRuntimeConfigureCmd>emcmake cmake $(MSBuildThisFileDirectory)runtime -DCMAKE_BUILD_TYPE=$(Configuration) -DCONFIGURATION_EMCC_FLAGS="$(CMakeConfigurationEmccFlags)" -DCONFIGURATION_LINK_FLAGS="$(CMakeConfigurationLinkFlags)" -DMONO_INCLUDES="$(MonoArtifactsPath)include/mono-2.0" -DMONO_OBJ_INCLUDES="$(MonoObjDir.TrimEnd('\/'))" -DICU_LIB_DIR="$(ICULibDir.TrimEnd('\/'))" -DMONO_ARTIFACTS_DIR="$(MonoArtifactsPath.TrimEnd('\/'))" -DNATIVE_BIN_DIR="$(NativeBinDir.TrimEnd('\/'))" -DSYSTEM_NATIVE_DIR="$(RepoRoot)src/libraries/Native/Unix/System.Native" -DSOURCE_DIR="$(MSBuildThisFileDirectory.TrimEnd('\/'))/runtime"$(CMakeConfigurationEmsdkPath)</CMakeBuildRuntimeConfigureCmd>
+ <CMakeBuildRuntimeConfigureCmd>emcmake cmake $(MSBuildThisFileDirectory)runtime -DCMAKE_BUILD_TYPE=$(Configuration) -DCONFIGURATION_EMCC_FLAGS="$(CMakeConfigurationEmccFlags)" -DCONFIGURATION_LINK_FLAGS="$(CMakeConfigurationLinkFlags)" -DMONO_INCLUDES="$(MonoArtifactsPath)include/mono-2.0" -DMONO_OBJ_INCLUDES="$(MonoObjDir.TrimEnd('\/'))" -DICU_LIB_DIR="$(ICULibDir.TrimEnd('\/'))" -DMONO_ARTIFACTS_DIR="$(MonoArtifactsPath.TrimEnd('\/'))" -DNATIVE_BIN_DIR="$(NativeBinDir.TrimEnd('\/'))" -DSYSTEM_NATIVE_DIR="$(RepoRoot)src/native/libs/System.Native" -DSOURCE_DIR="$(MSBuildThisFileDirectory.TrimEnd('\/'))/runtime"$(CMakeConfigurationEmsdkPath)</CMakeBuildRuntimeConfigureCmd>
<CMakeBuildRuntimeConfigureCmd Condition="'$(OS)' == 'Windows_NT'">call "$(RepositoryEngineeringDir)native\init-vs-env.cmd" && call "$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'emsdk_env.bat'))" && $(CMakeBuildRuntimeConfigureCmd)</CMakeBuildRuntimeConfigureCmd>
<CMakeBuildRuntimeConfigureCmd Condition="'$(OS)' != 'Windows_NT'">bash -c 'source $(EMSDK_PATH)/emsdk_env.sh 2>&1 && $(CMakeBuildRuntimeConfigureCmd)'</CMakeBuildRuntimeConfigureCmd>
<CMakeBuildRuntimeCmd>cmake --build . --config $(Configuration)</CMakeBuildRuntimeCmd>
<CMakeBuildRuntimeCmd Condition="'$(OS)' == 'Windows_NT'">call "$(RepositoryEngineeringDir)native\init-vs-env.cmd" && call "$([MSBuild]::NormalizePath('$(EMSDK_PATH)', 'emsdk_env.bat'))" && $(CMakeBuildRuntimeCmd)</CMakeBuildRuntimeCmd>
<CMakeBuildRuntimeCmd Condition="'$(OS)' != 'Windows_NT'">bash -c 'source $(EMSDK_PATH)/emsdk_env.sh 2>&1 && $(CMakeBuildRuntimeCmd)'</CMakeBuildRuntimeCmd>
- <SystemNativeDir>$(RepoRoot)src\libraries\Native\Unix\System.Native</SystemNativeDir>
</PropertyGroup>
<Copy SourceFiles="$(PInvokeTableFile)"
runtime/pinvoke.c;
runtime/corebindings.c;
runtime/library-dotnet.js;
- $(SystemNativeDir)\pal_random.js;"
+ $(SharedNativeRoot)libs\System.Native\pal_random.js;"
DestinationFolder="$(NativeBinDir)src"
SkipUnchangedFiles="true" />
include_directories(..)
include_directories(../../json)
-
-include_directories(${CLR_SRC_LIBS_NATIVE_DIR}/AnyOS/zlib)
-if(NOT CLR_CMAKE_TARGET_WIN32)
- include_directories(${CLR_SRC_LIBS_NATIVE_DIR}/Unix/Common)
-endif()
+include_directories(${CLR_SRC_NATIVE_DIR}/libs/System.IO.Compression.Native)
+include_directories(${CLR_SRC_NATIVE_DIR}/libs/Common)
set(SOURCES
../bundle_marker.cpp
)
# additional requirements for System.IO.Compression.Native
- include(${CLR_REPO_ROOT_DIR}/src/libraries/Native/Unix/System.IO.Compression.Native/extra_libs.cmake)
+ include(${CLR_SRC_NATIVE_DIR}/libs/System.IO.Compression.Native/extra_libs.cmake)
append_extra_compression_libs(NATIVE_LIBS)
# Additional requirements for System.Net.Security.Native
- include(${CLR_REPO_ROOT_DIR}/src/libraries/Native/Unix/System.Net.Security.Native/extra_libs.cmake)
+ include(${CLR_SRC_NATIVE_DIR}/libs/System.Net.Security.Native/extra_libs.cmake)
append_extra_security_libs(NATIVE_LIBS)
# Additional requirements for System.Native
- include(${CLR_REPO_ROOT_DIR}/src/libraries/Native/Unix/System.Native/extra_libs.cmake)
+ include(${CLR_SRC_NATIVE_DIR}/libs/System.Native/extra_libs.cmake)
append_extra_system_libs(NATIVE_LIBS)
# Additional requirements for System.Security.Cryptography.Native.OpenSsl
- include(${CLR_REPO_ROOT_DIR}/src/libraries/Native/Unix/System.Security.Cryptography.Native/extra_libs.cmake)
+ include(${CLR_SRC_NATIVE_DIR}/libs/System.Security.Cryptography.Native/extra_libs.cmake)
append_extra_cryptography_libs(NATIVE_LIBS)
set(RUNTIMEINFO_LIB runtimeinfo)
)
# Additional requirements for System.Security.Cryptography.Native.Apple
- include(${CLR_REPO_ROOT_DIR}/src/libraries/Native/Unix/System.Security.Cryptography.Native.Apple/extra_libs.cmake)
+ include(${CLR_SRC_NATIVE_DIR}/libs/System.Security.Cryptography.Native.Apple/extra_libs.cmake)
append_extra_cryptography_apple_libs(NATIVE_LIBS)
endif()
--- /dev/null
+cmake_minimum_required(VERSION 3.6.2)
+include(CheckCCompilerFlag)
+
+if (CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
+ # CMake 3.14.5 contains bug fixes for iOS
+ cmake_minimum_required(VERSION 3.14.5)
+elseif (CLR_CMAKE_TARGET_MACCATALYST)
+ # CMake 3.18.1 properly generates MacCatalyst C compiler
+ cmake_minimum_required(VERSION 3.18.1)
+endif ()
+
+if (WIN32)
+ cmake_policy(SET CMP0091 NEW)
+else ()
+ cmake_policy(SET CMP0042 NEW)
+endif ()
+
+project(CoreFX C)
+
+include(../../../eng/native/configurepaths.cmake)
+include(${CLR_ENG_NATIVE_DIR}/configurecompiler.cmake)
+
+include_directories(${CLR_SRC_NATIVE_DIR})
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+if (STATIC_LIBS_ONLY)
+ # Suppress exporting of the PAL APIs
+ add_definitions(-DPALEXPORT=EXTERN_C)
+
+ set(GEN_SHARED_LIB 0)
+ set(STATIC_LIB_DESTINATION lib)
+else ()
+ set(GEN_SHARED_LIB 1)
+ set(STATIC_LIB_DESTINATION .)
+endif ()
+
+if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_BROWSER)
+ set(CMAKE_MACOSX_RPATH ON)
+ if (CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
+ set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR ON)
+ set(CMAKE_INSTALL_NAME_DIR "@rpath")
+ endif ()
+
+ set(CMAKE_INSTALL_PREFIX $ENV{__CMakeBinDir})
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
+
+ add_compile_options(-I${CMAKE_CURRENT_SOURCE_DIR}/Common)
+ add_compile_options(-I${CMAKE_CURRENT_BINARY_DIR}/Common)
+
+ if (CLR_CMAKE_TARGET_BROWSER)
+ set(GEN_SHARED_LIB 0)
+ set(STATIC_LIB_DESTINATION .)
+ endif ()
+
+ if (CLR_CMAKE_TARGET_TVOS)
+ # with -fembed-bitcode passing -headerpad_max_install_names is not allowed so remove it from the CMake flags
+ string(REPLACE "-Wl,-headerpad_max_install_names" "" CMAKE_C_LINK_FLAGS ${CMAKE_C_LINK_FLAGS})
+ string(REPLACE "-Wl,-headerpad_max_install_names" "" CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS})
+ add_compile_options(-fembed-bitcode)
+ add_link_options(-fembed-bitcode)
+ endif ()
+
+ if (CLR_CMAKE_TARGET_ANDROID)
+ if (CROSS_ROOTFS)
+ include_directories(SYSTEM "${CROSS_ROOTFS}/usr/include")
+ endif ()
+ endif ()
+
+ string(TOUPPER ${CMAKE_BUILD_TYPE} UPPERCASE_CMAKE_BUILD_TYPE)
+
+ if (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
+ if (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG)
+ add_compile_options(-O0)
+ elseif (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
+ add_compile_options(-O2)
+ endif ()
+
+ add_definitions(-DDEBUG)
+
+ # obtain settings from running coreclr\enablesanitizers.sh
+ string(FIND "$ENV{DEBUG_SANITIZERS}" "asan" __ASAN_POS)
+ string(FIND "$ENV{DEBUG_SANITIZERS}" "ubsan" __UBSAN_POS)
+ if (${__ASAN_POS} GREATER -1 OR ${__UBSAN_POS} GREATER -1)
+ set(CLR_SANITIZE_LINK_FLAGS "${CLR_SANITIZE_LINK_FLAGS} -fsanitize=")
+ if (${__ASAN_POS} GREATER -1)
+ set(CLR_SANITIZE_LINK_FLAGS "${CLR_SANITIZE_LINK_FLAGS}address,")
+ message("Address Sanitizer (asan) enabled")
+ endif ()
+ if (${__UBSAN_POS} GREATER -1)
+ set(CLR_SANITIZE_LINK_FLAGS "${CLR_SANITIZE_LINK_FLAGS}undefined")
+ message("Undefined Behavior Sanitizer (ubsan) enabled")
+ endif ()
+
+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CLR_SANITIZE_LINK_FLAGS}")
+
+ # -Wl and --gc-sections: drop unused sections\functions (similar to Windows /Gy function-level-linking)
+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CLR_SANITIZE_LINK_FLAGS} -Wl,--gc-sections")
+ endif ()
+ elseif (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL RELEASE)
+ # Use O1 option when the clang version is smaller than 3.9
+ # Otherwise use O3 option in release build
+ if (CLR_CMAKE_TARGET_ARCH_ARMV7L AND DEFINED ENV{CROSSCOMPILE} AND CMAKE_C_COMPILER_VERSION VERSION_LESS 3.9)
+ add_compile_options (-O1)
+ else ()
+ add_compile_options (-O3)
+ endif ()
+ else ()
+ message(FATAL_ERROR "Unknown build type. Set CMAKE_BUILD_TYPE to DEBUG or RELEASE.")
+ endif ()
+
+ if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
+ add_definitions(-D__APPLE_USE_RFC_3542)
+ endif ()
+
+ if (CLR_CMAKE_TARGET_LINUX)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE")
+ endif ()
+else ()
+ set(CMAKE_SHARED_LIBRARY_PREFIX "")
+
+ # we only need to build System.Globalization.Native when building static libs.
+ if (STATIC_LIBS_ONLY)
+ add_subdirectory(System.Globalization.Native)
+ endif ()
+endif ()
+
+add_subdirectory(System.IO.Compression.Native)
+
+if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_BROWSER)
+ include(configure.cmake)
+
+ if (NOT CLR_CMAKE_TARGET_BROWSER AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID)
+ add_subdirectory(System.IO.Ports.Native)
+ endif ()
+
+ if (CMAKE_C_COMPILER_ID STREQUAL Clang)
+ add_compile_options(-Weverything)
+ add_compile_options(-Wno-format-nonliteral)
+ add_compile_options(-Wno-disabled-macro-expansion)
+ add_compile_options(-Wno-padded)
+ add_compile_options(-Wno-empty-translation-unit)
+ add_compile_options(-Wno-cast-align)
+ add_compile_options(-Wno-typedef-redefinition)
+ add_compile_options(-Wno-c11-extensions)
+ add_compile_options(-Wno-thread-safety-analysis)
+ endif ()
+
+ add_subdirectory(System.Native)
+
+ if (CLR_CMAKE_TARGET_BROWSER)
+ # skip for now
+ elseif (CLR_CMAKE_TARGET_MACCATALYST)
+ add_subdirectory(System.Net.Security.Native)
+ # System.Security.Cryptography.Native is intentionally disabled on iOS
+ # it is only used for interacting with OpenSSL which isn't useful there
+ elseif (CLR_CMAKE_TARGET_IOS)
+ add_subdirectory(System.Net.Security.Native)
+ # System.Security.Cryptography.Native is intentionally disabled on iOS
+ # it is only used for interacting with OpenSSL which isn't useful there
+ elseif (CLR_CMAKE_TARGET_TVOS)
+ #add_subdirectory(System.Net.Security.Native) # no gssapi on tvOS, see https://developer.apple.com/documentation/gss
+ # System.Security.Cryptography.Native is intentionally disabled on tvOS
+ # it is only used for interacting with OpenSSL which isn't useful there
+ elseif (CLR_CMAKE_TARGET_ANDROID)
+ add_subdirectory(System.Security.Cryptography.Native.Android)
+ else ()
+ add_subdirectory(System.Globalization.Native)
+ add_subdirectory(System.Net.Security.Native)
+ add_subdirectory(System.Security.Cryptography.Native)
+ endif ()
+
+ if (CLR_CMAKE_TARGET_OSX OR CLR_CMAKE_TARGET_MACCATALYST OR CLR_CMAKE_TARGET_IOS OR CLR_CMAKE_TARGET_TVOS)
+ add_subdirectory(System.Security.Cryptography.Native.Apple)
+ endif ()
+endif ()
--- /dev/null
+project(System.IO.Compression.Native C)
+
+include(${CMAKE_CURRENT_LIST_DIR}/extra_libs.cmake)
+
+set(NATIVECOMPRESSION_SOURCES
+ pal_zlib.c
+)
+
+if (NOT CLR_CMAKE_TARGET_BROWSER)
+ #Include Brotli include files
+ include_directories("brotli/include")
+
+ set (NATIVECOMPRESSION_SOURCES
+ ${NATIVECOMPRESSION_SOURCES}
+ brotli/common/constants.c
+ brotli/common/context.c
+ brotli/common/dictionary.c
+ brotli/common/platform.c
+ brotli/common/transform.c
+ brotli/dec/bit_reader.c
+ brotli/dec/decode.c
+ brotli/dec/huffman.c
+ brotli/dec/state.c
+ brotli/enc/backward_references.c
+ brotli/enc/backward_references_hq.c
+ brotli/enc/bit_cost.c
+ brotli/enc/block_splitter.c
+ brotli/enc/brotli_bit_stream.c
+ brotli/enc/cluster.c
+ brotli/enc/command.c
+ brotli/enc/compress_fragment.c
+ brotli/enc/compress_fragment_two_pass.c
+ brotli/enc/dictionary_hash.c
+ brotli/enc/encode.c
+ brotli/enc/encoder_dict.c
+ brotli/enc/entropy_encode.c
+ brotli/enc/fast_log.c
+ brotli/enc/histogram.c
+ brotli/enc/literal_cost.c
+ brotli/enc/memory.c
+ brotli/enc/metablock.c
+ brotli/enc/static_dict.c
+ brotli/enc/utf8_util.c
+ entrypoints.c
+ )
+endif ()
+
+if (CLR_CMAKE_TARGET_UNIX OR CLR_CMAKE_TARGET_BROWSER)
+ set(NATIVE_LIBS_EXTRA)
+ append_extra_compression_libs(NATIVE_LIBS_EXTRA)
+
+ if (CLR_CMAKE_TARGET_BROWSER)
+ add_definitions(-s USE_ZLIB)
+ else ()
+ # Disable implicit fallthrough warning for Brotli
+ set(FLAGS -Wno-implicit-fallthrough)
+
+ # Delete this supression once brotli is upgraded to vNext (current latest v1.0.9
+ # does not contain upstream fix: https://github.com/google/brotli/commit/0a3944c)
+ set(FLAGS "${FLAGS} -Wno-vla-parameter")
+
+ set_source_files_properties(${NATIVECOMPRESSION_SOURCES} PROPERTIES COMPILE_FLAGS ${FLAGS})
+ endif ()
+
+ if (GEN_SHARED_LIB)
+ add_definitions(-DBROTLI_SHARED_COMPILATION)
+
+ add_library(System.IO.Compression.Native
+ SHARED
+ ${NATIVECOMPRESSION_SOURCES}
+ ${VERSION_FILE_PATH}
+ )
+
+ target_link_libraries(System.IO.Compression.Native
+ ${NATIVE_LIBS_EXTRA}
+ )
+
+ if (NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID)
+ set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/System.IO.Compression.Native_unixexports.src)
+ set(EXPORTS_FILE ${CMAKE_CURRENT_BINARY_DIR}/System.IO.Compression.Native.exports)
+ generate_exports_file(${DEF_SOURCES} ${EXPORTS_FILE})
+ set_exports_linker_option(${EXPORTS_FILE})
+
+ add_custom_target(System.IO.Compression.Native_exports DEPENDS ${EXPORTS_FILE})
+ add_dependencies(System.IO.Compression.Native System.IO.Compression.Native_exports)
+
+ set_property(TARGET System.IO.Compression.Native APPEND_STRING PROPERTY LINK_FLAGS ${EXPORTS_LINKER_OPTION})
+ set_property(TARGET System.IO.Compression.Native APPEND_STRING PROPERTY LINK_DEPENDS ${EXPORTS_FILE})
+
+ add_custom_command(TARGET System.IO.Compression.Native POST_BUILD
+ COMMENT "Verifying System.IO.Compression.Native entry points against entrypoints.c "
+ COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/../verify-entrypoints.sh
+ $<TARGET_FILE:System.IO.Compression.Native>
+ ${CMAKE_CURRENT_SOURCE_DIR}/entrypoints.c
+ ${CMAKE_NM}
+ VERBATIM
+ )
+ endif ()
+
+ install_with_stripped_symbols (System.IO.Compression.Native PROGRAMS .)
+ endif ()
+
+ add_library(System.IO.Compression.Native-Static
+ STATIC
+ ${NATIVECOMPRESSION_SOURCES}
+ )
+
+ set_target_properties(System.IO.Compression.Native-Static PROPERTIES OUTPUT_NAME System.IO.Compression.Native CLEAN_DIRECT_OUTPUT 1)
+else ()
+ if (GEN_SHARED_LIB)
+ include (GenerateExportHeader)
+ endif ()
+
+ if (CLR_CMAKE_HOST_ARCH_I386 OR CLR_CMAKE_HOST_ARCH_AMD64)
+ set(ZLIB_SOURCES
+ zlib-intel/adler32.c
+ zlib-intel/compress.c
+ zlib-intel/crc_folding.c
+ zlib-intel/crc32.c
+ zlib-intel/deflate_medium.c
+ zlib-intel/deflate_quick.c
+ zlib-intel/deflate.c
+ zlib-intel/inffast.c
+ zlib-intel/inflate.c
+ zlib-intel/inftrees.c
+ zlib-intel/match.c
+ zlib-intel/slide_sse.c
+ zlib-intel/trees.c
+ zlib-intel/x86.c
+ zlib-intel/zutil.c
+ )
+ else ()
+ set(ZLIB_SOURCES
+ zlib/adler32.c
+ zlib/compress.c
+ zlib/crc32.c
+ zlib/deflate.c
+ zlib/inffast.c
+ zlib/inflate.c
+ zlib/inftrees.c
+ zlib/trees.c
+ zlib/zutil.c
+ )
+ endif ()
+
+ set(NATIVECOMPRESSION_SOURCES ${ZLIB_SOURCES} ${NATIVECOMPRESSION_SOURCES})
+
+ if (GEN_SHARED_LIB)
+ add_library(System.IO.Compression.Native
+ SHARED
+ ${NATIVECOMPRESSION_SOURCES}
+ System.IO.Compression.Native.def
+ # This will add versioning to the library
+ ${VERSION_FILE_RC_PATH}
+ )
+ endif ()
+
+ if (NOT GEN_SHARED_LIB AND NOT CLR_CMAKE_TARGET_MACCATALYST AND NOT CLR_CMAKE_TARGET_IOS AND NOT CLR_CMAKE_TARGET_TVOS AND NOT CLR_CMAKE_TARGET_ANDROID AND NOT CLR_CMAKE_TARGET_BROWSER)
+ set(NATIVECOMPRESSION_SOURCES ${NATIVECOMPRESSION_SOURCES} entrypoints.c)
+ endif ()
+
+ add_library(System.IO.Compression.Native-Static
+ STATIC
+ ${NATIVECOMPRESSION_SOURCES}
+ )
+
+ # Allow specification of libraries that should be linked against
+ if (GEN_SHARED_LIB)
+ target_link_libraries(System.IO.Compression.Native ${__LinkLibraries})
+ endif ()
+ target_link_libraries(System.IO.Compression.Native-Static ${__LinkLibraries})
+
+ if (GEN_SHARED_LIB)
+ GENERATE_EXPORT_HEADER( System.IO.Compression.Native
+ BASE_NAME System.IO.Compression.Native
+ EXPORT_MACRO_NAME System.IO.Compression.Native_EXPORT
+ EXPORT_FILE_NAME System.IO.Compression.Native_Export.h
+ STATIC_DEFINE System.IO.Compression.Native_BUILT_AS_STATIC
+ )
+
+ install (TARGETS System.IO.Compression.Native DESTINATION .)
+ install (FILES $<TARGET_PDB_FILE:System.IO.Compression.Native> DESTINATION .)
+ endif ()
+endif ()
+
+install (TARGETS System.IO.Compression.Native-Static DESTINATION ${STATIC_LIB_DESTINATION} COMPONENT libs)
#include <minipal/entrypoints.h>
// Include System.IO.Compression.Native headers
-#include "../zlib/pal_zlib.h"
-#include "../brotli/include/brotli/decode.h"
-#include "../brotli/include/brotli/encode.h"
-#include "../brotli/include/brotli/port.h"
-#include "../brotli/include/brotli/types.h"
+#include "pal_zlib.h"
+#include "brotli/include/brotli/decode.h"
+#include "brotli/include/brotli/encode.h"
+#include "brotli/include/brotli/port.h"
+#include "brotli/include/brotli/types.h"
static const Entry s_compressionNative[] =
{
#ifdef _WIN32
#define c_static_assert(e) static_assert((e),"")
- #include "../../Windows/System.IO.Compression.Native/zlib/zlib.h"
+ #include "zlib/zlib.h"
#else
#include "pal_utilities.h"
#include <zlib.h>
set __ExtraCmakeParams="-DCMAKE_REPO_ROOT=%__cmakeRepoRoot%"
set __ExtraCmakeParams=%__ExtraCmakeParams% "-DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE%"
-if /i "%__BuildArch%" == "wasm" (
- set __sourceDir=%__sourceRootDir%\Unix
-) else (
- set __sourceDir=%__sourceRootDir%\Windows
-)
-
if [%__outConfig%] == [] set __outConfig=%__TargetOS%-%__BuildArch%-%CMAKE_BUILD_TYPE%
if %__CMakeBinDir% == "" (
:: Regenerate the VS solution
pushd "%__IntermediatesDir%"
-call "%__repoRoot%\eng\native\gen-buildsys.cmd" "%__sourceDir%" "%__IntermediatesDir%" %__VSVersion% %__BuildArch% %__ExtraCmakeParams%
+call "%__repoRoot%\eng\native\gen-buildsys.cmd" "%__sourceRootDir%" "%__IntermediatesDir%" %__VSVersion% %__BuildArch% %__ExtraCmakeParams%
if NOT [%errorlevel%] == [0] goto :Failure
popd
</PropertyGroup>
<ItemGroup>
- <ProjectReference Include="native-binplace.proj" />
+ <ProjectReference Include="$(LibrariesProjectRoot)native-binplace.proj" />
</ItemGroup>
<Target Name="BuildNativeUnix"
usage_list+=("-staticLibLink: Optional argument to statically link any native library.")
__scriptpath="$(cd "$(dirname "$0")"; pwd -P)"
-__nativeroot="$__scriptpath"/Unix
+__nativeroot="$__scriptpath"
__RepoRootDir="$(cd "$__scriptpath"/../../..; pwd -P)"
__artifactsDir="$__RepoRootDir/artifacts"