diff --git a/libc/cmake/modules/LLVMLibCArchitectures.cmake b/libc/cmake/modules/LLVMLibCArchitectures.cmake index 1e5ed723194a2..fbb1091ddabab 100644 --- a/libc/cmake/modules/LLVMLibCArchitectures.cmake +++ b/libc/cmake/modules/LLVMLibCArchitectures.cmake @@ -39,8 +39,10 @@ function(get_arch_and_system_from_triple triple arch_var sys_var) set(target_arch "arm") elseif(target_arch MATCHES "^aarch64") set(target_arch "aarch64") - elseif(target_arch MATCHES "(x86_64)|(AMD64|amd64)|(^i.86$)") + elseif(target_arch MATCHES "(x86_64)|(AMD64|amd64)") set(target_arch "x86_64") + elseif(target_arch MATCHES "(^i.86$)") + set(target_arch "i386") elseif(target_arch MATCHES "^(powerpc|ppc)") set(target_arch "power") elseif(target_arch MATCHES "^riscv32") @@ -147,6 +149,8 @@ if(LIBC_TARGET_ARCHITECTURE STREQUAL "arm") elseif(LIBC_TARGET_ARCHITECTURE STREQUAL "aarch64") set(LIBC_TARGET_ARCHITECTURE_IS_AARCH64 TRUE) elseif(LIBC_TARGET_ARCHITECTURE STREQUAL "x86_64") + set(LIBC_TARGET_ARCHITECTURE_IS_X86_64 TRUE) +elseif(LIBC_TARGET_ARCHITECTURE STREQUAL "i386") set(LIBC_TARGET_ARCHITECTURE_IS_X86 TRUE) elseif(LIBC_TARGET_ARCHITECTURE STREQUAL "riscv64") set(LIBC_TARGET_ARCHITECTURE_IS_RISCV64 TRUE) diff --git a/libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake b/libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake index 3b6b6f56fc80c..c09d4751d3907 100644 --- a/libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake +++ b/libc/cmake/modules/LLVMLibCCheckCpuFeatures.cmake @@ -5,10 +5,10 @@ # Initialize ALL_CPU_FEATURES as empty list. set(ALL_CPU_FEATURES "") -if(${LIBC_TARGET_ARCHITECTURE_IS_X86}) +if(LIBC_TARGET_ARCHITECTURE_IS_X86_64) set(ALL_CPU_FEATURES SSE2 SSE4_2 AVX AVX2 AVX512F AVX512BW FMA) set(LIBC_COMPILE_OPTIONS_NATIVE -march=native) -elseif(${LIBC_TARGET_ARCHITECTURE_IS_AARCH64}) +elseif(LIBC_TARGET_ARCHITECTURE_IS_AARCH64) set(ALL_CPU_FEATURES "FullFP16") set(LIBC_COMPILE_OPTIONS_NATIVE -mcpu=native) endif() diff --git a/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake b/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake index e30f7d322eb02..65851f1c86571 100644 --- a/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake +++ b/libc/cmake/modules/LLVMLibCCompileOptionRules.cmake @@ -10,7 +10,7 @@ function(_get_compile_options_from_flags output_var) if(LLVM_COMPILER_IS_GCC_COMPATIBLE) if(ADD_FMA_FLAG) - if(LIBC_TARGET_ARCHITECTURE_IS_X86) + if(LIBC_TARGET_ARCHITECTURE_IS_X86_64) list(APPEND compile_options "-mavx2") list(APPEND compile_options "-mfma") elseif(LIBC_TARGET_ARCHITECTURE_IS_RISCV64) @@ -18,7 +18,7 @@ function(_get_compile_options_from_flags output_var) endif() endif() if(ADD_ROUND_OPT_FLAG) - if(LIBC_TARGET_ARCHITECTURE_IS_X86) + if(LIBC_TARGET_ARCHITECTURE_IS_X86_64) # ROUND_OPT_FLAG is only enabled if SSE4.2 is detected, not just SSE4.1, # because there was code to check for SSE4.2 already, and few CPUs only # have SSE4.1. @@ -145,7 +145,7 @@ function(_get_common_compile_options output_var flags) endif() if (LIBC_CONF_KEEP_FRAME_POINTER) list(APPEND compile_options "-fno-omit-frame-pointer") - if (LIBC_TARGET_ARCHITECTURE_IS_X86) + if (LIBC_TARGET_ARCHITECTURE_IS_X86_64) list(APPEND compile_options "-mno-omit-leaf-frame-pointer") endif() endif() diff --git a/libc/cmake/modules/LLVMLibCFlagRules.cmake b/libc/cmake/modules/LLVMLibCFlagRules.cmake index 69f31ace80dd3..e5b0e249c9067 100644 --- a/libc/cmake/modules/LLVMLibCFlagRules.cmake +++ b/libc/cmake/modules/LLVMLibCFlagRules.cmake @@ -268,21 +268,21 @@ set(EXPLICIT_SIMD_OPT_FLAG "EXPLICIT_SIMD_OPT") set(MISC_MATH_BASIC_OPS_OPT_FLAG "MISC_MATH_BASIC_OPS_OPT") # Skip FMA_OPT flag for targets that don't support fma. -if(NOT((LIBC_TARGET_ARCHITECTURE_IS_X86 AND (LIBC_CPU_FEATURES MATCHES "FMA")) OR +if(NOT((LIBC_TARGET_ARCHITECTURE_IS_X86_64 AND (LIBC_CPU_FEATURES MATCHES "FMA")) OR LIBC_TARGET_ARCHITECTURE_IS_RISCV64)) set(SKIP_FLAG_EXPANSION_FMA_OPT TRUE) endif() # Skip EXPLICIT_SIMD_OPT flag for targets that don't support SSE2. # Note: one may want to revisit it if they want to control other explicit SIMD -if(NOT(LIBC_TARGET_ARCHITECTURE_IS_X86 AND (LIBC_CPU_FEATURES MATCHES "SSE2"))) +if(NOT(LIBC_TARGET_ARCHITECTURE_IS_X86_64 AND (LIBC_CPU_FEATURES MATCHES "SSE2"))) set(SKIP_FLAG_EXPANSION_EXPLICIT_SIMD_OPT TRUE) endif() # Skip ROUND_OPT flag for targets that don't support rounding instructions. On # x86, these are SSE4.1 instructions, but we already had code to check for # SSE4.2 support. -if(NOT((LIBC_TARGET_ARCHITECTURE_IS_X86 AND (LIBC_CPU_FEATURES MATCHES "SSE4_2")) OR +if(NOT((LIBC_TARGET_ARCHITECTURE_IS_X86_64 AND (LIBC_CPU_FEATURES MATCHES "SSE4_2")) OR LIBC_TARGET_ARCHITECTURE_IS_AARCH64 OR LIBC_TARGET_OS_IS_GPU)) set(SKIP_FLAG_EXPANSION_ROUND_OPT TRUE) endif() diff --git a/libc/cmake/modules/LLVMLibCTestRules.cmake b/libc/cmake/modules/LLVMLibCTestRules.cmake index 35cc6fe46be53..c3a0f371cd620 100644 --- a/libc/cmake/modules/LLVMLibCTestRules.cmake +++ b/libc/cmake/modules/LLVMLibCTestRules.cmake @@ -402,7 +402,7 @@ function(add_integration_test test_name) if(NOT INTEGRATION_TEST_SRCS) message(FATAL_ERROR "The SRCS list for add_integration_test is missing.") endif() - if(NOT TARGET libc.startup.${LIBC_TARGET_OS}.crt1) + if(NOT LLVM_LIBC_FULL_BUILD AND NOT TARGET libc.startup.${LIBC_TARGET_OS}.crt1) message(FATAL_ERROR "The 'crt1' target for the integration test is missing.") endif() diff --git a/libc/config/linux/i386/entrypoints.txt b/libc/config/linux/i386/entrypoints.txt new file mode 100644 index 0000000000000..6548c9b816c93 --- /dev/null +++ b/libc/config/linux/i386/entrypoints.txt @@ -0,0 +1,11 @@ +set(TARGET_LIBC_ENTRYPOINTS + # errno.h entrypoints + libc.src.errno.errno +) + +set(TARGET_LIBM_ENTRYPOINTS "") + +set(TARGET_LLVMLIBC_ENTRYPOINTS + ${TARGET_LIBC_ENTRYPOINTS} + ${TARGET_LIBM_ENTRYPOINTS} +) diff --git a/libc/config/linux/i386/headers.txt b/libc/config/linux/i386/headers.txt new file mode 100644 index 0000000000000..f34ff9141cbca --- /dev/null +++ b/libc/config/linux/i386/headers.txt @@ -0,0 +1,3 @@ +set(TARGET_PUBLIC_HEADERS + libc.include.assert +) diff --git a/libc/src/__support/OSUtil/linux/i386/CMakeLists.txt b/libc/src/__support/OSUtil/linux/i386/CMakeLists.txt new file mode 100644 index 0000000000000..aa35d7e153d1b --- /dev/null +++ b/libc/src/__support/OSUtil/linux/i386/CMakeLists.txt @@ -0,0 +1,11 @@ +add_header_library( + linux_i386_util + HDRS + syscall.h +) + +add_header_library( + vdso + HDRS + vdso.h +) diff --git a/libc/src/__support/OSUtil/linux/i386/vdso.h b/libc/src/__support/OSUtil/linux/i386/vdso.h new file mode 100644 index 0000000000000..e69de29bb2d1d