Backing up changes where the CoreCLR version runs on Nano Server. It still has the pwrshplugin!WSManPluginStartup call issue.

This commit is contained in:
Mike Richmond
2016-07-19 16:41:13 -07:00
parent 77a26b6b77
commit c3bf2547e6
12 changed files with 496 additions and 372 deletions
+11 -306
View File
@@ -1,4 +1,5 @@
cmake_minimum_required(VERSION 2.8.4)
project(PowerShellNative)
#
@@ -51,7 +52,8 @@ SET (WIN_VERSION_WINTHRESHOLD 0x0A00)
SET (WIN_VERSION_WINBLUE 0x0603)
SET (WIN_VERSION_WIN8 0x0602)
SET (WIN_VERSION_WIN7 0x0601)
SET (NTDDI_VERSION_WIN7 0x06010000)
SET (NTDDI_VERSION_WIN7 0x06010000)
SET (NTDDI_VERSION_WIN10 0x0A000002)
SET (WIN_VERSION_VISTA 0x0600)
SET (WIN_VERSION_LONGHORN 0x0600)
SET (WIN_VERSION_WS03 0x0502)
@@ -73,313 +75,16 @@ SET (WIN_VERSION_WINXP 0x0501)
# UNICODE
# _UNICODE)
#set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /VERBOSE")
# ***
# *** Original flags: END
# ***
# ***
# *** CoreCLR flags: BEGIN
# ***
set(CMAKE_CXX_STANDARD_LIBRARIES "") # do not link against standard win32 libs i.e. kernel32, uuid, user32, etc.
#if(NOT CLR_CMAKE_PLATFORM_ARCH_ARM64)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /guard:cf")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /guard:cf")
#endif (NOT CLR_CMAKE_PLATFORM_ARCH_ARM64)
# Incremental linking with CFG is broken until next VS release.
# This needs to be appended to the last for each build type to override the default flag.
set(NO_INCREMENTAL_LINKER_FLAGS "/INCREMENTAL:NO")
# Linker flags
#
# Disable the following line for UNIX altjit on Windows
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /MANIFEST:NO") #Do not create Side-by-Side Assembly Manifest
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SUBSYSTEM:WINDOWS,6.00") #windows subsystem
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LARGEADDRESSAWARE") # can handle addresses larger than 2 gigabytes
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /RELEASE") #sets the checksum in the header
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NXCOMPAT") #Compatible with Data Execution Prevention
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DYNAMICBASE") #Use address space layout randomization
#set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUGTYPE:cv,fixup") #debugging format
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /PDBCOMPRESS") #shrink pdb size
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
#
# TODO: Should these be ignored????
#
#set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /IGNORE:4197,4013,4254,4070,4221")
#set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /IGNORE:4221")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG /PDBCOMPRESS")
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:1572864")
# Debug build specific flags
#set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/NOVCFEATURE ${NO_INCREMENTAL_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${NO_INCREMENTAL_LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${NO_INCREMENTAL_LINKER_FLAGS}")
# Checked build specific flags
#set(CMAKE_SHARED_LINKER_FLAGS_CHECKED "${CMAKE_SHARED_LINKER_FLAGS_CHECKED} /OPT:REF /OPT:NOICF /NOVCFEATURE ${NO_INCREMENTAL_LINKER_FLAGS}")
#set(CMAKE_STATIC_LINKER_FLAGS_CHECKED "${CMAKE_STATIC_LINKER_FLAGS_CHECKED}")
#set(CMAKE_EXE_LINKER_FLAGS_CHECKED "${CMAKE_EXE_LINKER_FLAGS_CHECKED} /OPT:REF /OPT:NOICF ${NO_INCREMENTAL_LINKER_FLAGS}")
# Release build specific flags
#set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG /OPT:REF /OPT:ICF ${NO_INCREMENTAL_LINKER_FLAGS}")
#set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG")
#set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG /OPT:REF /OPT:ICF ${NO_INCREMENTAL_LINKER_FLAGS}")
# ReleaseWithDebugInfo build specific flags
#set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /LTCG /OPT:REF /OPT:ICF ${NO_INCREMENTAL_LINKER_FLAGS}")
#set(CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO} /LTCG")
#set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /LTCG /OPT:REF /OPT:ICF ${NO_INCREMENTAL_LINKER_FLAGS}")
# Temporary until cmake has VS generators for arm64
#if(CLR_CMAKE_PLATFORM_ARCH_ARM64)
# set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /machine:arm64")
# set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /machine:arm64")
# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /machine:arm64")
#endif(CLR_CMAKE_PLATFORM_ARCH_ARM64)
# Force uCRT to be dynamically linked for Release build
#set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")
#set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")
#set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")
#set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")
#------------------------------------
# Definitions (for platform)
#-----------------------------------
#if (CLR_CMAKE_PLATFORM_ARCH_AMD64)
add_definitions(-D_AMD64_)
add_definitions(-D_WIN64)
add_definitions(-DAMD64)
add_definitions(-DBIT64=1)
#elseif (CLR_CMAKE_PLATFORM_ARCH_I386)
# add_definitions(-D_X86_)
#elseif (CLR_CMAKE_PLATFORM_ARCH_ARM)
# add_definitions(-D_ARM_)
# add_definitions(-DARM)
#elseif (CLR_CMAKE_PLATFORM_ARCH_ARM64)
# add_definitions(-D_ARM64_)
# add_definitions(-DARM64)
# add_definitions(-D_WIN64)
# add_definitions(-DBIT64=1)
#else ()
# clr_unknown_arch()
#endif ()
# Define the CRT lib references that link into Desktop imports
set(STATIC_MT_CRT_LIB "libcmt$<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:d>.lib")
set(STATIC_MT_VCRT_LIB "libvcruntime$<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:d>.lib")
set(STATIC_MT_CPP_LIB "libcpmt$<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:d>.lib")
# Define the uCRT lib reference
set(STATIC_UCRT_LIB "libucrt$<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:d>.lib")
set(DYNAMIC_UCRT_LIB "ucrt$<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:d>.lib")
#------------------------------------
# Definitions for compile
#-----------------------------------
add_compile_options(/Zl) # omit default library name in .OBJ
# The following options are set by the razzle build
add_compile_options(/TP) # compile all files as C++
add_compile_options(/d2Zi+) # make optimized builds debugging easier
add_compile_options(/nologo) # Suppress Startup Banner
add_compile_options(/W3) # set warning level to 3
#add_compile_options(/WX) # treat warnings as errors
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
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:wchar_t-) # C++ language conformance: wchar_t is NOT the native type, but a typedef
add_compile_options(/Zc:forScope) # C++ language conformance: enforce Standard C++ for scoping rules
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(/wd4960 /wd4961 /wd4603 /wd4627 /wd4838 /wd4456 /wd4457 /wd4458 /wd4459 /wd4091 /we4640)
add_compile_options(/Zi) # enable debugging information
add_compile_options(/ZH:SHA_256) # use SHA256 for generating hashes of compiler processed source files.
#if (CLR_CMAKE_PLATFORM_ARCH_I386)
# add_compile_options(/Gz)
#endif (CLR_CMAKE_PLATFORM_ARCH_I386)
add_compile_options($<$<OR:$<CONFIG:Release>,$<CONFIG:Relwithdebinfo>>:/GL>)
add_compile_options($<$<OR:$<OR:$<CONFIG:Release>,$<CONFIG:Relwithdebinfo>>,$<CONFIG:Checked>>:/O1>)
#if (CLR_CMAKE_PLATFORM_ARCH_AMD64)
# The generator expression in the following command means that the /homeparams option is added only for debug builds
add_compile_options($<$<CONFIG:Debug>:/homeparams>) # Force parameters passed in registers to be written to the stack
#endif (CLR_CMAKE_PLATFORM_ARCH_AMD64)
# enable control-flow-guard support for native components for non-Arm64 builds
add_compile_options(/guard:cf)
# 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
# wont do the same for debug/checked builds since ucrtbased.dll is not redistributable and Debug/Checked builds are not
# production-time scenarios.
add_compile_options($<$<OR:$<CONFIG:Release>,$<CONFIG:Relwithdebinfo>>:/MT>)
add_compile_options($<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:/MTd>)
set(CMAKE_ASM_MASM_FLAGS "${CMAKE_ASM_MASM_FLAGS} /ZH:SHA_256")
#if (CLR_CMAKE_TARGET_ARCH_AMD64)
add_definitions(-D_TARGET_AMD64_=1)
add_definitions(-DDBG_TARGET_64BIT=1)
add_definitions(-DDBG_TARGET_AMD64=1)
add_definitions(-DDBG_TARGET_WIN64=1)
#elseif (CLR_CMAKE_TARGET_ARCH_ARM)
# add_definitions(-D_TARGET_ARM_=1)
# add_definitions(-DDBG_TARGET_32BIT=1)
# add_definitions(-DDBG_TARGET_ARM=1)
#elseif (CLR_CMAKE_TARGET_ARCH_I386)
# add_definitions(-D_TARGET_X86_=1)
# add_definitions(-DDBG_TARGET_32BIT=1)
# add_definitions(-DDBG_TARGET_X86=1)
#else ()
# clr_unknown_arch()
#endif (CLR_CMAKE_TARGET_ARCH_AMD64)
#
# TODO: Are these needed???????????
#
#add_definitions(-D_BLD_CLR)
#add_definitions(-DDEBUGGING_SUPPORTED)
#add_definitions(-DPROFILING_SUPPORTED)
add_definitions(-DWIN32)
add_definitions(-D_WIN32)
add_definitions(-DWINVER=${WIN_VERSION_WIN7})# 0x0601 for Win7, was 0x0602
add_definitions(-D_WIN32_WINNT=${WIN_VERSION_WIN7}) # 0x0601 for Win7
add_definitions(-DWIN32_LEAN_AND_MEAN=1)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
#if(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386)
# Only enable edit and continue on windows x86 and x64
# exclude Linux, arm & arm64
add_definitions(-DEnC_SUPPORTED)
#endif(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386)
add_definitions(-DUNICODE)
add_definitions(-D_UNICODE)
# ***
# *** CoreCLR flags: END
# ***
# ***
# *** DSC flags: BEGIN
# ***
SET (WindowsSdkDir $ENV{WindowsSdkDir})
SET (WindowsSDKVersion $ENV{WindowsSDKVersion})
SET (NETFXSdkDir $ENV{NETFXSDKDir})
#SET (FrameWorkLibPath $ENV{FrameworkDir}/$ENV{FrameworkVersion})
#
# Configure include directories
#
SET (WindowsSDKIncludeBase "${WindowsSdkDir}/Include/${WindowsSDKVersion}")
SET (IncludePath)
#list (APPEND IncludePath "${INTERNAL_HEADER_DIR}")
#list (APPEND IncludePath "${PUBLIC_HEADER_DIR}")
list (APPEND IncludePath "${WindowsSDKIncludeBase}winrt")
# Don't include due to incompatible instance.h
# list (APPEND IncludePath "${WindowsSDKIncludeBase}um")
list (APPEND IncludePath "${WindowsSDKIncludeBase}shared")
list (APPEND IncludePath "${NETFXSdkDir}/Include/um")
list (APPEND IncludePath "${WindowsSDKIncludeBase}ucrt")
include_directories(BEFORE ${IncludePath})
#
# Configure lib directories
#
SET (WindowsSDKLibBase "${WindowsSdkDir}/Lib/${WindowsSDKVersion}")
SET (LibraryPath)
list (APPEND LibraryPath "${WindowsSDKLibBase}ucrt/${WindowsSDKPlatform}")
list (APPEND LibraryPath "${NETFXSdkDir}lib/um/${WindowsSDKPlatform}")
list (APPEND LibraryPath "${WindowsSDKLibBase}um/${WindowsSDKPlatform}" )
list (APPEND LibraryPath "${INTERNAL_LIBRARY_DIR}")
list (APPEND LibraryPath "${PUBLIC_LIBRARY_DIR}")
#list (APPEND LibraryPath ${FrameWorkLibPath})
SET (WindowsSDKLibBase "${WindowsSdkDir}/Lib/${WindowsSDKVersion}")
link_directories(${LibraryPath})
#if (${WindowsSDKPlatform} STREQUAL "x64")
# add_definitions (
# -D_WIN64
# -D_AMD64_
# -DAMD64
# -DBUILD_WOW64_ENABLED=1
# -DBUILD_UMS_ENABLED=1
# )
#else()
# add_definitions (
# -DBUILD_WOW64_ENABLED=1
# -DBUILD_UMS_ENABLED=0
# )
#endif()
#
# Common defines.
#
#add_definitions (
# -D_CRT_SECURE_NO_WARNINGS
# -DCONDITION_HANDLING=1
# -DNT_UP=1
# -DNT_INST=0
# -D_NT1X_=100
# -DWINNT=1
# -DWIN32_LEAN_AND_MEAN=1
# -DDEVL=1
# -D_MT=1
# -D_STL70_
# -DMI_INTERNAL
# -DWINBUILD
# -DHOOK_BUILD # TODO: should be target specific
# -DCONFIG_ENABLE_WCHAR
# -D_INTLSTR_NOTAPPEND_NULL
# -DMSC_NOOPT
# -DBUILD_WINDOWS
# -D_USE_DECLSPECS_FOR_SAL=1
# -DUNICODE
# -D_UNICODE
# -D_USE_DEV11_CRT
#)
#
# platform specific defines
#
#add_definitions(
# -DNTDDI_VERSION=${NTDDI_VERSION_WIN7}
# -DWINBLUE_KBSPRING14
# -D_APISET_WINDOWS_VERSION=${WIN_VERSION_WIN7}
# -D_APISET_MINWIN_VERSION=0x0100
# -D_APISET_MINCORE_VERSION=0x0100
# -D_WIN32_IE=0x0800
# -D_WIN32_WINNT=${WIN_VERSION_WIN7}
# -DWINVER=${WIN_VERSION_WIN7}
# )
# ***
# *** DSC flags: END
# ***
#include(dsc_defs.cmake)
if (BUILD_ONECORE)
include(nano_defs.cmake)
else ()
include(coreclr_defs.cmake)
endif (BUILD_ONECORE)
# Default of BUILD_ONECORE should be ON once it is supported
option(BUILD_ONECORE "Compile the OneCore version of the binaries" OFF)
@@ -392,7 +97,7 @@ add_subdirectory(nativemsh/pwrshcommon)
add_subdirectory(nativemsh/pwrshplugin)
# Build powershell.exe
if (NOT BUILD_ONECORE)
#if (NOT BUILD_ONECORE)
# Conditionally build powershell.exe until CssMainEntry.cpp appears.
add_subdirectory(nativemsh/pwrshexe)
endif ()
#endif ()
+195
View File
@@ -0,0 +1,195 @@
cmake_minimum_required(VERSION 2.8.4)
set(CMAKE_CXX_STANDARD_LIBRARIES "") # do not link against standard win32 libs i.e. kernel32, uuid, user32, etc.
#if(NOT CLR_CMAKE_PLATFORM_ARCH_ARM64)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /guard:cf")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /guard:cf")
#endif (NOT CLR_CMAKE_PLATFORM_ARCH_ARM64)
# Incremental linking with CFG is broken until next VS release.
# This needs to be appended to the last for each build type to override the default flag.
set(NO_INCREMENTAL_LINKER_FLAGS "/INCREMENTAL:NO")
# Linker flags
#
# Disable the following line for UNIX altjit on Windows
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /MANIFEST:NO") #Do not create Side-by-Side Assembly Manifest
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SUBSYSTEM:WINDOWS,6.00") #windows subsystem
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LARGEADDRESSAWARE") # can handle addresses larger than 2 gigabytes
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /RELEASE") #sets the checksum in the header
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /NXCOMPAT") #Compatible with Data Execution Prevention
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DYNAMICBASE") #Use address space layout randomization
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUGTYPE:cv,fixup") #debugging format
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /PDBCOMPRESS") #shrink pdb size
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DEBUG")
#
# TODO: Should these be ignored????
#
#set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /IGNORE:4197,4013,4254,4070,4221")
#set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /IGNORE:4221")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG /PDBCOMPRESS")
#set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:1572864")
# Debug build specific flags
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/NOVCFEATURE ${NO_INCREMENTAL_LINKER_FLAGS}")
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${NO_INCREMENTAL_LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${NO_INCREMENTAL_LINKER_FLAGS}")
# Checked build specific flags
set(CMAKE_SHARED_LINKER_FLAGS_CHECKED "${CMAKE_SHARED_LINKER_FLAGS_CHECKED} /OPT:REF /OPT:NOICF /NOVCFEATURE ${NO_INCREMENTAL_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_CHECKED "${CMAKE_STATIC_LINKER_FLAGS_CHECKED}")
set(CMAKE_EXE_LINKER_FLAGS_CHECKED "${CMAKE_EXE_LINKER_FLAGS_CHECKED} /OPT:REF /OPT:NOICF ${NO_INCREMENTAL_LINKER_FLAGS}")
# Release build specific flags
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG /OPT:REF /OPT:ICF ${NO_INCREMENTAL_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG /OPT:REF /OPT:ICF ${NO_INCREMENTAL_LINKER_FLAGS}")
# ReleaseWithDebugInfo build specific flags
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /LTCG /OPT:REF /OPT:ICF ${NO_INCREMENTAL_LINKER_FLAGS}")
set(CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO} /LTCG")
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /LTCG /OPT:REF /OPT:ICF ${NO_INCREMENTAL_LINKER_FLAGS}")
# Temporary until cmake has VS generators for arm64
#if(CLR_CMAKE_PLATFORM_ARCH_ARM64)
# set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /machine:arm64")
# set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /machine:arm64")
# set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /machine:arm64")
#endif(CLR_CMAKE_PLATFORM_ARCH_ARM64)
# Force uCRT to be dynamically linked for Release build
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /NODEFAULTLIB:libucrt.lib /DEFAULTLIB:ucrt.lib")
#------------------------------------
# Definitions (for platform)
#-----------------------------------
#if (CLR_CMAKE_PLATFORM_ARCH_AMD64)
add_definitions(-D_AMD64_)
add_definitions(-D_WIN64)
add_definitions(-DAMD64)
add_definitions(-DBIT64=1)
#elseif (CLR_CMAKE_PLATFORM_ARCH_I386)
# add_definitions(-D_X86_)
#elseif (CLR_CMAKE_PLATFORM_ARCH_ARM)
# add_definitions(-D_ARM_)
# add_definitions(-DARM)
#elseif (CLR_CMAKE_PLATFORM_ARCH_ARM64)
# add_definitions(-D_ARM64_)
# add_definitions(-DARM64)
# add_definitions(-D_WIN64)
# add_definitions(-DBIT64=1)
#else ()
# clr_unknown_arch()
#endif ()
# Define the CRT lib references that link into Desktop imports
set(STATIC_MT_CRT_LIB "libcmt$<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:d>.lib")
set(STATIC_MT_VCRT_LIB "libvcruntime$<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:d>.lib")
set(STATIC_MT_CPP_LIB "libcpmt$<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:d>.lib")
# Define the uCRT lib reference
set(STATIC_UCRT_LIB "libucrt$<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:d>.lib")
set(DYNAMIC_UCRT_LIB "ucrt$<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:d>.lib")
#------------------------------------
# Definitions for compile
#-----------------------------------
add_compile_options(/Zl) # omit default library name in .OBJ
# The following options are set by the razzle build
add_compile_options(/TP) # compile all files as C++
add_compile_options(/d2Zi+) # make optimized builds debugging easier
add_compile_options(/nologo) # Suppress Startup Banner
add_compile_options(/W3) # set warning level to 3
#add_compile_options(/WX) # treat warnings as errors
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
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:wchar_t-) # C++ language conformance: wchar_t is NOT the native type, but a typedef
add_compile_options(/Zc:forScope) # C++ language conformance: enforce Standard C++ for scoping rules
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(/wd4960 /wd4961 /wd4603 /wd4627 /wd4838 /wd4456 /wd4457 /wd4458 /wd4459 /wd4091 /we4640)
add_compile_options(/Zi) # enable debugging information
add_compile_options(/ZH:SHA_256) # use SHA256 for generating hashes of compiler processed source files.
#if (CLR_CMAKE_PLATFORM_ARCH_I386)
# add_compile_options(/Gz)
#endif (CLR_CMAKE_PLATFORM_ARCH_I386)
add_compile_options($<$<OR:$<CONFIG:Release>,$<CONFIG:Relwithdebinfo>>:/GL>)
add_compile_options($<$<OR:$<OR:$<CONFIG:Release>,$<CONFIG:Relwithdebinfo>>,$<CONFIG:Checked>>:/O1>)
#if (CLR_CMAKE_PLATFORM_ARCH_AMD64)
# The generator expression in the following command means that the /homeparams option is added only for debug builds
add_compile_options($<$<CONFIG:Debug>:/homeparams>) # Force parameters passed in registers to be written to the stack
#endif (CLR_CMAKE_PLATFORM_ARCH_AMD64)
# enable control-flow-guard support for native components for non-Arm64 builds
add_compile_options(/guard:cf)
# 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
# wont do the same for debug/checked builds since ucrtbased.dll is not redistributable and Debug/Checked builds are not
# production-time scenarios.
add_compile_options($<$<OR:$<CONFIG:Release>,$<CONFIG:Relwithdebinfo>>:/MT>)
add_compile_options($<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:/MTd>)
#set(CMAKE_ASM_MASM_FLAGS "${CMAKE_ASM_MASM_FLAGS} /ZH:SHA_256")
#if (CLR_CMAKE_TARGET_ARCH_AMD64)
add_definitions(-D_TARGET_AMD64_=1)
add_definitions(-DDBG_TARGET_64BIT=1)
add_definitions(-DDBG_TARGET_AMD64=1)
add_definitions(-DDBG_TARGET_WIN64=1)
#elseif (CLR_CMAKE_TARGET_ARCH_ARM)
# add_definitions(-D_TARGET_ARM_=1)
# add_definitions(-DDBG_TARGET_32BIT=1)
# add_definitions(-DDBG_TARGET_ARM=1)
#elseif (CLR_CMAKE_TARGET_ARCH_I386)
# add_definitions(-D_TARGET_X86_=1)
# add_definitions(-DDBG_TARGET_32BIT=1)
# add_definitions(-DDBG_TARGET_X86=1)
#else ()
# clr_unknown_arch()
#endif (CLR_CMAKE_TARGET_ARCH_AMD64)
#
# TODO: Are these needed???????????
#
#add_definitions(-D_BLD_CLR)
#add_definitions(-DDEBUGGING_SUPPORTED)
#add_definitions(-DPROFILING_SUPPORTED)
add_definitions(-DWIN32)
add_definitions(-D_WIN32)
add_definitions(-DWINVER=${WIN_VERSION_WIN8})# 0x0601 for Win7, was 0x0602
add_definitions(-D_WIN32_WINNT=${WIN_VERSION_WIN8}) # 0x0601 for Win7
add_definitions(-DWIN32_LEAN_AND_MEAN=1)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
#if(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386)
# Only enable edit and continue on windows x86 and x64
# exclude Linux, arm & arm64
add_definitions(-DEnC_SUPPORTED)
#endif(CLR_CMAKE_TARGET_ARCH_AMD64 OR CLR_CMAKE_TARGET_ARCH_I386)
add_definitions(-DUNICODE)
add_definitions(-D_UNICODE)
+111
View File
@@ -0,0 +1,111 @@
cmake_minimum_required(VERSION 2.8.4)
SET (WindowsSdkDir $ENV{WindowsSdkDir})
SET (WindowsSDKVersion $ENV{WindowsSDKVersion})
SET (NETFXSdkDir $ENV{NETFXSDKDir})
#SET (FrameWorkLibPath $ENV{FrameworkDir}/$ENV{FrameworkVersion})
#
# Configure include directories
#
SET (WindowsSDKIncludeBase "${WindowsSdkDir}/Include/${WindowsSDKVersion}")
SET (IncludePath)
#list (APPEND IncludePath "${INTERNAL_HEADER_DIR}")
#list (APPEND IncludePath "${PUBLIC_HEADER_DIR}")
list (APPEND IncludePath "${WindowsSDKIncludeBase}winrt")
# Don't include due to incompatible instance.h
# list (APPEND IncludePath "${WindowsSDKIncludeBase}um")
list (APPEND IncludePath "${WindowsSDKIncludeBase}shared")
list (APPEND IncludePath "${NETFXSdkDir}/Include/um")
list (APPEND IncludePath "${WindowsSDKIncludeBase}ucrt")
include_directories(BEFORE ${IncludePath})
#
# Configure lib directories
#
SET (WindowsSDKLibBase "${WindowsSdkDir}/Lib/${WindowsSDKVersion}")
SET (OneCoreLibBase "$ENV{VCInstallDir}lib/onecore/amd64")
SET (LibraryPath)
if (BUILD_ONECORE)
list (APPEND LibraryPath "${OneCoreLibBase}")
endif (BUILD_ONECORE)
list (APPEND LibraryPath "${WindowsSDKLibBase}ucrt/${WindowsSDKPlatform}")
list (APPEND LibraryPath "${NETFXSdkDir}lib/um/${WindowsSDKPlatform}")
list (APPEND LibraryPath "${WindowsSDKLibBase}um/${WindowsSDKPlatform}" )
list (APPEND LibraryPath "${INTERNAL_LIBRARY_DIR}")
list (APPEND LibraryPath "${PUBLIC_LIBRARY_DIR}")
#list (APPEND LibraryPath ${FrameWorkLibPath})
SET (WindowsSDKLibBase "${WindowsSdkDir}/Lib/${WindowsSDKVersion}")
link_directories(${LibraryPath})
if (${WindowsSDKPlatform} STREQUAL "x64")
add_definitions (
-D_WIN64
-D_AMD64_
-DAMD64
-DBUILD_WOW64_ENABLED=1
-DBUILD_UMS_ENABLED=1
)
else()
add_definitions (
-DBUILD_WOW64_ENABLED=1
-DBUILD_UMS_ENABLED=0
)
endif()
#
# Common defines.
#
add_definitions (
-D_CRT_SECURE_NO_WARNINGS
-DCONDITION_HANDLING=1
-DNT_UP=1
-DNT_INST=0
-D_NT1X_=100
-DWINNT=1
-DWIN32_LEAN_AND_MEAN=1
-DDEVL=1
#-D_MT=1
-DMD
-D_STL70_
-DMI_INTERNAL
-DWINBUILD
-DHOOK_BUILD # TODO: should be target specific
-DCONFIG_ENABLE_WCHAR
-D_INTLSTR_NOTAPPEND_NULL
-DMSC_NOOPT
-DBUILD_WINDOWS
-D_USE_DECLSPECS_FOR_SAL=1
-DUNICODE
-D_UNICODE
-D_USE_DEV11_CRT
)
#
# platform specific defines
#
add_definitions(
#-DNTDDI_VERSION=${NTDDI_VERSION_WIN7}
-DNTDDI_VERSION=${NTDDI_VERSION_WIN10}
-DWINBLUE_KBSPRING14
#-D_APISET_WINDOWS_VERSION=${WIN_VERSION_WIN7}
-D_APISET_WINDOWS_VERSION=${WIN_VERSION_WIN10}
#-D_APISET_MINWIN_VERSION=0x0100
-D_APISET_MINWIN_VERSION=0x0106
#-D_APISET_MINCORE_VERSION=0x0100
-D_APISET_MINCORE_VERSION=0x0105
-D_WIN32_IE=0x0800
#-D_WIN32_WINNT=${WIN_VERSION_WIN7}
-D_WIN32_WINNT=${WIN_VERSION_WIN10}
#-DWINVER=${WIN_VERSION_WIN7}
-DWINVER=${WIN_VERSION_WIN10}
)
# if not DEBUG for DSC
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF")
#set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF /NODEFAULTLIB")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF /NODEFAULTLIB")
+82
View File
@@ -0,0 +1,82 @@
cmake_minimum_required(VERSION 2.8.4)
SET (WindowsSdkDir $ENV{WindowsSdkDir})
SET (WindowsSDKVersion $ENV{WindowsSDKVersion})
SET (NETFXSdkDir $ENV{NETFXSDKDir})
#
# Configure include directories
#
SET (WindowsSDKIncludeBase "${WindowsSdkDir}/Include/${WindowsSDKVersion}")
SET (IncludePath)
list (APPEND IncludePath "${WindowsSDKIncludeBase}winrt")
list (APPEND IncludePath "${WindowsSDKIncludeBase}shared")
#list (APPEND IncludePath "${NETFXSdkDir}/Include/um")
list (APPEND IncludePath "${WindowsSDKIncludeBase}ucrt")
include_directories(BEFORE ${IncludePath})
#
# Configure lib directories
#
SET (WindowsSDKLibBase "${WindowsSdkDir}/Lib/${WindowsSDKVersion}")
SET (OneCoreLibBase "$ENV{VCInstallDir}lib/onecore/amd64")
SET (LibraryPath)
list (APPEND LibraryPath "${OneCoreLibBase}")
list (APPEND LibraryPath "${WindowsSDKLibBase}ucrt/${WindowsSDKPlatform}")
list (APPEND LibraryPath "${WindowsSDKLibBase}um/${WindowsSDKPlatform}" )
#list (APPEND LibraryPath "${NETFXSdkDir}lib/um/${WindowsSDKPlatform}")
link_directories(${LibraryPath})
#
# Tell CMake to set the platform toolset.
#
set(CMAKE_VS_PLATFORM_TOOLSET "v140") # Use VS 2015 with Win 10 SDK
set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION "10.0.10586.0") # Targets Windows 10. Alt is ${WindowsSDKVersion}
if (BUILD_ONECORE)
set(CMAKE_CXX_STANDARD_LIBRARIES "") # do not link against standard win32 libs i.e. kernel32, uuid, user32, etc.
endif (BUILD_ONECORE)
add_compile_options(/Zl) # omit default library name in .OBJ
add_compile_options(/Zi) # enable debugging information
add_compile_options(/nologo) # Suppress Startup Banner
add_compile_options(/W3) # set warning level to 3
#add_compile_options(/WX-) # treat warnings as errors
add_compile_options(/wd4996) # Ignore deprecation warnings
add_compile_options(/Od) # enable intrinsics
add_compile_options(/sdl)
add_compile_options(/Gm) # minimal rebuild
add_compile_options(/EHsc) # enable C++ EH (w/ SEH exceptions)
add_compile_options(/RTC1)
#add_compile_options(/MDd)
add_compile_options(/MD)
add_compile_options(/GS) # Buffer Security Check
add_compile_options(/fp:precise)
add_compile_options(/Zp8) # pack structs on 8-byte boundary
add_compile_options(/Zc:wchar_t) # C++ language conformance: wchar_t is NOT the native type, but a typedef
#add_compile_options(/U_WINDOWS)
add_definitions(
-DWIN32
-DNDEBUG
# -D_DEBUG
-D_UNICODE
-DUNICODE
-DWIN32_LEAN_AND_MEAN=1
)
#set(MY_COMMON_LINK_FLAGS "/INCREMENTAL /NOLOGO /MANIFEST:NO /NXCOMPAT /DYNAMICBASE /TLBID:1 /MACHINE:x64 /NODEFAULTLIB")
set(MY_COMMON_LINK_FLAGS "/INCREMENTAL:NO /NOLOGO /MANIFEST:NO /NXCOMPAT /DYNAMICBASE /TLBID:1 /MACHINE:x64 /guard:cf /OPT:REF /OPT:ICF")
set(MY_COMMON_LINK_FLAGS "${MY_COMMON_LINK_FLAGS} /NODEFAULTLIB:kernel32.lib /NODEFAULTLIB:advapi32.lib") # Explicitly exclude kernel32 and advapi32 since CMake is including them and they block execution on Nano Server
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${MY_COMMON_LINK_FLAGS}")
#set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SUBSYSTEM:WINDOWS /OPT:REF") #windows subsystem
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") #windows subsystem
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MY_COMMON_LINK_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:CONSOLE") #windows subsystem
@@ -12,17 +12,20 @@ if (BUILD_ONECORE)
message("Building OneCore version of pwrshcommon.lib")
# Libraries to use when creating this binary for Windows on OneCore-based SKUs
set(PWRSHCOMMON_WINDOWS_LIBS
onecore.lib)
set(pwrshcommon_definitions ${common_pwrsh_definitions} CORECLR)
# onecore.lib
)
#set(pwrshcommon_definitions ${common_pwrsh_definitions} CORECLR)
set(pwrshcommon_definitions CORECLR)
set_target_properties(pwrshcommon PROPERTIES COMPILE_DEFINITIONS "${pwrshcommon_definitions}")
else () # NOT BUILD_ONECORE
message("Building Full version of pwrshcommon.lib")
# Libraries to use when creating this binary for Windows on full SKUs
# Note: The appropriate libs get added automatically by VS
set(PWRSHCOMMON_WINDOWS_LIBS
# CoreCLR libs
${STATIC_MT_CRT_LIB}
${STATIC_MT_VCRT_LIB}
${STATIC_UCRT_LIB}
### ${STATIC_MT_CRT_LIB}
### ${STATIC_MT_VCRT_LIB}
### ${STATIC_UCRT_LIB}
#
# ole32.lib
# oleaut32.lib
@@ -32,12 +35,12 @@ else () # NOT BUILD_ONECORE
# msxml6.lib
# mscoree.lib)
)
set(pwrshcommon_definitions ${common_pwrsh_definitions})
#set(pwrshcommon_definitions ${common_pwrsh_definitions})
# target_include_directories(pwrshcommon PUBLIC
# "%ProgramFiles(x86)%/Windows Kits/NETFXSDK/4.6/Include/um")
endif (BUILD_ONECORE)
set_target_properties(pwrshcommon PROPERTIES COMPILE_DEFINITIONS "${pwrshcommon_definitions}")
#set_target_properties(pwrshcommon PROPERTIES COMPILE_DEFINITIONS "${pwrshcommon_definitions}")
target_link_libraries(pwrshcommon
${PWRSHCOMMON_WINDOWS_LIBS})
@@ -148,6 +148,17 @@ namespace NativeMsh
return NULL;
}
initPtr = (coreclr_initialize_ptr)GetProcAddress(result, "coreclr_initialize");
shutdownPtr = (coreclr_shutdown_ptr)GetProcAddress(result, "coreclr_shutdown");
createDelegatePtr = (coreclr_create_delegate_ptr)GetProcAddress(result, "coreclr_create_delegate");
if (NULL == initPtr ||
NULL == shutdownPtr ||
NULL == createDelegatePtr)
{
return NULL;
}
// Initialization succeeded. Save the handle and return success;
coreClrHandle = result;
return result;
@@ -1349,12 +1349,12 @@ namespace NativeMsh
vals[nProps] = tempStr.c_str();
nProps++;
props[nProps] = L"APP_PATHS";
vals[nProps] = L""; // Used to be hostEnvironment.GetHostDirectoryPath()
props[nProps] = "APP_PATHS";
vals[nProps] = ""; // Used to be hostEnvironment.GetHostDirectoryPath()
nProps++;
props[nProps] = L"APP_NI_PATHS";
vals[nProps] = L""; // Used to be hostEnvironment.GetHostDirectoryPath()
props[nProps] = "APP_NI_PATHS";
vals[nProps] = ""; // Used to be hostEnvironment.GetHostDirectoryPath()
nProps++;
int hr = hostWrapper->InitializeClr(
@@ -4,25 +4,34 @@
# Only build powershell.exe for "full" windows. Open PowerShell uses the managed executable.
if (BUILD_ONECORE)
message("*")
message("*********** Building PowerShell.exe for 'full' CLR instead of OneCore. Add CssMainEntry.cpp")
message("*")
#set(BUILD_ONECORE OFF)
endif ()
#if (BUILD_ONECORE)
if (BUILD_ONECORE)
message("*")
message("*********** Building PowerShell.exe for CoreCLR. Add CssMainEntry.cpp")
message("*")
# Settings to use when creating PowerShell.exe for Windows on OneCore-based SKUs
# set(PWRSHEXE_WINDOWS_SOURCES
# TODO: Fix this once the file is migrated from SD
# CssMainEntry.cpp)
# MainEntry.cpp)
# set(PWRSHEXE_WINDOWS_LIBS
# onecore.lib)
# set(powershell_definitions
# _CONSOLE
# CORECLR
# ${common_pwrsh_definitions})
#else (BUILD_ONECORE)
set(PWRSHEXE_WINDOWS_SOURCES
CssMainEntry.cpp)
set(PWRSHEXE_WINDOWS_LIBS
### ${STATIC_MT_CRT_LIB}
### ${STATIC_MT_VCRT_LIB}
### ${STATIC_UCRT_LIB}
onecore.lib
vcruntime.lib
ucrtd.lib
msvcrt.lib
)
set(powershell_definitions
_CONSOLE
CORECLR
)
# ${common_pwrsh_definitions})
else ()
message("*")
message("*********** Building PowerShell.exe for 'Full' CLR.")
message("*")
# Settings to use when creating PowerShell.exe for Windows on full SKUs or downlevel platforms
set(PWRSHEXE_WINDOWS_SOURCES
MainEntry.cpp)
@@ -33,10 +42,10 @@ endif ()
${STATIC_MT_VCRT_LIB}
${STATIC_UCRT_LIB}
#
# ole32.lib
# oleaut32.lib
# uuid.lib
# user32.lib
# ole32.lib
# oleaut32.lib
# uuid.lib
# user32.lib
MUILoad.lib
msxml6.lib
mscoree.lib
@@ -44,17 +53,21 @@ endif ()
)
set(powershell_definitions
_CONSOLE
${common_pwrsh_definitions})
#endif (BUILD_ONECORE)
# ${common_pwrsh_definitions})
)
endif (BUILD_ONECORE)
add_executable(powershell
${PWRSHEXE_WINDOWS_SOURCES})
set_target_properties(powershell PROPERTIES COMPILE_DEFINITIONS "${powershell_definitions}")
set_target_properties(powershell PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
set_target_properties(powershell PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE")
set_target_properties(powershell PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:CONSOLE")
set_target_properties(powershell PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:CONSOLE")
# Set in nano_defs.cmake. Uncomment for other flavors
#set_target_properties(powershell PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
#set_target_properties(powershell PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE")
#set_target_properties(powershell PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:CONSOLE")
#set_target_properties(powershell PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:CONSOLE")
message("==== Setting libs = ${PWRSHEXE_WINDOWS_LIBS}")
target_link_libraries(powershell
${PWRSHEXE_WINDOWS_LIBS})
@@ -12,7 +12,9 @@
#include <windows.h>
#include <string>
#include <stdio.h>
#include "mscoree.h"
#if !CORECLR
#include "mscoree.h"
#endif
#include "NativeMsh.h"
#include "ClrHostWrapper.h"
#include "OutputWriter.h"
@@ -34,9 +36,9 @@ namespace NativeMsh
// All these objects will be destroyed when commonFuncs goes out of scope.
PwrshExeOutput* output = new PwrshExeOutput();
PwrshCommon commonFuncs(output, new WinSystemCallFacade());
ICLRRuntimeHost2Wrapper hostWrapper;
CoreClrHostingApiWrapper hostWrapper;
exitCode = commonFuncs.LaunchCoreCLR(&hostWrapper, hostEnvironment);
exitCode = commonFuncs.LaunchCoreCLR(&hostWrapper, hostEnvironment, "powershell");
if (EXIT_CODE_SUCCESS != exitCode)
{
if (verbose)
@@ -51,23 +53,14 @@ namespace NativeMsh
return false;
}
exitCode = commonFuncs.CreateAppDomain(&hostWrapper, hostEnvironment.GetHostBinaryName(), hostEnvironment);
if (EXIT_CODE_SUCCESS != exitCode)
{
if (verbose)
::wprintf(L"Unable to create app domain\n");
return false;
}
//-------------------------------------------------------------
// Set the powershell custom assembly loader to be the default
LoaderRunHelperFp initDelegate = NULL;
HRESULT hr = hostWrapper.CreateDelegate(
hostWrapper.GetAppDomainId(),
L"Microsoft.PowerShell.CoreCLR.AssemblyLoadContext, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
L"System.Management.Automation.PowerShellAssemblyLoadContextInitializer",
L"SetPowerShellAssemblyLoadContext",
(INT_PTR*)&initDelegate);
"Microsoft.PowerShell.CoreCLR.AssemblyLoadContext, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"System.Management.Automation.PowerShellAssemblyLoadContextInitializer",
"SetPowerShellAssemblyLoadContext",
(void**)&initDelegate);
if (FAILED(hr))
{
@@ -75,18 +68,17 @@ namespace NativeMsh
}
else
{
initDelegate(hostEnvironment.GetHostDirectoryPath());
initDelegate(hostEnvironment.GetHostDirectoryPathW());
}
//-------------------------------------------------------------
// Start the assembly
MonadRunHelperFp pfnDelegate = NULL;
hr = hostWrapper.CreateDelegate(
hostWrapper.GetAppDomainId(),
L"Microsoft.PowerShell.ConsoleHost, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
L"Microsoft.PowerShell.UnmanagedPSEntry",
L"Start",
(INT_PTR*)&pfnDelegate);
"Microsoft.PowerShell.ConsoleHost, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35",
"Microsoft.PowerShell.UnmanagedPSEntry",
"Start",
(void**)&pfnDelegate);
if (FAILED(hr))
{
@@ -14,11 +14,17 @@ if (BUILD_ONECORE)
message("*")
# Libraries to use when creating this binary for Windows on OneCore-based SKUs
set(PWRSHPLUGIN_WINDOWS_LIBS
${STATIC_MT_CRT_LIB}
${STATIC_MT_VCRT_LIB}
${STATIC_UCRT_LIB}
### ${STATIC_MT_CRT_LIB}
### ${STATIC_MT_VCRT_LIB}
### ${STATIC_UCRT_LIB}
onecore.lib
vcruntime.lib
ucrtd.lib
msvcrt.lib
wsmsvc.lib)
set(pwrshplugin_definitions ${common_pwrsh_definitions} CORECLR)
#set(pwrshplugin_definitions ${common_pwrsh_definitions} CORECLR)
set(pwrshplugin_definitions CORECLR)
set_target_properties(pwrshplugin PROPERTIES COMPILE_DEFINITIONS "${pwrshplugin_definitions}")
else ()
message("*")
message("* Setting up NOT BUILD_ONECORE version of pwrshplugin.dll")
@@ -34,7 +40,7 @@ else ()
# oleaut32.lib
# uuid.lib
wsmsvc.lib
# CoreCLR libs
# CoreCLR lib
${STATIC_MT_CRT_LIB}
${STATIC_MT_VCRT_LIB}
${STATIC_UCRT_LIB}
@@ -43,7 +49,7 @@ else ()
set(pwrshplugin_definitions ${common_pwrsh_definitions})
endif (BUILD_ONECORE)
set_target_properties(pwrshplugin PROPERTIES COMPILE_DEFINITIONS "${pwrshplugin_definitions}")
#set_target_properties(pwrshplugin PROPERTIES COMPILE_DEFINITIONS "${pwrshplugin_definitions}")
#set_target_properties(pwrshplugin PROPERTIES COMPILE_DEFINITIONS "_DLL")
target_link_libraries(pwrshplugin
@@ -10,7 +10,9 @@
#pragma once
#include "pwrshplugindefs.h" // PwrshPluginWkr_Ptrs and PlugInException
#if !CORECLR
#include <mscoree.h>
#endif
#include <atlbase.h>
#include <string>
#include "SystemCallFacade.h"