set(CMAKE_SYSTEM_NAME SerenityOS) set(CMAKE_SYSTEM_PROCESSOR "@SERENITY_ARCH@") set(triple @SERENITY_ARCH@-pc-serenity) set(TOOLCHAIN_ROOT @SERENITY_SOURCE_DIR@/Toolchain/Local/clang/) set(TOOLCHAIN_PATH ${TOOLCHAIN_ROOT}/bin) # where to read from/write to set(CMAKE_SYSROOT @SERENITY_BUILD_DIR@/Root) set(CMAKE_STAGING_PREFIX @SERENITY_BUILD_DIR@/Root/usr/local) set(CMAKE_INSTALL_PREFIX /usr/local) set(CMAKE_INSTALL_DATAROOTDIR share) set(CMAKE_C_COMPILER ${TOOLCHAIN_PATH}/clang) set(CMAKE_C_COMPILER_TARGET ${triple}) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PATH}/clang++) set(CMAKE_CXX_COMPILER_TARGET ${triple}) set(CMAKE_ASM_COMPILER ${TOOLCHAIN_PATH}/clang) set(CMAKE_ASM_COMPILER_TARGET ${triple}) set(CMAKE_LINKER ${TOOLCHAIN_PATH}/ld.lld) set(CMAKE_AR ${TOOLCHAIN_PATH}/llvm-ar) set(CMAKE_NM ${TOOLCHAIN_PATH}/llvm-nm) set(CMAKE_OBJCOPY ${TOOLCHAIN_PATH}/llvm-objcopy) set(CMAKE_RANLIB ${TOOLCHAIN_PATH}/llvm-ranlib) set(CMAKE_STRIP ${TOOLCHAIN_PATH}/llvm-strip) set(SERENITY_CXXFILT ${TOOLCHAIN_PATH}/llvm-cxxfilt) # FIXME: We could eliminate this setting by building LibC and support asm files (crti.o, crtn.o) # in a separate build stage before the main build to ensure that LibC is available # for the try_compile check for the main build. # Note that `set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)` is not a suitable replacement, # since applications might try and use `try_compile()` to detect which library a symbol is in, # which doesn't work when using static linking. # Instead, just tell CMake directly that the compiler works fine, so that it doesn't have to run # a compile check before the build. set(CMAKE_C_COMPILER_WORKS TRUE) set(CMAKE_CXX_COMPILER_WORKS TRUE) 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 BOTH) # Sets a common default architecture for all toolchains. Be sure to update this in GNUToolchain as well! if("${SERENITY_ARCH}" STREQUAL "riscv64") add_compile_options(-march=rv64gc) endif()