From ad7c799eb9a2ae1e7371c75655d4b244e196b239 Mon Sep 17 00:00:00 2001 From: Gaurav Khanna Date: Mon, 22 Aug 2016 09:45:43 -0700 Subject: Initial commit to build Win32 Arm CoreCLR --- src/vm/wks/CMakeLists.txt | 133 +++++++++++++++++++++++++++++++--------------- 1 file changed, 91 insertions(+), 42 deletions(-) (limited to 'src/vm/wks/CMakeLists.txt') diff --git a/src/vm/wks/CMakeLists.txt b/src/vm/wks/CMakeLists.txt index 0ff0ccb9a6..48ca6b0803 100644 --- a/src/vm/wks/CMakeLists.txt +++ b/src/vm/wks/CMakeLists.txt @@ -1,3 +1,4 @@ + if (WIN32) add_precompiled_header(common.h ../common.cpp VM_SOURCES_WKS) # mscorlib.cpp does not compile with precompiled header file @@ -5,63 +6,111 @@ if (WIN32) # .c file cannot use cpp precompiled header set_source_files_properties(../microsoft.comservices_i.c PROPERTIES COMPILE_FLAGS "/Y-") - # asm files require preprocessing using cl.exe on arm64 + # asm files require preprocessing using cl.exe on arm32 and arm64 if(CLR_CMAKE_PLATFORM_ARCH_ARM64) + foreach(ASM_FILE ${VM_SOURCES_WKS_ARCH_ASM}) + + # Preprocess each asm source file get_filename_component(name ${ASM_FILE} NAME_WE) set(ASM_PREPROCESSED_FILE ${CMAKE_CURRENT_BINARY_DIR}/${name}.asm) preprocess_def_file(${ASM_FILE} ${ASM_PREPROCESSED_FILE}) + set(VM_SOURCES_WKS_ARM64_PREPROCESSED_ASM ${VM_SOURCES_WKS_ARM64_PREPROCESSED_ASM} ${ASM_PREPROCESSED_FILE}) + endforeach() set(VM_SOURCES_WKS_ARCH_ASM ${VM_SOURCES_WKS_ARM64_PREPROCESSED_ASM}) + + elseif(CLR_CMAKE_PLATFORM_ARCH_ARM) + + get_include_directories_asm(ASM_INCLUDE_DIRECTORIES) + + foreach(ASM_FILE ${VM_SOURCES_WKS_ARCH_ASM}) + + # Inserts a custom command in CMake build to preprocess each asm source file + get_filename_component(name ${ASM_FILE} NAME_WE) + file(TO_CMAKE_PATH "$ENV{__IntermediatesDir}/${name}.asm" ASM_PREPROCESSED_FILE) + preprocess_def_file(${ASM_FILE} ${ASM_PREPROCESSED_FILE}) + + # On Arm32, compile the preprocessed binary to .obj + # We do not pass any defines since we have already done pre-processing above + set (ASM_CMDLINE "-o ${CMAKE_CURRENT_BINARY_DIR}/${name}.obj ${ASM_PREPROCESSED_FILE}") + + # Generate the batch file that will invoke the assembler + file(TO_CMAKE_PATH "${CMAKE_CURRENT_BINARY_DIR}/runasm_${name}_${CMAKE_BUILD_TYPE}.cmd" ASM_SCRIPT_FILE) + + # ARM32TODO: Set asm options global so that all invocations can use it. + file(GENERATE OUTPUT "${ASM_SCRIPT_FILE}" + CONTENT "\"${CMAKE_ASM_MASM_COMPILER}\" -g ${ASM_INCLUDE_DIRECTORIES} ${ASM_DEFINITIONS} ${ASM_CMDLINE}") + + message("Generated - ${ASM_SCRIPT_FILE}") + + # Need to compile asm file using custom command as include directories are not provided to asm compiler + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}.obj + COMMAND ${ASM_SCRIPT_FILE} + DEPENDS ${ASM_PREPROCESSED_FILE} + COMMENT "Assembling ${ASM_PREPROCESSED_FILE} - ${ASM_SCRIPT_FILE}") + + # mark obj as source that does not require compile + set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/${name}.obj PROPERTIES EXTERNAL_OBJECT TRUE) + + # Add the generated OBJ in the dependency list so that it gets consumed during linkage + set(VM_SOURCES_WKS_ARCH_ASM ${VM_SOURCES_WKS_ARCH_ASM} ${CMAKE_CURRENT_BINARY_DIR}/${name}.obj) + + endforeach() + endif(CLR_CMAKE_PLATFORM_ARCH_ARM64) + endif (WIN32) add_library_clr(cee_wks ${VM_SOURCES_WKS} ${VM_SOURCES_WKS_ARCH_ASM}) if (WIN32) -# Get the current list of definitions -get_compile_definitions(DEFINITIONS) - -get_directory_property(COMPILE_DEFINITIONS_LIST COMPILE_DEFINITIONS) - -# Extract the definitions for the ASM code. Since there is a bug in the cmake that prevents us from -# using the generator expressions, we split the definitions into lists based on the configuration. -foreach(DEFINITION IN LISTS COMPILE_DEFINITIONS_LIST) - if (${DEFINITION} MATCHES "^\\$<\\$]+)>:([^>]+)>$") - # The entry contains generator expression, so insert the definition into a definitions list - # corresponding to the config - string(TOUPPER ${CMAKE_MATCH_1} CONFIG) - set(ASM_DEFINITIONS_${CONFIG} ${ASM_DEFINITIONS_${CONFIG}} ${CMAKE_MATCH_2}) - else() - list(APPEND ASM_DEFINITIONS ${DEFINITION}) + + if(NOT CLR_CMAKE_PLATFORM_ARCH_ARM) + # Get the current list of definitions + get_compile_definitions(DEFINITIONS) + + get_directory_property(COMPILE_DEFINITIONS_LIST COMPILE_DEFINITIONS) + + # Extract the definitions for the ASM code. Since there is a bug in the cmake that prevents us from + # using the generator expressions, we split the definitions into lists based on the configuration. + foreach(DEFINITION IN LISTS COMPILE_DEFINITIONS_LIST) + if (${DEFINITION} MATCHES "^\\$<\\$]+)>:([^>]+)>$") + # The entry contains generator expression, so insert the definition into a definitions list + # corresponding to the config + string(TOUPPER ${CMAKE_MATCH_1} CONFIG) + set(ASM_DEFINITIONS_${CONFIG} ${ASM_DEFINITIONS_${CONFIG}} ${CMAKE_MATCH_2}) + else() + list(APPEND ASM_DEFINITIONS ${DEFINITION}) + endif() + endforeach() + + # Add defines for the ASM. Unfortunately setting it on the target is ignored for asm by the cmake, so we have + # to set it on the sources. + set_property(SOURCE ${VM_SOURCES_WKS_ARCH_ASM} PROPERTY COMPILE_DEFINITIONS ${ASM_DEFINITIONS}) + foreach(CONFIG IN LISTS CMAKE_CONFIGURATION_TYPES) + string(TOUPPER ${CONFIG} CONFIG) + set_property(SOURCE ${VM_SOURCES_WKS_ARCH_ASM} PROPERTY COMPILE_DEFINITIONS_${CONFIG} ${ASM_DEFINITIONS_${CONFIG}}) + endforeach() + + if (CLR_CMAKE_PLATFORM_ARCH_I386) + set_source_files_properties(${VM_SOURCES_WKS_ARCH_ASM} PROPERTIES COMPILE_FLAGS "/Zm /safeseh") + endif (CLR_CMAKE_PLATFORM_ARCH_I386) + + # Convert AsmConstants.h into AsmConstants.inc + find_program(POWERSHELL powershell) + if (POWERSHELL STREQUAL "POWERSHELL-NOTFOUND") + message(FATAL_ERROR "POWERSHELL not found") endif() -endforeach() - -# Add defines for the ASM. Unfortunately setting it on the target is ignored for asm by the cmake, so we have -# to set it on the sources. -set_property(SOURCE ${VM_SOURCES_WKS_ARCH_ASM} PROPERTY COMPILE_DEFINITIONS ${ASM_DEFINITIONS}) -foreach(CONFIG IN LISTS CMAKE_CONFIGURATION_TYPES) - string(TOUPPER ${CONFIG} CONFIG) - set_property(SOURCE ${VM_SOURCES_WKS_ARCH_ASM} PROPERTY COMPILE_DEFINITIONS_${CONFIG} ${ASM_DEFINITIONS_${CONFIG}}) -endforeach() - -if (CLR_CMAKE_PLATFORM_ARCH_I386) - set_source_files_properties(${VM_SOURCES_WKS_ARCH_ASM} PROPERTIES COMPILE_FLAGS "/Zm /safeseh") -endif (CLR_CMAKE_PLATFORM_ARCH_I386) - -# Convert AsmConstants.h into AsmConstants.inc -find_program(POWERSHELL powershell) -if (POWERSHELL STREQUAL "POWERSHELL-NOTFOUND") - message(FATAL_ERROR "POWERSHELL not found") -endif() - -add_custom_command( - # The AsmConstants.inc will be built in the pre-build phase of the cee_wks build - TARGET cee_wks PRE_BUILD - COMMAND ${POWERSHELL} -NoProfile -ExecutionPolicy Bypass -NonInteractive \"& \"\"${VM_DIR}/h2inc.ps1\"\"\" \"\"\"${VM_DIR}/${ARCH_SOURCES_DIR}/asmconstants.h\"\"\" >"${CMAKE_CURRENT_BINARY_DIR}/AsmConstants.tmp" - COMMAND ${CMAKE_CXX_COMPILER} ${DEFINITIONS} /EP "${CMAKE_CURRENT_BINARY_DIR}/AsmConstants.tmp" >"${CMAKE_CURRENT_BINARY_DIR}/AsmConstants.inc" -) + + add_custom_command( + # The AsmConstants.inc will be built in the pre-build phase of the cee_wks build + TARGET cee_wks PRE_BUILD + COMMAND ${POWERSHELL} -NoProfile -ExecutionPolicy Bypass -NonInteractive \"& \"\"${VM_DIR}/h2inc.ps1\"\"\" \"\"\"${VM_DIR}/${ARCH_SOURCES_DIR}/asmconstants.h\"\"\" >"${CMAKE_CURRENT_BINARY_DIR}/AsmConstants.tmp" + COMMAND ${CMAKE_CXX_COMPILER} ${DEFINITIONS} /EP "${CMAKE_CURRENT_BINARY_DIR}/AsmConstants.tmp" >"${CMAKE_CURRENT_BINARY_DIR}/AsmConstants.inc" + ) + endif(NOT CLR_CMAKE_PLATFORM_ARCH_ARM) endif (WIN32) -- cgit v1.2.3 From 6b5695013d972fd1239241a6613865749123e0fa Mon Sep 17 00:00:00 2001 From: Gaurav Khanna Date: Wed, 24 Aug 2016 12:33:27 -0700 Subject: Some minor changes. --- src/vm/wks/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/vm/wks/CMakeLists.txt') diff --git a/src/vm/wks/CMakeLists.txt b/src/vm/wks/CMakeLists.txt index 48ca6b0803..360845d0b2 100644 --- a/src/vm/wks/CMakeLists.txt +++ b/src/vm/wks/CMakeLists.txt @@ -30,7 +30,7 @@ if (WIN32) # Inserts a custom command in CMake build to preprocess each asm source file get_filename_component(name ${ASM_FILE} NAME_WE) - file(TO_CMAKE_PATH "$ENV{__IntermediatesDir}/${name}.asm" ASM_PREPROCESSED_FILE) + file(TO_CMAKE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${name}.asm" ASM_PREPROCESSED_FILE) preprocess_def_file(${ASM_FILE} ${ASM_PREPROCESSED_FILE}) # On Arm32, compile the preprocessed binary to .obj @@ -40,7 +40,6 @@ if (WIN32) # Generate the batch file that will invoke the assembler file(TO_CMAKE_PATH "${CMAKE_CURRENT_BINARY_DIR}/runasm_${name}_${CMAKE_BUILD_TYPE}.cmd" ASM_SCRIPT_FILE) - # ARM32TODO: Set asm options global so that all invocations can use it. file(GENERATE OUTPUT "${ASM_SCRIPT_FILE}" CONTENT "\"${CMAKE_ASM_MASM_COMPILER}\" -g ${ASM_INCLUDE_DIRECTORIES} ${ASM_DEFINITIONS} ${ASM_CMDLINE}") -- cgit v1.2.3