Skip to content

Commit e6ddd0c

Browse files
committed
cmake: add ARM64 build support in Common.cmake
1 parent 5b0368d commit e6ddd0c

1 file changed

Lines changed: 38 additions & 13 deletions

File tree

src/libraries/qcommon-console/Common.cmake

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@ if(WIN32)
1515
endif()
1616

1717
if(UNIX)
18-
list(APPEND QCOMMONCONSOLE_DEFINITIONS __X86_64__)
18+
# Detect architecture for Linux builds
19+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64")
20+
list(APPEND QCOMMONCONSOLE_DEFINITIONS __AARCH64__)
21+
else()
22+
list(APPEND QCOMMONCONSOLE_DEFINITIONS __X86_64__)
23+
endif()
1924
set(QCOMMONCONSOLE_CXX_FLAGS
2025
-Werror
2126
-Wno-unused-result
@@ -40,29 +45,49 @@ if(UNIX)
4045
)
4146
endif()
4247

43-
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
44-
list(APPEND QCOMMONCONSOLE_DEFINITIONS _DEBUG DEBUG)
45-
if(WIN32)
46-
set(CONFIGURATION "x64/Debug")
48+
# Determine architecture label for output directory
49+
if(WIN32)
50+
if(CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "ARM64|aarch64")
51+
set(_QEPM_ARCH "ARM64")
4752
else()
48-
set(CONFIGURATION "Linux/Debug")
53+
set(_QEPM_ARCH "x64")
4954
endif()
50-
else()
51-
list(APPEND QCOMMONCONSOLE_DEFINITIONS _NDEBUG NDEBUG)
52-
if(WIN32)
53-
set(CONFIGURATION "x64/Release")
55+
elseif(UNIX)
56+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64|ARM64")
57+
set(_QEPM_ARCH "Linux-ARM64")
5458
else()
55-
set(CONFIGURATION "Linux/Release")
59+
set(_QEPM_ARCH "Linux")
5660
endif()
5761
endif()
5862

63+
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
64+
list(APPEND QCOMMONCONSOLE_DEFINITIONS _DEBUG DEBUG)
65+
set(CONFIGURATION "${_QEPM_ARCH}/Debug")
66+
else()
67+
list(APPEND QCOMMONCONSOLE_DEFINITIONS _NDEBUG NDEBUG)
68+
set(CONFIGURATION "${_QEPM_ARCH}/Release")
69+
endif()
70+
5971
set(BUILDROOT ${CMAKE_SOURCE_DIR}/__Builds/${CONFIGURATION})
6072
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BUILDROOT}/bin)
6173
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${BUILDROOT}/lib)
6274
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${BUILDROOT}/lib)
6375

6476
if(WIN32)
65-
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${Qt6_DIR}/../../../bin")
77+
# For cross-compilation (e.g. ARM64 target on x64 host), windeployqt must
78+
# come from the HOST Qt installation, not the target sysroot.
79+
# QT_HOST_PATH is set by cmake when cross-compiling; fall back to Qt6_DIR.
80+
if(DEFINED QT_HOST_PATH)
81+
find_program(WINDEPLOYQT_EXECUTABLE windeployqt
82+
HINTS "${QT_HOST_PATH}/bin"
83+
NO_DEFAULT_PATH
84+
)
85+
endif()
86+
if(NOT WINDEPLOYQT_EXECUTABLE)
87+
find_program(WINDEPLOYQT_EXECUTABLE windeployqt
88+
HINTS "${Qt6_DIR}/../../../bin"
89+
)
90+
endif()
6691
if(NOT WINDEPLOYQT_EXECUTABLE)
6792
set(WINDEPLOYQT_EXECUTABLE windeployqt)
6893
endif()
@@ -137,4 +162,4 @@ function(QCommonConsoleSettings target_name)
137162
target_link_options(${target_name} PRIVATE ${QCOMMONCONSOLE_LINK_FLAGS})
138163
endif()
139164
target_include_directories(${target_name} PRIVATE ${BUILDROOT}/ui/QCommon)
140-
endfunction()
165+
endfunction()

0 commit comments

Comments
 (0)