diff --git a/.gitmodules b/.gitmodules index 999ed9c9..2f13b950 100644 --- a/.gitmodules +++ b/.gitmodules @@ -38,3 +38,7 @@ path = app/libraries/boost url = https://github.com/boostorg/boost.git ignore = all +[submodule "app/libraries/llvm-project"] + path = app/libraries/llvm + url = https://github.com/llvm/llvm-project.git + shallow = true diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 6c13aa30..c47b12cc 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.16) -project(Skyline LANGUAGES CXX ASM VERSION 0.3) +project(Skyline LANGUAGES C CXX ASM VERSION 0.3) set(BUILD_TESTS OFF CACHE BOOL "Build Tests" FORCE) set(BUILD_TESTING OFF CACHE BOOL "Build Testing" FORCE) @@ -9,8 +9,31 @@ set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED TRUE) set(source_DIR ${CMAKE_SOURCE_DIR}/src/main/cpp) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing") -set(CMAKE_CXX_FLAGS_RELEASE "-Ofast -flto=full -fno-stack-protector -Wno-unused-command-line-argument -DNDEBUG") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing -Wno-unused-command-line-argument") +set(CMAKE_CXX_FLAGS_RELEASE "-Ofast -flto=full -fno-stack-protector -DNDEBUG") + +# libcxx +set(ANDROID_STL "none") +set(LIBCXX_INCLUDE_TESTS OFF) +set(LIBCXX_INCLUDE_BENCHMARKS OFF) +set(LIBCXX_INCLUDE_DOCS OFF) +set(LIBCXX_ENABLE_SHARED FALSE) +set(LIBCXX_ENABLE_ASSERTIONS FALSE) +set(LIBCXX_STANDALONE_BUILD FALSE) +add_subdirectory("libraries/llvm/libcxx") +link_libraries(cxx_static) +get_target_property(LIBCXX_INCLUDE_COMPILE_OPTION cxx-headers INTERFACE_COMPILE_OPTIONS) +string(REGEX REPLACE "-I" "" LIBCXX_INCLUDE_DIRECTORY_LIST "${LIBCXX_INCLUDE_COMPILE_OPTION}") +list(GET LIBCXX_INCLUDE_DIRECTORY_LIST 1 LIBCXX_TARGET_INCLUDE_DIRECTORY) # We just want the target include directory +set_target_properties(cxx-headers PROPERTIES INTERFACE_COMPILE_OPTIONS -isystem${LIBCXX_TARGET_INCLUDE_DIRECTORY}) + +# libcxxabi +set(LIBCXXABI_INCLUDE_TESTS OFF) +set(LIBCXXABI_ENABLE_SHARED FALSE) +set(LIBCXXABI_STANDALONE_BUILD FALSE) +set(LIBCXXABI_LIBCXX_INCLUDES "${LIBCXX_TARGET_INCLUDE_DIRECTORY}" CACHE STRING "" FORCE) +add_subdirectory("libraries/llvm/libcxxabi") +link_libraries(cxxabi_static) # {fmt} add_subdirectory("libraries/fmt") @@ -57,8 +80,10 @@ include_directories(SYSTEM "libraries/mbedtls/include") target_compile_options(mbedcrypto PRIVATE -Wno-everything) # Opus +set(OPUS_INSTALL_CMAKE_CONFIG_MODULE OFF CACHE BOOL "Install Opus CMake package config module" FORCE) include_directories(SYSTEM "libraries/opus/include") add_subdirectory("libraries/opus") +target_compile_definitions(opus PRIVATE OPUS_WILL_BE_SLOW=1) # libopus will warn when built without optimizations # Perfetto SDK include_directories(SYSTEM "libraries/perfetto/sdk") diff --git a/app/libraries/llvm b/app/libraries/llvm new file mode 160000 index 00000000..08e3a5cc --- /dev/null +++ b/app/libraries/llvm @@ -0,0 +1 @@ +Subproject commit 08e3a5ccd952edee36b3c002e3a29c6b1b5153de diff --git a/app/src/main/cpp/skyline/common/span.h b/app/src/main/cpp/skyline/common/span.h index 2d0f8c72..47e06b05 100644 --- a/app/src/main/cpp/skyline/common/span.h +++ b/app/src/main/cpp/skyline/common/span.h @@ -98,7 +98,7 @@ namespace skyline { return this->data() < pointer; } - constexpr bool operator<(typename std::span::const_iterator it) const { + constexpr bool operator<(typename std::span::iterator it) const { return this->begin() < it; } diff --git a/app/src/main/cpp/skyline/services/nvdrv/devices/nvhost/as_gpu.cpp b/app/src/main/cpp/skyline/services/nvdrv/devices/nvhost/as_gpu.cpp index 9d3e9c89..712c5a99 100644 --- a/app/src/main/cpp/skyline/services/nvdrv/devices/nvhost/as_gpu.cpp +++ b/app/src/main/cpp/skyline/services/nvdrv/devices/nvhost/as_gpu.cpp @@ -286,7 +286,7 @@ namespace skyline::service::nvdrv::device::nvhost { bigPageSize, asFd, flags, vaRangeStart, vaRangeEnd, vaRangeSplit); if (bigPageSize) { - if (!std::ispow2(bigPageSize)) { + if (!std::has_single_bit(bigPageSize)) { state.logger->Error("Non power-of-2 big page size: 0x{:X}!", bigPageSize); return PosixResult::InvalidArgument; } diff --git a/app/src/main/cpp/skyline/services/nvdrv/devices/nvmap.cpp b/app/src/main/cpp/skyline/services/nvdrv/devices/nvmap.cpp index 092d5122..b5c92a68 100644 --- a/app/src/main/cpp/skyline/services/nvdrv/devices/nvmap.cpp +++ b/app/src/main/cpp/skyline/services/nvdrv/devices/nvmap.cpp @@ -47,7 +47,7 @@ namespace skyline::service::nvdrv::device { if (!handle) [[unlikely]] return PosixResult::InvalidArgument; - if (!std::ispow2(align)) [[unlikely]] + if (!std::has_single_bit(align)) [[unlikely]] return PosixResult::InvalidArgument; // Force page size alignment at a minimum