Skip to content

Commit

Permalink
Improve x86-linux build support.
Browse files Browse the repository at this point in the history
We provide CA_BUILD_32_BITS to attempt to build a 32-bit version of
oneAPI Construction Kit, but this is fragile and does not always work.
Notably, this has stopped working in our internal CI because CMake
sometimes fails to pick up libraries required by LLVM.

Regular cross compilation which we use for other targets is more
reliable. To allow this, add an x86-toolchain.cmake file.

This also reveals that our x86 detection was incomplete and would result
in oneAPI Construction Kit failing to build on native 32-bit platforms,
because CMAKE_SYSTEM_PROCESSOR will not be "x86", it will be e.g.
"i686". Account for this in the detection.
  • Loading branch information
hvdijk committed Dec 24, 2024
1 parent 5863b9a commit 76c9860
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 10 deletions.
4 changes: 1 addition & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,7 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL MSVC AND
endif()

if(MSVC AND (CMAKE_SIZEOF_VOID_P EQUAL 4) AND
(CMAKE_SYSTEM_PROCESSOR STREQUAL x86 OR
CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR
CMAKE_SYSTEM_PROCESSOR STREQUAL AMD64))
(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|x86(_64)?|AMD64)$"))
message(FATAL_ERROR "Windows 32 bit is no longer supported by oneAPI Construction Kit")
endif()

Expand Down
4 changes: 1 addition & 3 deletions cmake/AddCA.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,7 @@ if (CA_ENABLE_TESTS)
endif()

if(NOT MSVC AND (CA_BUILD_32_BITS OR CMAKE_SIZEOF_VOID_P EQUAL 4) AND
(CMAKE_SYSTEM_PROCESSOR STREQUAL x86 OR
CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR
CMAKE_SYSTEM_PROCESSOR STREQUAL AMD64))
(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i[3-6]86|x86(_64)?|AMD64)$"))
# Enable 32 bit builds when requested or detected and enable sse3
# instructions.
set(BUILD_32_BIT_FLAG "-m32 -msse3 -mfpmath=sse")
Expand Down
4 changes: 1 addition & 3 deletions modules/compiler/targets/host/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -152,9 +152,7 @@ if(CA_HOST_CROSS_COMPILERS)

# Get the current architecture.
string(TOUPPER "${CMAKE_SYSTEM_PROCESSOR}" CMAKE_SYSTEM_PROCESSOR_TOUPPER)
if(CMAKE_SYSTEM_PROCESSOR_TOUPPER STREQUAL X86 OR
CMAKE_SYSTEM_PROCESSOR_TOUPPER STREQUAL X86_64 OR
CMAKE_SYSTEM_PROCESSOR_TOUPPER STREQUAL AMD64)
if(CMAKE_SYSTEM_PROCESSOR_TOUPPER MATCHES "^(I[3-6]86|X86(_64)?|AMD64)$")
if(CA_BUILD_32_BITS OR CMAKE_SIZEOF_VOID_P EQUAL 4)
set(HostArchitecture x86)
else()
Expand Down
2 changes: 1 addition & 1 deletion modules/mux/targets/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ function(get_ca_host_arch parent_variable_name)
set(${parent_variable_name} "Arm" PARENT_SCOPE)
elseif(ARCH STREQUAL "ARM64" OR ARCH STREQUAL "AARCH64")
set(${parent_variable_name} "AArch64" PARENT_SCOPE)
elseif(ARCH STREQUAL "X86")
elseif(ARCH MATCHES "^(I[3-6]86|X86)$")
set(${parent_variable_name} "x86" PARENT_SCOPE)
elseif(ARCH STREQUAL "X86_64" OR ARCH STREQUAL "AMD64")
if(CA_BUILD_32_BITS OR ${CMAKE_SIZEOF_VOID_P} EQUAL 4)
Expand Down
28 changes: 28 additions & 0 deletions platform/x86-linux/x86-toolchain.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Copyright (C) Codeplay Software Limited
#
# Licensed under the Apache License, Version 2.0 (the "License") with LLVM
# Exceptions; you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://github.com/codeplaysoftware/oneapi-construction-kit/blob/main/LICENSE.txt
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR i686)

set(TOOLCHAIN_TRIPLE "i686-linux-gnu")
set(CMAKE_C_FLAGS -m32)
set(CMAKE_CXX_FLAGS -m32)
set(PKG_CONFIG_EXECUTABLE "${TOOLCHAIN_TRIPLE}-pkg-config")

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

0 comments on commit 76c9860

Please sign in to comment.