set(CMAKE_SYSTEM_NAME SerenityOS) set(CMAKE_SYSTEM_PROCESSOR "@SERENITY_ARCH@") set(triple @SERENITY_ARCH@-pc-serenity) set(TOOLCHAIN_PATH @SERENITY_SOURCE_DIR@/Toolchain/Local/@SERENITY_ARCH@/bin) set(TOOLCHAIN_PREFIX ${TOOLCHAIN_PATH}/${triple}-) # 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_PREFIX}gcc) set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++) set(CMAKE_ASM_COMPILER ${TOOLCHAIN_PREFIX}gcc) set(CMAKE_LINKER ${TOOLCHAIN_PREFIX}ld) set(CMAKE_AR ${TOOLCHAIN_PREFIX}gcc-ar) set(CMAKE_NM ${TOOLCHAIN_PREFIX}gcc-nm) set(CMAKE_OBJCOPY ${TOOLCHAIN_PREFIX}objcopy) set(CMAKE_RANLIB ${TOOLCHAIN_PREFIX}gcc-ranlib) set(CMAKE_STRIP ${TOOLCHAIN_PREFIX}strip) set(SERENITY_CXXFILT ${TOOLCHAIN_PREFIX}c++filt) # 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 ClangToolchain as well! if("${SERENITY_ARCH}" STREQUAL "riscv64") add_compile_options(-march=rv64gc) endif()