From 3d4e15b1f117ae42f7c93f61ff1fed73e6b229ff Mon Sep 17 00:00:00 2001 From: Ivan Diaz Sanchez Date: Fri, 4 Jun 2021 18:12:23 -0700 Subject: [PATCH 1/3] Port from 5.0: Fix Position Independent Code in CMake files (#28143) * CoreCLR PR26323 Port: Fix PIE options * Added missing PIE and RELRO compilation flags. --- configurecompiler.cmake | 15 ++++++++++++--- src/binder/CMakeLists.txt | 4 ---- src/classlibnative/bcltype/CMakeLists.txt | 4 ---- src/classlibnative/float/CMakeLists.txt | 4 ---- src/coreclr/hosts/osxbundlerun/CMakeLists.txt | 2 -- src/coreclr/hosts/unixcoreconsole/CMakeLists.txt | 2 -- src/coreclr/hosts/unixcorerun/CMakeLists.txt | 2 -- .../hosts/unixcoreruncommon/CMakeLists.txt | 2 -- .../System.Globalization.Native/CMakeLists.txt | 2 -- src/debug/createdump/CMakeLists.txt | 2 -- src/debug/daccess/CMakeLists.txt | 1 - src/debug/dbgutil/CMakeLists.txt | 4 ---- src/debug/debug-pal/CMakeLists.txt | 2 -- src/debug/di/CMakeLists.txt | 2 -- src/debug/ee/CMakeLists.txt | 4 ---- src/debug/ee/wks/CMakeLists.txt | 2 -- src/debug/ildbsymlib/CMakeLists.txt | 4 ---- src/debug/shim/CMakeLists.txt | 4 ---- src/dlls/dbgshim/CMakeLists.txt | 2 -- src/dlls/mscordac/CMakeLists.txt | 4 ---- src/dlls/mscorrc/CMakeLists.txt | 4 ---- src/gc/CMakeLists.txt | 1 - src/gc/unix/CMakeLists.txt | 1 - src/gcinfo/CMakeLists.txt | 4 ---- src/ilasm/CMakeLists.txt | 4 ---- src/ildasm/exe/CMakeLists.txt | 1 - src/inc/CMakeLists.txt | 1 - src/jit/dll/CMakeLists.txt | 2 -- src/md/ceefilegen/CMakeLists.txt | 4 ---- src/md/compiler/CMakeLists.txt | 4 ---- src/md/datasource/CMakeLists.txt | 4 ---- src/md/enc/CMakeLists.txt | 4 ---- src/md/hotdata/CMakeLists.txt | 4 ---- src/md/runtime/CMakeLists.txt | 4 ---- src/md/winmd/CMakeLists.txt | 4 ---- src/nativeresources/CMakeLists.txt | 2 -- src/pal/src/CMakeLists.txt | 2 -- .../eventprovider/lttngprovider/CMakeLists.txt | 2 -- .../pal_sxs/test1/CMakeLists.txt | 1 - src/palrt/CMakeLists.txt | 2 -- src/strongname/api/CMakeLists.txt | 4 ---- src/tools/crossgen/CMakeLists.txt | 1 - src/unwinder/CMakeLists.txt | 4 ---- src/utilcode/CMakeLists.txt | 4 ---- src/vm/CMakeLists.txt | 4 ---- tests/CMakeLists.txt | 4 ---- 46 files changed, 12 insertions(+), 132 deletions(-) diff --git a/configurecompiler.cmake b/configurecompiler.cmake index 22e3f1c0b972..8fab72d5e715 100644 --- a/configurecompiler.cmake +++ b/configurecompiler.cmake @@ -6,6 +6,9 @@ set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) +# All code we build should be compiled as position independent. +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + set(CLR_DEFINES_DEBUG_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1) set(CLR_DEFINES_CHECKED_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1) set(CLR_DEFINES_RELEASE_INIT NDEBUG URTBLDENV_FRIENDLY=Retail) @@ -322,10 +325,9 @@ elseif (CLR_CMAKE_PLATFORM_UNIX) endif () # -fdata-sections -ffunction-sections: each function has own section instead of one per .o file (needed for --gc-sections) - # -fPIC: enable Position Independent Code normally just for shared libraries but required when linking with address sanitizer # -O1: optimization level used instead of -O0 to avoid compile error "invalid operand for inline asm constraint" - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CLR_SANITIZE_CXX_FLAGS} -fdata-sections -ffunction-sections -fPIC -O1") - set(CMAKE_CXX_FLAGS_CHECKED "${CMAKE_CXX_FLAGS_CHECKED} ${CLR_SANITIZE_CXX_FLAGS} -fdata-sections -ffunction-sections -fPIC -O1") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CLR_SANITIZE_CXX_FLAGS} -fdata-sections -ffunction-sections -O1") + set(CMAKE_CXX_FLAGS_CHECKED "${CMAKE_CXX_FLAGS_CHECKED} ${CLR_SANITIZE_CXX_FLAGS} -fdata-sections -ffunction-sections -O1") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${CLR_SANITIZE_LINK_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS_CHECKED "${CMAKE_EXE_LINKER_FLAGS_CHECKED} ${CLR_SANITIZE_LINK_FLAGS}") @@ -335,6 +337,13 @@ elseif (CLR_CMAKE_PLATFORM_UNIX) set(CMAKE_SHARED_LINKER_FLAGS_CHECKED "${CMAKE_SHARED_LINKER_FLAGS_CHECKED} ${CLR_SANITIZE_LINK_FLAGS} -Wl,--gc-sections") endif () endif(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED) + + # This linker option causes executables we build to be marked as containing + # position independent code. + # It is necessary to make ASLR work for executables. + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--build-id=sha1 -Wl,-z,relro,-z,now") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie -Wl,-z,relro,-z,now") + endif(WIN32) # CLR_ADDITIONAL_LINKER_FLAGS - used for passing additional arguments to linker diff --git a/src/binder/CMakeLists.txt b/src/binder/CMakeLists.txt index d92bec6c99d0..07f6c15bffab 100644 --- a/src/binder/CMakeLists.txt +++ b/src/binder/CMakeLists.txt @@ -91,9 +91,5 @@ endif(WIN32) convert_to_absolute_path(BINDER_SOURCES ${BINDER_SOURCES}) convert_to_absolute_path(BINDER_CROSSGEN_SOURCES ${BINDER_CROSSGEN_SOURCES}) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_subdirectory(v3binder) add_subdirectory(v3binder_crossgen) diff --git a/src/classlibnative/bcltype/CMakeLists.txt b/src/classlibnative/bcltype/CMakeLists.txt index 843d7e8b6805..67d1ad2bab58 100644 --- a/src/classlibnative/bcltype/CMakeLists.txt +++ b/src/classlibnative/bcltype/CMakeLists.txt @@ -11,10 +11,6 @@ set(BCLTYPE_SOURCES variant.cpp ) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_library_clr(bcltype STATIC ${BCLTYPE_SOURCES} diff --git a/src/classlibnative/float/CMakeLists.txt b/src/classlibnative/float/CMakeLists.txt index bf173fe6587d..44d40c925921 100644 --- a/src/classlibnative/float/CMakeLists.txt +++ b/src/classlibnative/float/CMakeLists.txt @@ -7,10 +7,6 @@ set(FLOAT_SOURCES floatsingle.cpp ) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_library_clr(comfloat_wks STATIC ${FLOAT_SOURCES} diff --git a/src/coreclr/hosts/osxbundlerun/CMakeLists.txt b/src/coreclr/hosts/osxbundlerun/CMakeLists.txt index 8af173f97078..802c5899ad86 100644 --- a/src/coreclr/hosts/osxbundlerun/CMakeLists.txt +++ b/src/coreclr/hosts/osxbundlerun/CMakeLists.txt @@ -2,8 +2,6 @@ project(osxbundlerun) include_directories(../unixcoreruncommon) -add_compile_options(-fPIE) - set(CORERUN_SOURCES osxbundlerun.cpp ) diff --git a/src/coreclr/hosts/unixcoreconsole/CMakeLists.txt b/src/coreclr/hosts/unixcoreconsole/CMakeLists.txt index 2daeaabfa371..6e337b662ba4 100644 --- a/src/coreclr/hosts/unixcoreconsole/CMakeLists.txt +++ b/src/coreclr/hosts/unixcoreconsole/CMakeLists.txt @@ -2,8 +2,6 @@ project(unixcoreconsole) include_directories(../unixcoreruncommon) -add_compile_options(-fPIE) - set(CORECONSOLE_SOURCES coreconsole.cpp ) diff --git a/src/coreclr/hosts/unixcorerun/CMakeLists.txt b/src/coreclr/hosts/unixcorerun/CMakeLists.txt index 07beaae1dfc3..5ee10b871ca1 100644 --- a/src/coreclr/hosts/unixcorerun/CMakeLists.txt +++ b/src/coreclr/hosts/unixcorerun/CMakeLists.txt @@ -2,8 +2,6 @@ project(unixcorerun) include_directories(../unixcoreruncommon) -add_compile_options(-fPIE) - set(CORERUN_SOURCES corerun.cpp ) diff --git a/src/coreclr/hosts/unixcoreruncommon/CMakeLists.txt b/src/coreclr/hosts/unixcoreruncommon/CMakeLists.txt index 93a5bbf9ff0f..c859b0a31273 100644 --- a/src/coreclr/hosts/unixcoreruncommon/CMakeLists.txt +++ b/src/coreclr/hosts/unixcoreruncommon/CMakeLists.txt @@ -1,7 +1,5 @@ project(unixcoreruncommon) -add_compile_options(-fPIC) - set(CMAKE_INCLUDE_CURRENT_DIR ON) include(configure.cmake) diff --git a/src/corefx/System.Globalization.Native/CMakeLists.txt b/src/corefx/System.Globalization.Native/CMakeLists.txt index 454d69f53d86..ae3fd9982127 100644 --- a/src/corefx/System.Globalization.Native/CMakeLists.txt +++ b/src/corefx/System.Globalization.Native/CMakeLists.txt @@ -37,8 +37,6 @@ endif() include(configure.cmake) -add_compile_options(-fPIC) - set(NATIVEGLOBALIZATION_SOURCES pal_calendarData.c pal_casing.c diff --git a/src/debug/createdump/CMakeLists.txt b/src/debug/createdump/CMakeLists.txt index b44016c4d022..b7b09fd2d526 100644 --- a/src/debug/createdump/CMakeLists.txt +++ b/src/debug/createdump/CMakeLists.txt @@ -20,8 +20,6 @@ include_directories(BEFORE ${VM_DIR}) add_definitions(-DPAL_STDCPP_COMPAT) -add_compile_options(-fPIE) - set(CREATEDUMP_SOURCES createdump.cpp crashinfo.cpp diff --git a/src/debug/daccess/CMakeLists.txt b/src/debug/daccess/CMakeLists.txt index 0e8ccfe67f0e..241a629948de 100644 --- a/src/debug/daccess/CMakeLists.txt +++ b/src/debug/daccess/CMakeLists.txt @@ -11,7 +11,6 @@ include_directories(${CLR_DIR}/src/gcdump) if(CLR_CMAKE_PLATFORM_UNIX) include_directories(${GENERATED_INCLUDE_DIR}) - add_compile_options(-fPIC) endif(CLR_CMAKE_PLATFORM_UNIX) set(DACCESS_SOURCES diff --git a/src/debug/dbgutil/CMakeLists.txt b/src/debug/dbgutil/CMakeLists.txt index 1c0d49a24ec6..6c43b5ca759c 100644 --- a/src/debug/dbgutil/CMakeLists.txt +++ b/src/debug/dbgutil/CMakeLists.txt @@ -9,8 +9,4 @@ set(DBGUTIL_SOURCES dbgutil.cpp ) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_library_clr(dbgutil STATIC ${DBGUTIL_SOURCES}) diff --git a/src/debug/debug-pal/CMakeLists.txt b/src/debug/debug-pal/CMakeLists.txt index 59ed63ea4fae..c10d7d7d56e6 100644 --- a/src/debug/debug-pal/CMakeLists.txt +++ b/src/debug/debug-pal/CMakeLists.txt @@ -16,8 +16,6 @@ if(WIN32) endif(WIN32) if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) - add_definitions(-DFEATURE_PAL) add_definitions(-DPAL_IMPLEMENTATION) add_definitions(-D_POSIX_C_SOURCE=200809L) diff --git a/src/debug/di/CMakeLists.txt b/src/debug/di/CMakeLists.txt index f0a9d41ec93d..2cdb084f2885 100644 --- a/src/debug/di/CMakeLists.txt +++ b/src/debug/di/CMakeLists.txt @@ -89,8 +89,6 @@ if(WIN32) set(CORDBDI_SOURCES_ASM_FILE ${CMAKE_CURRENT_BINARY_DIR}/${name}.obj) endif() elseif(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) - if(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_ARM) set(CORDBDI_SOURCES_ASM_FILE ${ARCH_SOURCES_DIR}/floatconversion.S diff --git a/src/debug/ee/CMakeLists.txt b/src/debug/ee/CMakeLists.txt index 11a670285b6f..383ab24cfbdc 100644 --- a/src/debug/ee/CMakeLists.txt +++ b/src/debug/ee/CMakeLists.txt @@ -6,10 +6,6 @@ include_directories(BEFORE ${VM_DIR}) include_directories(BEFORE ${VM_DIR}/${ARCH_SOURCES_DIR}) include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - set(CORDBEE_SOURCES_DAC_AND_WKS controller.cpp debugger.cpp diff --git a/src/debug/ee/wks/CMakeLists.txt b/src/debug/ee/wks/CMakeLists.txt index c6a4bccb0845..6a1a47c7b84c 100644 --- a/src/debug/ee/wks/CMakeLists.txt +++ b/src/debug/ee/wks/CMakeLists.txt @@ -54,8 +54,6 @@ if (WIN32) else () - add_compile_options(-fPIC) - if(CLR_CMAKE_PLATFORM_ARCH_AMD64 OR CLR_CMAKE_PLATFORM_ARCH_ARM OR CLR_CMAKE_PLATFORM_ARCH_ARM64 OR CLR_CMAKE_PLATFORM_ARCH_I386) add_library_clr(cordbee_wks ${CORDBEE_SOURCES_WKS} ../${ARCH_SOURCES_DIR}/dbghelpers.S) else() diff --git a/src/debug/ildbsymlib/CMakeLists.txt b/src/debug/ildbsymlib/CMakeLists.txt index 1bd1096ed6b2..cf72a0e8e9d9 100644 --- a/src/debug/ildbsymlib/CMakeLists.txt +++ b/src/debug/ildbsymlib/CMakeLists.txt @@ -10,9 +10,5 @@ set( ILDBSYMLIB_SOURCES symwrite.cpp ) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_library_clr(ildbsymlib ${ILDBSYMLIB_SOURCES}) diff --git a/src/debug/shim/CMakeLists.txt b/src/debug/shim/CMakeLists.txt index 8720eb7df2d0..28b7f624c559 100644 --- a/src/debug/shim/CMakeLists.txt +++ b/src/debug/shim/CMakeLists.txt @@ -4,10 +4,6 @@ if(WIN32) add_definitions(-DHOST_IS_WINDOWS_OS) endif(WIN32) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - set(DEBUGSHIM_SOURCES debugshim.cpp ) diff --git a/src/dlls/dbgshim/CMakeLists.txt b/src/dlls/dbgshim/CMakeLists.txt index 7e6ae61de111..ca4556bd0323 100644 --- a/src/dlls/dbgshim/CMakeLists.txt +++ b/src/dlls/dbgshim/CMakeLists.txt @@ -41,8 +41,6 @@ endif(CLR_CMAKE_PLATFORM_DARWIN) add_library_clr(dbgshim SHARED ${DBGSHIM_SOURCES}) if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) - add_custom_target(dbgshim_exports DEPENDS ${EXPORTS_FILE}) add_dependencies(dbgshim dbgshim_exports) diff --git a/src/dlls/mscordac/CMakeLists.txt b/src/dlls/mscordac/CMakeLists.txt index e065eba023f5..df8d615e0a83 100644 --- a/src/dlls/mscordac/CMakeLists.txt +++ b/src/dlls/mscordac/CMakeLists.txt @@ -1,10 +1,6 @@ include(${CLR_DIR}/dac.cmake) add_definitions(-DFEATURE_NO_HOST) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - set(CLR_DAC_SOURCES ) diff --git a/src/dlls/mscorrc/CMakeLists.txt b/src/dlls/mscorrc/CMakeLists.txt index 8f67988a23b1..366ace463105 100644 --- a/src/dlls/mscorrc/CMakeLists.txt +++ b/src/dlls/mscorrc/CMakeLists.txt @@ -9,10 +9,6 @@ if(WIN32) string(REPLACE "/guard:cf" "" CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS}) endif(WIN32) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_subdirectory(full) # Only add the small version of the resources if the platform is Windows. diff --git a/src/gc/CMakeLists.txt b/src/gc/CMakeLists.txt index ab9f3a0baddc..17a774ceb5c2 100644 --- a/src/gc/CMakeLists.txt +++ b/src/gc/CMakeLists.txt @@ -97,7 +97,6 @@ target_link_libraries(clrgc ${GC_LINK_LIBRARIES}) install_clr(clrgc) if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) # dprintf causes many warnings (https://github.com/dotnet/coreclr/issues/13367) add_compile_options(-Wno-format) endif(CLR_CMAKE_PLATFORM_UNIX) diff --git a/src/gc/unix/CMakeLists.txt b/src/gc/unix/CMakeLists.txt index fbb94fd5130c..7c6e627c739f 100644 --- a/src/gc/unix/CMakeLists.txt +++ b/src/gc/unix/CMakeLists.txt @@ -1,5 +1,4 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) -add_compile_options(-fPIC) include_directories("../env") include(configure.cmake) diff --git a/src/gcinfo/CMakeLists.txt b/src/gcinfo/CMakeLists.txt index 79c4f486da28..c9c60db89e5f 100644 --- a/src/gcinfo/CMakeLists.txt +++ b/src/gcinfo/CMakeLists.txt @@ -16,10 +16,6 @@ endif(CLR_CMAKE_TARGET_ARCH_I386) convert_to_absolute_path(GCINFO_SOURCES ${GCINFO_SOURCES}) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_subdirectory(lib) add_subdirectory(crossgen) diff --git a/src/ilasm/CMakeLists.txt b/src/ilasm/CMakeLists.txt index 6117030dcc39..46850fabf2c2 100644 --- a/src/ilasm/CMakeLists.txt +++ b/src/ilasm/CMakeLists.txt @@ -10,10 +10,6 @@ add_definitions(-DFEATURE_CORECLR) include_directories(.) include_directories(../ildasm/unixcoreclrloader) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIE) -endif(CLR_CMAKE_PLATFORM_UNIX) - set(ILASM_SOURCES assem.cpp writer.cpp diff --git a/src/ildasm/exe/CMakeLists.txt b/src/ildasm/exe/CMakeLists.txt index 196f2395b7c3..a8ca1df3b089 100644 --- a/src/ildasm/exe/CMakeLists.txt +++ b/src/ildasm/exe/CMakeLists.txt @@ -10,7 +10,6 @@ add_definitions(-DFEATURE_CORECLR) include_directories(..) if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIE) include_directories(../unixcoreclrloader) build_resources(${CMAKE_CURRENT_SOURCE_DIR}/../dasm.rc dasm_rc TARGET_CPP_FILE) diff --git a/src/inc/CMakeLists.txt b/src/inc/CMakeLists.txt index c38d59587af2..a6692ee4b23b 100644 --- a/src/inc/CMakeLists.txt +++ b/src/inc/CMakeLists.txt @@ -62,7 +62,6 @@ foreach(IDL_SOURCE IN LISTS CORGUIDS_IDL_SOURCES) list(APPEND CORGUIDS_SOURCES ${C_SOURCE}) endforeach(IDL_SOURCE) -add_compile_options(-fPIC) endif(WIN32) if(FEATURE_JIT_PITCHING) diff --git a/src/jit/dll/CMakeLists.txt b/src/jit/dll/CMakeLists.txt index 9e930de69d24..624e3579894d 100644 --- a/src/jit/dll/CMakeLists.txt +++ b/src/jit/dll/CMakeLists.txt @@ -3,8 +3,6 @@ project(ClrJit) set_source_files_properties(${JIT_EXPORTS_FILE} PROPERTIES GENERATED TRUE) if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) - add_library_clr(clrjit_static STATIC ${SHARED_LIB_SOURCES} diff --git a/src/md/ceefilegen/CMakeLists.txt b/src/md/ceefilegen/CMakeLists.txt index 7170facc6fb4..57d4cb6338cb 100644 --- a/src/md/ceefilegen/CMakeLists.txt +++ b/src/md/ceefilegen/CMakeLists.txt @@ -21,10 +21,6 @@ set(CEEFILEGEN_HEADERS ../../inc/utilcode.h ) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_precompiled_header(stdafx.h stdafx.cpp CEEFILEGEN_SOURCES) if (WIN32) diff --git a/src/md/compiler/CMakeLists.txt b/src/md/compiler/CMakeLists.txt index 5000f1b6fc72..260731d4a343 100644 --- a/src/md/compiler/CMakeLists.txt +++ b/src/md/compiler/CMakeLists.txt @@ -51,10 +51,6 @@ set(MDCOMPILER_HEADERS convert_to_absolute_path(MDCOMPILER_SOURCES ${MDCOMPILER_SOURCES}) convert_to_absolute_path(MDCOMPILER_HEADERS ${MDCOMPILER_HEADERS}) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_subdirectory(dac) add_subdirectory(wks) add_subdirectory(dbi) diff --git a/src/md/datasource/CMakeLists.txt b/src/md/datasource/CMakeLists.txt index 489ef343aa3f..3aaa00afa21b 100644 --- a/src/md/datasource/CMakeLists.txt +++ b/src/md/datasource/CMakeLists.txt @@ -1,7 +1,3 @@ -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - set(MDDATASOURCE_SOURCES api.cpp datatargetreader.cpp diff --git a/src/md/enc/CMakeLists.txt b/src/md/enc/CMakeLists.txt index 32d640a09a20..2f1398d6f19f 100644 --- a/src/md/enc/CMakeLists.txt +++ b/src/md/enc/CMakeLists.txt @@ -44,10 +44,6 @@ endif(WIN32) convert_to_absolute_path(MDRUNTIMERW_HEADERS ${MDRUNTIMERW_HEADERS}) convert_to_absolute_path(MDRUNTIMERW_SOURCES ${MDRUNTIMERW_SOURCES}) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_subdirectory(dac) add_subdirectory(wks) add_subdirectory(dbi) diff --git a/src/md/hotdata/CMakeLists.txt b/src/md/hotdata/CMakeLists.txt index 600da6a2bef9..92a16cc9f2ae 100644 --- a/src/md/hotdata/CMakeLists.txt +++ b/src/md/hotdata/CMakeLists.txt @@ -25,10 +25,6 @@ set(MDHOTDATA_HEADERS convert_to_absolute_path(MDHOTDATA_HEADERS ${MDHOTDATA_HEADERS}) convert_to_absolute_path(MDHOTDATA_SOURCES ${MDHOTDATA_SOURCES}) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_subdirectory(dac) add_subdirectory(full) add_subdirectory(crossgen) diff --git a/src/md/runtime/CMakeLists.txt b/src/md/runtime/CMakeLists.txt index 1111bdb0fec9..fc817b1f0d71 100644 --- a/src/md/runtime/CMakeLists.txt +++ b/src/md/runtime/CMakeLists.txt @@ -41,10 +41,6 @@ set(MDRUNTIME_HEADERS convert_to_absolute_path(MDRUNTIME_HEADERS ${MDRUNTIME_HEADERS}) convert_to_absolute_path(MDRUNTIME_SOURCES ${MDRUNTIME_SOURCES}) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_subdirectory(dac) add_subdirectory(wks) add_subdirectory(dbi) diff --git a/src/md/winmd/CMakeLists.txt b/src/md/winmd/CMakeLists.txt index 31dbbbfc4fd9..567a9758f136 100644 --- a/src/md/winmd/CMakeLists.txt +++ b/src/md/winmd/CMakeLists.txt @@ -20,10 +20,6 @@ set(MDWINMD_HEADERS convert_to_absolute_path(MDWINMD_HEADERS ${MDWINMD_HEADERS}) convert_to_absolute_path(MDWINMD_SOURCES ${MDWINMD_SOURCES}) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_subdirectory(dac) add_subdirectory(wks) if(WIN32) diff --git a/src/nativeresources/CMakeLists.txt b/src/nativeresources/CMakeLists.txt index e73a0d21292b..947a91438970 100644 --- a/src/nativeresources/CMakeLists.txt +++ b/src/nativeresources/CMakeLists.txt @@ -1,7 +1,5 @@ project(nativeresourcestring) -add_compile_options(-fPIC) - add_library_clr(nativeresourcestring STATIC resourcestring.cpp diff --git a/src/pal/src/CMakeLists.txt b/src/pal/src/CMakeLists.txt index 3e2cee898ccb..84a371ddf95a 100644 --- a/src/pal/src/CMakeLists.txt +++ b/src/pal/src/CMakeLists.txt @@ -9,8 +9,6 @@ if(NOT DEFINED ENV{ROOTFS_DIR}) include_directories(SYSTEM /usr/local/include) endif() -add_compile_options(-fPIC) - if(NOT CLR_CMAKE_USE_SYSTEM_LIBUNWIND) include_directories(libunwind/include) include_directories(libunwind/include/tdep) diff --git a/src/pal/src/eventprovider/lttngprovider/CMakeLists.txt b/src/pal/src/eventprovider/lttngprovider/CMakeLists.txt index b5bf8e855115..1f49aef64e0a 100644 --- a/src/pal/src/eventprovider/lttngprovider/CMakeLists.txt +++ b/src/pal/src/eventprovider/lttngprovider/CMakeLists.txt @@ -46,8 +46,6 @@ add_library(eventprovider eventproviderhelpers.cpp ) -add_compile_options(-fPIC) - add_library(coreclrtraceptprovider SHARED ${TRACEPOINT_PROVIDER_SOURCES} diff --git a/src/pal/tests/palsuite/exception_handling/pal_sxs/test1/CMakeLists.txt b/src/pal/tests/palsuite/exception_handling/pal_sxs/test1/CMakeLists.txt index 4a3abc2d640e..685ac2ed4f0b 100644 --- a/src/pal/tests/palsuite/exception_handling/pal_sxs/test1/CMakeLists.txt +++ b/src/pal/tests/palsuite/exception_handling/pal_sxs/test1/CMakeLists.txt @@ -3,7 +3,6 @@ cmake_minimum_required(VERSION 2.8.12.2) set(CMAKE_INCLUDE_CURRENT_DIR ON) if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) add_definitions(-DFEATURE_ENABLE_HARDWARE_EXCEPTIONS) endif(CLR_CMAKE_PLATFORM_UNIX) diff --git a/src/palrt/CMakeLists.txt b/src/palrt/CMakeLists.txt index d9f7b94d7033..77fdc67a52d7 100644 --- a/src/palrt/CMakeLists.txt +++ b/src/palrt/CMakeLists.txt @@ -12,8 +12,6 @@ set(PALRT_SOURCES variant.cpp ) -add_compile_options(-fPIC) - add_library_clr(palrt STATIC ${PALRT_SOURCES} diff --git a/src/strongname/api/CMakeLists.txt b/src/strongname/api/CMakeLists.txt index 4efcdb953cd7..6e596d8ea9bc 100644 --- a/src/strongname/api/CMakeLists.txt +++ b/src/strongname/api/CMakeLists.txt @@ -17,10 +17,6 @@ set(STRONGNAME_SOURCES convert_to_absolute_path(STRONGNAME_SOURCES ${STRONGNAME_SOURCES}) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_subdirectory(dac) add_subdirectory(wks) add_subdirectory(crossgen) diff --git a/src/tools/crossgen/CMakeLists.txt b/src/tools/crossgen/CMakeLists.txt index 410f82d929ee..ab5b4eda5397 100644 --- a/src/tools/crossgen/CMakeLists.txt +++ b/src/tools/crossgen/CMakeLists.txt @@ -14,7 +14,6 @@ if(WIN32) endif() if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIE) add_definitions(-DNO_NGENPDB) endif(CLR_CMAKE_PLATFORM_UNIX) diff --git a/src/unwinder/CMakeLists.txt b/src/unwinder/CMakeLists.txt index 5cd7bae33797..9a5d7829c86d 100644 --- a/src/unwinder/CMakeLists.txt +++ b/src/unwinder/CMakeLists.txt @@ -19,10 +19,6 @@ list(APPEND UNWINDER_SOURCES convert_to_absolute_path(UNWINDER_SOURCES ${UNWINDER_SOURCES}) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - if(CLR_CMAKE_PLATFORM_UNIX) add_subdirectory(wks) endif(CLR_CMAKE_PLATFORM_UNIX) diff --git a/src/utilcode/CMakeLists.txt b/src/utilcode/CMakeLists.txt index 4e5f73faf1e8..785d1d7e92da 100644 --- a/src/utilcode/CMakeLists.txt +++ b/src/utilcode/CMakeLists.txt @@ -108,10 +108,6 @@ convert_to_absolute_path(UTILCODE_DAC_SOURCES ${UTILCODE_DAC_SOURCES}) convert_to_absolute_path(UTILCODE_CROSSGEN_SOURCES ${UTILCODE_CROSSGEN_SOURCES}) convert_to_absolute_path(UTILCODE_STATICNOHOST_SOURCES ${UTILCODE_STATICNOHOST_SOURCES}) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - add_subdirectory(dac) add_subdirectory(dyncrt) add_subdirectory(staticnohost) diff --git a/src/vm/CMakeLists.txt b/src/vm/CMakeLists.txt index 3a556aff2f3c..bdf1f237dec1 100644 --- a/src/vm/CMakeLists.txt +++ b/src/vm/CMakeLists.txt @@ -21,10 +21,6 @@ else() endif(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED) endif(CMAKE_CONFIGURATION_TYPES) -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - if(FEATURE_GDBJIT) set(VM_SOURCES_GDBJIT gdbjit.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 665b3687461a..a55602917eeb 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -32,10 +32,6 @@ if (WIN32) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") endif() -if(CLR_CMAKE_PLATFORM_UNIX) - add_compile_options(-fPIC) -endif(CLR_CMAKE_PLATFORM_UNIX) - MACRO(SUBDIRLIST result curdir) FILE(GLOB children RELATIVE ${curdir} ${curdir}/*) SET(dirlist "") From 53cff17cfb8fb231c6b539c62793f92db1ff7ae3 Mon Sep 17 00:00:00 2001 From: Santiago Fernandez Madero Date: Tue, 15 Jun 2021 15:57:34 -0700 Subject: [PATCH 2/3] Fix System.Globalization.Native build on Big Sur (#28181) * Fix System.Globalization.Native build on Big Sur * Fix build * Add flags for Linux --- configurecompiler.cmake | 7 ++-- .../CMakeLists.txt | 8 +---- .../configure.cmake | 35 ++++++++++--------- 3 files changed, 22 insertions(+), 28 deletions(-) diff --git a/configurecompiler.cmake b/configurecompiler.cmake index 8fab72d5e715..41cab76978e8 100644 --- a/configurecompiler.cmake +++ b/configurecompiler.cmake @@ -341,8 +341,7 @@ elseif (CLR_CMAKE_PLATFORM_UNIX) # This linker option causes executables we build to be marked as containing # position independent code. # It is necessary to make ASLR work for executables. - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--build-id=sha1 -Wl,-z,relro,-z,now") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie -Wl,-z,relro,-z,now") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") endif(WIN32) @@ -359,8 +358,8 @@ endif(CLR_CMAKE_PLATFORM_UNIX) if(CLR_CMAKE_PLATFORM_LINUX) set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,--noexecstack") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--build-id=sha1") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id=sha1") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--build-id=sha1 -Wl,-z,relro,-z,now") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id=sha1 -Wl,-z,relro,-z,now") endif(CLR_CMAKE_PLATFORM_LINUX) if(CLR_CMAKE_PLATFORM_FREEBSD) set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -Wa,--noexecstack") diff --git a/src/corefx/System.Globalization.Native/CMakeLists.txt b/src/corefx/System.Globalization.Native/CMakeLists.txt index ae3fd9982127..038de6de554d 100644 --- a/src/corefx/System.Globalization.Native/CMakeLists.txt +++ b/src/corefx/System.Globalization.Native/CMakeLists.txt @@ -26,13 +26,7 @@ if (NOT CLR_CMAKE_PLATFORM_DARWIN) return() endif() else() - find_library(ICUCORE icucore) - if(ICUI18N STREQUAL ICUCORE-NOTFOUND) - message(FATAL_ERROR "Cannot find libicucore, skipping build for System.Globalization.Native. .NET globalization is not expected to function.") - return() - endif() - - add_definitions(-DOSX_ICU_LIBRARY_PATH=\"/usr/lib/libicucore.dylib\") + add_definitions(-DOSX_ICU_LIBRARY_PATH="/usr/lib/libicucore.dylib") endif() include(configure.cmake) diff --git a/src/corefx/System.Globalization.Native/configure.cmake b/src/corefx/System.Globalization.Native/configure.cmake index 6fd506dbe25a..4086adc5dd93 100644 --- a/src/corefx/System.Globalization.Native/configure.cmake +++ b/src/corefx/System.Globalization.Native/configure.cmake @@ -1,26 +1,27 @@ -include(CheckCSourceCompiles) -include(CheckSymbolExists) +if (CLR_CMAKE_PLATFORM_DARWIN) + set(HAVE_SET_MAX_VARIABLE 1) + set(HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS 1) +else() + include(CheckCSourceCompiles) + include(CheckSymbolExists) -set(CMAKE_REQUIRED_INCLUDES ${UTYPES_H} ${ICU_HOMEBREW_INC_PATH}) + set(CMAKE_REQUIRED_INCLUDES ${UTYPES_H} ${ICU_HOMEBREW_INC_PATH}) -CHECK_C_SOURCE_COMPILES(" - #include - int main(void) { enum UDateFormatSymbolType e = UDAT_STANDALONE_SHORTER_WEEKDAYS; } -" HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS) + CHECK_C_SOURCE_COMPILES(" + #include + int main(void) { enum UDateFormatSymbolType e = UDAT_STANDALONE_SHORTER_WEEKDAYS; } + " HAVE_UDAT_STANDALONE_SHORTER_WEEKDAYS) -if(NOT CLR_CMAKE_PLATFORM_DARWIN) set(CMAKE_REQUIRED_LIBRARIES ${ICUUC} ${ICUI18N}) -else() - set(CMAKE_REQUIRED_LIBRARIES ${ICUCORE}) -endif() -check_symbol_exists( - ucol_setMaxVariable - "unicode/ucol.h" - HAVE_SET_MAX_VARIABLE) + check_symbol_exists( + ucol_setMaxVariable + "unicode/ucol.h" + HAVE_SET_MAX_VARIABLE) -unset(CMAKE_REQUIRED_LIBRARIES) -unset(CMAKE_REQUIRED_INCLUDES) + unset(CMAKE_REQUIRED_LIBRARIES) + unset(CMAKE_REQUIRED_INCLUDES) +endif() configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in From 711e612d04f3f8290b9febebdad5b679c9586de9 Mon Sep 17 00:00:00 2001 From: John Salem Date: Tue, 15 Jun 2021 16:23:46 -0700 Subject: [PATCH 3/3] [release/3.1] Handle Counter Polling Interval of 0 (#28180) * Backport dotnet/runtime#53836 * Fix test build * update test --- .../Diagnostics/Tracing/CounterGroup.cs | 7 +- tests/src/tracing/eventcounter/gh53564.cs | 109 ++++++++++++++++++ tests/src/tracing/eventcounter/gh53564.csproj | 31 +++++ 3 files changed, 143 insertions(+), 4 deletions(-) create mode 100644 tests/src/tracing/eventcounter/gh53564.cs create mode 100644 tests/src/tracing/eventcounter/gh53564.csproj diff --git a/src/System.Private.CoreLib/shared/System/Diagnostics/Tracing/CounterGroup.cs b/src/System.Private.CoreLib/shared/System/Diagnostics/Tracing/CounterGroup.cs index bbfba16a7f2c..908a59f1f21b 100644 --- a/src/System.Private.CoreLib/shared/System/Diagnostics/Tracing/CounterGroup.cs +++ b/src/System.Private.CoreLib/shared/System/Diagnostics/Tracing/CounterGroup.cs @@ -240,10 +240,9 @@ private void OnTimer() lock (s_counterGroupLock) { _timeStampSinceCollectionStarted = now; - do - { - _nextPollingTimeStamp += new TimeSpan(0, 0, 0, 0, _pollingIntervalInMilliseconds); - } while (_nextPollingTimeStamp <= now); + TimeSpan delta = now - _nextPollingTimeStamp; + if (delta > TimeSpan.Zero && _pollingIntervalInMilliseconds > 0) + _nextPollingTimeStamp += TimeSpan.FromMilliseconds(_pollingIntervalInMilliseconds * Math.Ceiling(delta.TotalMilliseconds / _pollingIntervalInMilliseconds)); } } } diff --git a/tests/src/tracing/eventcounter/gh53564.cs b/tests/src/tracing/eventcounter/gh53564.cs new file mode 100644 index 000000000000..4b2b5907abbe --- /dev/null +++ b/tests/src/tracing/eventcounter/gh53564.cs @@ -0,0 +1,109 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#if USE_MDT_EVENTSOURCE +using Microsoft.Diagnostics.Tracing; +#else +using System.Diagnostics.Tracing; +#endif +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using System.Diagnostics; + +namespace gh53564Tests +{ + public class RuntimeCounterListener : EventListener + { + public RuntimeCounterListener(){} + + private DateTime? setToZeroTimestamp = null; + private DateTime? mostRecentTimestamp = null; + private ManualResetEvent setToZero = new ManualResetEvent(initialState: false); + public ManualResetEvent ReadyToVerify { get; } = new ManualResetEvent(initialState: false); + + protected override void OnEventSourceCreated(EventSource source) + { + if (source.Name.Equals("System.Runtime")) + { + Dictionary refreshInterval = new Dictionary(); + + Console.WriteLine($"[{DateTime.UtcNow:hh:mm:ss.fff}] OnEventSourceCreated :: Setting interval to 1"); + // first set interval to 1 seconds + refreshInterval["EventCounterIntervalSec"] = "1"; + EnableEvents(source, EventLevel.Informational, (EventKeywords)(-1), refreshInterval); + + // wait a moment to get some events + Thread.Sleep(TimeSpan.FromSeconds(3)); + + // then set interval to 0 + Console.WriteLine($"[{DateTime.UtcNow:hh:mm:ss.fff}] OnEventSourceCreated :: Setting interval to 0"); + refreshInterval["EventCounterIntervalSec"] = "0"; + EnableEvents(source, EventLevel.Informational, (EventKeywords)(-1), refreshInterval); + setToZeroTimestamp = DateTime.UtcNow + TimeSpan.FromSeconds(1); // Stash timestamp 1 second after setting to 0 + setToZero.Set(); + + // then attempt to set interval back to 1 + Thread.Sleep(TimeSpan.FromSeconds(3)); + Console.WriteLine($"[{DateTime.UtcNow:hh:mm:ss.fff}] OnEventSourceCreated :: Setting interval to 1"); + refreshInterval["EventCounterIntervalSec"] = "1"; + EnableEvents(source, EventLevel.Informational, (EventKeywords)(-1), refreshInterval); + } + } + + protected override void OnEventWritten(EventWrittenEventArgs eventData) + { + if (!ReadyToVerify.WaitOne(0)) + { + mostRecentTimestamp = eventData.TimeStamp; + if (setToZero.WaitOne(0) && mostRecentTimestamp > setToZeroTimestamp) + { + Console.WriteLine($"[{DateTime.UtcNow:hh:mm:ss.fff}] OnEventWritten :: Setting ReadyToVerify"); + ReadyToVerify.Set(); + } + } + } + + public bool Verify() + { + if (!ReadyToVerify.WaitOne(0)) + return false; + + Console.WriteLine($"[{DateTime.UtcNow:hh:mm:ss.fff}] Verify :: Verifying"); + Console.WriteLine($"[{DateTime.UtcNow:hh:mm:ss.fff}] setToZeroTimestamp = {setToZeroTimestamp?.ToString("hh:mm:ss.fff") ?? "NULL"}"); + Console.WriteLine($"[{DateTime.UtcNow:hh:mm:ss.fff}] mostRecentTimestamp = {mostRecentTimestamp?.ToString("hh:mm:ss.fff") ?? "NULL"}"); + + return (setToZeroTimestamp is null || mostRecentTimestamp is null) ? false : setToZeroTimestamp < mostRecentTimestamp; + } + } + + public partial class TestRuntimeEventCounter + { + public static int Main(string[] args) + { + // Create an EventListener. + using (RuntimeCounterListener myListener = new RuntimeCounterListener()) + { + if (myListener.ReadyToVerify.WaitOne(TimeSpan.FromSeconds(30))) + { + if (myListener.Verify()) + { + Console.WriteLine("Test passed"); + return 100; + } + else + { + Console.WriteLine($"Test Failed - did not see one or more of the expected runtime counters."); + return 1; + } + } + else + { + Console.WriteLine("Test Failed - timed out waiting for reset"); + return 1; + } + } + } + } +} diff --git a/tests/src/tracing/eventcounter/gh53564.csproj b/tests/src/tracing/eventcounter/gh53564.csproj new file mode 100644 index 000000000000..ff0986cd788f --- /dev/null +++ b/tests/src/tracing/eventcounter/gh53564.csproj @@ -0,0 +1,31 @@ + + + + + Debug + AnyCPU + 2.0 + {8E3244CB-407F-4142-BAAB-E7A55901A5FA} + Exe + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + ..\..\ + BuildAndRun + $(DefineConstants);STATIC + true + 0 + true + + true + + + + + + + + + + + + +