Skip to content
31 changes: 31 additions & 0 deletions libc/cmake/modules/LLVMLibCArchitectures.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,37 @@ else()
"Unsupported libc target operating system ${LIBC_TARGET_OS}")
endif()

# If the compiler target triple is not the same as the triple specified by
# LIBC_TARGET_TRIPLE or LLVM_RUNTIMES_TARGET, we will add a --target option
# if the compiler is clang. If the compiler is GCC we just error out as there
# is no equivalent of an option like --target.
if(explicit_target_triple AND
(NOT (libc_compiler_triple STREQUAL explicit_target_triple)))
set(LIBC_CROSSBUILD TRUE)
if(CMAKE_COMPILER_IS_GNUCXX)
message(FATAL_ERROR
"GCC target triple (${libc_compiler_triple}) and the explicity "
"specified target triple (${explicit_target_triple}) do not match.")
else()
list(APPEND
LIBC_COMPILE_OPTIONS_DEFAULT "--target=${explicit_target_triple}")
endif()
endif()

if(LIBC_TARGET_OS_IS_DARWIN)
execute_process(
COMMAND xcrun --sdk macosx --show-sdk-path
OUTPUT_VARIABLE MACOSX_SDK_PATH
RESULT_VARIABLE MACOSX_SDK_PATH_RESULT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(MACOSX_SDK_PATH_RESULT EQUAL 0)
list(APPEND LIBC_COMPILE_OPTIONS_DEFAULT "-I" "${MACOSX_SDK_PATH}/usr/include")
else()
message(WARNING "Could not find macOS SDK path. `xcrun --sdk macosx --show-sdk-path` failed.")
endif()
endif()

# Windows does not support full mode build.
if (LIBC_TARGET_OS_IS_WINDOWS AND LLVM_LIBC_FULL_BUILD)
message(FATAL_ERROR "Windows does not support full mode build.")
Expand Down
3 changes: 2 additions & 1 deletion libc/include/sys/syscall.h.def
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#ifndef LLVM_LIBC_SYS_SYSCALL_H
#define LLVM_LIBC_SYS_SYSCALL_H

//TODO: Handle non-linux syscalls
#if defined(__linux__)

#include <asm/unistd.h>

Expand Down Expand Up @@ -2361,5 +2361,6 @@
#define SYS_writev __NR_writev
#endif

#endif // __linux__

#endif // LLVM_LIBC_SYS_SYSCALL_H
2 changes: 1 addition & 1 deletion libc/test/UnitTest/ExecuteFunctionUnix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ ProcessStatus invoke_in_subprocess(FunctionCaller *func, int timeout_ms) {
}
::close(pipe_fds[1]);

struct pollfd poll_fd{pipe_fds[0], POLLIN, 0};
pollfd poll_fd{pipe_fds[0], POLLIN, 0};
// No events requested so this call will only return after the timeout or if
// the pipes peer was closed, signaling the process exited.
if (::poll(&poll_fd, 1, timeout_ms) == -1) {
Expand Down
13 changes: 13 additions & 0 deletions libc/test/src/stdlib/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -448,6 +448,19 @@ if(LLVM_LIBC_FULL_BUILD)
libc-stdlib-tests
SRCS
_Exit_test.cpp
DEPENDS
libc.src.__support.OSUtil.osutil
libc.src.stdlib._Exit
)

add_libc_test(
exit_test
# The EXPECT_EXITS test is only availible for unit tests.
UNIT_TEST_ONLY
SUITE
libc-stdlib-tests
SRCS
exit_test.cpp
DEPENDS
libc.src.stdlib._Exit
libc.src.stdlib.exit
Expand Down
4 changes: 0 additions & 4 deletions libc/test/src/stdlib/_Exit_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,9 @@
//===----------------------------------------------------------------------===//

#include "src/stdlib/_Exit.h"
#include "src/stdlib/exit.h"
#include "test/UnitTest/Test.h"

TEST(LlvmLibcStdlib, _Exit) {
EXPECT_EXITS([] { LIBC_NAMESPACE::_Exit(1); }, 1);
EXPECT_EXITS([] { LIBC_NAMESPACE::_Exit(65); }, 65);

EXPECT_EXITS([] { LIBC_NAMESPACE::exit(1); }, 1);
EXPECT_EXITS([] { LIBC_NAMESPACE::exit(65); }, 65);
}
15 changes: 15 additions & 0 deletions libc/test/src/stdlib/exit_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//===-- Unittests for exit -----------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#include "src/stdlib/exit.h"
#include "test/UnitTest/Test.h"

TEST(LlvmLibcStdlib, exit) {
EXPECT_EXITS([] { LIBC_NAMESPACE::exit(1); }, 1);
EXPECT_EXITS([] { LIBC_NAMESPACE::exit(65); }, 65);
}
Loading