8 changed files with 217 additions and 64 deletions
-
49CMakeLists.txt
-
102cmake/ConfigurePlatform.cmake
-
17cmake/FindPythonInterp.cmake
-
51cmake/MSVCAssemblyHelper.cmake
-
36thirdparty/libcontext/CMakeLists.txt
-
2thirdparty/sentry-native/CMakeLists.txt
-
13vcpkg-configuration.json
-
11vcpkg.json
@ -0,0 +1,102 @@ |
|||
if( MSVC ) |
|||
cmake_policy( SET CMP0091 NEW ) |
|||
|
|||
# CMake does not set CMAKE_SYSTEM_PROCESSOR correctly for MSVC |
|||
# and it will always return the host instead of the target arch |
|||
if("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "ARM64") |
|||
set( KICAD_BUILD_ARCH "arm64" ) |
|||
set( KICAD_BUILD_ARCH_ARM64 1 ) |
|||
elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "ARM") |
|||
set( KICAD_BUILD_ARCH "arm" ) |
|||
set( KICAD_BUILD_ARCH_ARM 1 ) |
|||
elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "X86") |
|||
set( KICAD_BUILD_ARCH "x86" ) |
|||
set( KICAD_BUILD_ARCH_X86 1 ) |
|||
elseif("${MSVC_C_ARCHITECTURE_ID}" STREQUAL "x64") |
|||
set( KICAD_BUILD_ARCH "x64" ) |
|||
set( KICAD_BUILD_ARCH_X64 1 ) |
|||
else() |
|||
message(FATAL_ERROR "Failed to determine the MSVC target architecture: ${MSVC_C_ARCHITECTURE_ID}") |
|||
endif() |
|||
|
|||
add_compile_definitions( KICAD_BUILD_ARCH=${KICAD_BUILD_ARCH} ) |
|||
|
|||
# CMake does not set CMAKE_SYSTEM_PROCESSOR correctly for MSVC |
|||
# and it will always return the host instead of the target arch |
|||
if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "ARM64") |
|||
set( KICAD_HOST_ARCH "arm64" ) |
|||
set( KICAD_HOST_ARCH_ARM64 1 ) |
|||
elseif("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "ARM") |
|||
set( KICAD_HOST_ARCH "arm" ) |
|||
set( KICAD_HOST_ARCH_ARM 1 ) |
|||
elseif("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "X86") |
|||
set( KICAD_HOST_ARCH "x86" ) |
|||
set( KICAD_HOST_ARCH_X86 1 ) |
|||
elseif("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "AMD64") |
|||
set( KICAD_HOST_ARCH "x64" ) |
|||
set( KICAD_HOST_ARCH_X64 1 ) |
|||
else() |
|||
message(FATAL_ERROR "Failed to determine the host architecture: ${CMAKE_SYSTEM_PROCESSOR}") |
|||
endif() |
|||
else() |
|||
if ( NOT CMAKE_SIZEOF_VOID_P EQUAL 8 ) |
|||
set( KICAD_BUILD_ARCH "x86" ) |
|||
set( KICAD_BUILD_ARCH_X86 1 ) |
|||
elseif( CMAKE_SIZEOF_VOID_P EQUAL 8 ) |
|||
set( KICAD_BUILD_ARCH "x64" ) |
|||
set( KICAD_BUILD_ARCH_X64 1 ) |
|||
endif() |
|||
endif() |
|||
|
|||
|
|||
if( MSVC ) |
|||
# This is a workaround borrowed from https://github.com/dotnet/runtime/blob/main/eng/native/configurecompiler.cmake |
|||
# CMake currently cannot handle the fact that "armasm" is used in combination with standard MSVC "cl" for ARM targets |
|||
# So this is basically a hack (incombination with the MSVCAssemblyHelper.cmake) to make this all work |
|||
if(KICAD_BUILD_ARCH_ARM) |
|||
message( "Configuring ARM assembler" ) |
|||
# Explicitly specify the assembler to be used for Arm32 compile |
|||
file(TO_CMAKE_PATH "$ENV{VCToolsInstallDir}\\bin\\HostX86\\arm\\armasm.exe" CMAKE_ASM_COMPILER) |
|||
|
|||
set(CMAKE_ASM_MASM_COMPILER ${CMAKE_ASM_COMPILER}) |
|||
message("CMAKE_ASM_MASM_COMPILER explicitly set to: ${CMAKE_ASM_MASM_COMPILER}") |
|||
|
|||
# Enable generic assembly compilation to avoid CMake generate VS proj files that explicitly |
|||
# use ml[64].exe as the assembler. |
|||
enable_language(ASM) |
|||
set(CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded "") |
|||
set(CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL "") |
|||
set(CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug "") |
|||
set(CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL "") |
|||
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -g <INCLUDES> <FLAGS> -o <OBJECT> <SOURCE>") |
|||
|
|||
elseif(KICAD_BUILD_ARCH_ARM64) |
|||
message( "Configuring ARM64 assembler" ) |
|||
|
|||
# Explicitly specify the assembler to be used for Arm64 compile |
|||
file(TO_CMAKE_PATH "$ENV{VCToolsInstallDir}\\bin\\HostX86\\arm64\\armasm64.exe" CMAKE_ASM_COMPILER) |
|||
|
|||
set(CMAKE_ASM_MASM_COMPILER ${CMAKE_ASM_COMPILER}) |
|||
message("CMAKE_ASM_MASM_COMPILER explicitly set to: ${CMAKE_ASM_MASM_COMPILER}") |
|||
|
|||
# Enable generic assembly compilation to avoid CMake generate VS proj files that explicitly |
|||
# use ml[64].exe as the assembler. |
|||
enable_language(ASM) |
|||
set(CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded "") |
|||
set(CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL "") |
|||
set(CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug "") |
|||
set(CMAKE_ASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL "") |
|||
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -g <INCLUDES> <FLAGS> -o <OBJECT> <SOURCE>") |
|||
else() |
|||
message( "Configuring MASM assembler" ) |
|||
if(KICAD_BUILD_ARCH_X86) |
|||
set( CMAKE_ASM_MASM_FLAGS "${CMAKE_ASM_MASM_FLAGS} /safeseh" ) |
|||
endif() |
|||
enable_language(ASM_MASM) |
|||
|
|||
set(CMAKE_ASM_MASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreaded "") |
|||
set(CMAKE_ASM_MASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDLL "") |
|||
set(CMAKE_ASM_MASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebug "") |
|||
set(CMAKE_ASM_MASM_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_MultiThreadedDebugDLL "") |
|||
endif() |
|||
endif() |
|||
@ -0,0 +1,51 @@ |
|||
# compile_asm(TARGET target ASM_FILES file1 [file2 ...] OUTPUT_OBJECTS [variableName]) |
|||
# CMake does not support the ARM or ARM64 assemblers on Windows when using the |
|||
# MSBuild generator. When the MSBuild generator is in use, we manually compile the assembly files |
|||
# using this function. |
|||
# |
|||
# Borrowed from dotnet/runtime, licensed under MIT |
|||
# Copyright (c) .NET Foundation and Contributors |
|||
# https://github.com/dotnet/runtime/blob/main/eng/native/functions.cmake |
|||
function(compile_asm) |
|||
set(options "") |
|||
set(oneValueArgs TARGET OUTPUT_OBJECTS) |
|||
set(multiValueArgs ASM_FILES) |
|||
cmake_parse_arguments(COMPILE_ASM "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGV}) |
|||
|
|||
get_include_directories_asm(ASM_INCLUDE_DIRECTORIES) |
|||
|
|||
set (ASSEMBLED_OBJECTS "") |
|||
|
|||
foreach(ASM_FILE ${COMPILE_ASM_ASM_FILES}) |
|||
get_filename_component(name ${ASM_FILE} NAME_WE) |
|||
# Produce object file where CMake would store .obj files for an OBJECT library. |
|||
# ex: artifacts\obj\coreclr\windows.arm64.Debug\src\vm\wks\cee_wks.dir\Debug\AsmHelpers.obj |
|||
set (OBJ_FILE "${CMAKE_CURRENT_BINARY_DIR}/${COMPILE_ASM_TARGET}.dir/${CMAKE_CFG_INTDIR}/${name}.obj") |
|||
|
|||
# Need to compile asm file using custom command as include directories are not provided to asm compiler |
|||
add_custom_command(OUTPUT ${OBJ_FILE} |
|||
COMMAND "${CMAKE_ASM_COMPILER}" -g ${ASM_INCLUDE_DIRECTORIES} -o ${OBJ_FILE} ${ASM_FILE} |
|||
DEPENDS ${ASM_FILE} |
|||
COMMENT "Assembling ${ASM_FILE} ---> \"${CMAKE_ASM_COMPILER}\" -g ${ASM_INCLUDE_DIRECTORIES} -o ${OBJ_FILE} ${ASM_FILE}") |
|||
|
|||
# mark obj as source that does not require compile |
|||
set_source_files_properties(${OBJ_FILE} PROPERTIES EXTERNAL_OBJECT TRUE) |
|||
|
|||
# Add the generated OBJ in the dependency list so that it gets consumed during linkage |
|||
list(APPEND ASSEMBLED_OBJECTS ${OBJ_FILE}) |
|||
endforeach() |
|||
|
|||
set(${COMPILE_ASM_OUTPUT_OBJECTS} ${ASSEMBLED_OBJECTS} PARENT_SCOPE) |
|||
endfunction() |
|||
|
|||
|
|||
# Build a list of include directories for consumption by the assembler |
|||
function(get_include_directories_asm IncludeDirectories) |
|||
get_directory_property(dirs INCLUDE_DIRECTORIES) |
|||
|
|||
foreach(dir IN LISTS dirs) |
|||
list(APPEND INC_DIRECTORIES -I${dir};) |
|||
endforeach() |
|||
|
|||
set(${IncludeDirectories} ${INC_DIRECTORIES} PARENT_SCOPE) |
|||
endfunction(get_include_directories_asm) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue