This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

Adjust cmake files and add toolchain file... Also add back Dockerfile for easy way to build aarch64

Ivan Ilak (Apr 9, 2023, 10:20 PM +0200) 8735d1a4 9729d1d7

+113 -14
+2 -2
.gitignore
··· 9 9 **/build 10 10 11 11 **/export 12 - 13 - **/docs 12 + **/libs 13 + **/docs
+3 -8
CMakeLists.txt
··· 1 1 cmake_minimum_required (VERSION 3.17) 2 2 3 - set(CMAKE_SYSTEM_NAME Linux) 4 - set(CMAKE_SYSTEM_PROCESSOR ARM) 5 - 6 3 include(cmake/target.cmake) 7 4 setup("MODEL_0" ${CMAKE_CURRENT_SOURCE_DIR}) 8 5 9 - # We are using this inside of a docker container that is cross-compiling and we 10 - # thus want to skip any test, since they will inevitably fail 11 - set(CMAKE_C_COMPILER_WORKS 1) 12 - set(CMAKE_CXX_COMPILER_WORKS 1) 6 + set(CMAKE_DEPENDS_USE_COMPILER ON) 13 7 14 8 enable_language(C ASM) 15 9 ··· 24 18 25 19 set(CMAKE_EXPORT_COMPILE_COMMANDS ON) 26 20 27 - add_subdirectory(os) 21 + add_subdirectory(os) 22 + # add_subdirectory(tests)
+49
Dockerfile
··· 1 + FROM ubuntu:22.04 AS base 2 + 3 + ARG BUILD_TYPE=Release 4 + ARG BUILD_DIR=build 5 + 6 + RUN apt-get update && apt-get install -y \ 7 + gdb-multiarch \ 8 + wget \ 9 + xz-utils \ 10 + make cmake ninja-build bzip2 mc file 11 + 12 + RUN mkdir /usr/opt/ 13 + 14 + 15 + RUN wget --directory-prefix=/usr/opt/ https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-aarch64-aarch64-none-elf.tar.xz 16 + RUN mkdir -p /usr/opt/aarch64-none-elf 17 + RUN tar -xf /usr/opt/gcc-arm-10.3-2021.07-aarch64-aarch64-none-elf.tar.xz -C /usr/opt/aarch64-none-elf --strip-components=1 18 + RUN ln -s /usr/opt/aarch64-none-elf/bin/aarch64-none-elf-gcc /usr/bin/aarch64-none-elf-gcc 19 + RUN ln -s /usr/opt/aarch64-none-elf/bin/aarch64-none-elf-ar /usr/bin/aarch64-none-elf-ar 20 + RUN ln -s /usr/opt/aarch64-none-elf/bin/aarch64-none-elf-as /usr/bin/aarch64-none-elf-as 21 + RUN ln -s /usr/opt/aarch64-none-elf/bin/aarch64-none-elf-ld /usr/bin/aarch64-none-elf-ld 22 + RUN ln -s /usr/opt/aarch64-none-elf/bin/aarch64-none-elf-objcopy /usr/bin/aarch64-none-elf-objcopy 23 + 24 + RUN wget --directory-prefix=/usr/opt/ https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-aarch64-linux.tar.bz2 25 + RUN mkdir -p /usr/opt/gcc-arm-none-eabi 26 + RUN tar -xvjf /usr/opt/gcc-arm-none-eabi-10.3-2021.10-aarch64-linux.tar.bz2 -C /usr/opt/gcc-arm-none-eabi --strip-components=1 27 + RUN ln -s /usr/opt/gcc-arm-none-eabi/bin/arm-none-eabi-gcc /usr/bin/arm-none-eabi-gcc 28 + RUN ln -s /usr/opt/gcc-arm-none-eabi/bin/arm-none-eabi-ar /usr/bin/arm-none-eabi-ar 29 + RUN ln -s /usr/opt/gcc-arm-none-eabi/bin/arm-none-eabi-as /usr/bin/arm-none-eabi-as 30 + RUN ln -s /usr/opt/gcc-arm-none-eabi/bin/arm-none-eabi-ld /usr/bin/arm-none-eabi-ld 31 + RUN ln -s /usr/opt/gcc-arm-none-eabi/bin/arm-none-eabi-objcopy /usr/bin/arm-none-eabi-objcopy 32 + 33 + 34 + ENV CC="/usr/bin/aarch64-none-elf-gcc" 35 + ENV CXX="/usr/bin/aarch64-none-elf-gcc" 36 + 37 + WORKDIR /home/piOS 38 + 39 + COPY . . 40 + 41 + FROM base AS build 42 + 43 + RUN rm -rf ./${BUILD_DIR} 44 + RUN cmake -G Ninja -B ./${BUILD_DIR} -S . --debug-output 45 + RUN cmake --build ./${BUILD_DIR} 46 + 47 + FROM scratch AS export-stage 48 + COPY --from=build ./home/piOS/build/bin . 49 +
+52
cmake/arm-gcc-toolchain.cmake
··· 1 + set(CMAKE_SYSTEM_NAME Linux) 2 + set(CMAKE_SYSTEM_PROCESSOR ARM) 3 + 4 + if (MINGW OR CYGWIN OR WIN32) 5 + set(UTIL_SEARCH_CMD where) 6 + elseif (UNIX OR APPLE) 7 + set(UTIL_SEARCH_CMD which) 8 + endif () 9 + 10 + string(SUBSTRING "${TOOLCHAIN_PREFIX}" 0 13 TOOLCHAIN) 11 + 12 + execute_process( 13 + COMMAND ${UTIL_SEARCH_CMD} ${TOOLCHAIN_PREFIX}gcc 14 + OUTPUT_VARIABLE BINUTILS_PATH 15 + OUTPUT_STRIP_TRAILING_WHITESPACE 16 + ) 17 + 18 + if (MINGW OR CYGWIN OR WIN32) 19 + if (BINUTILS_PATH) 20 + string(REPLACE "\n" ";" BINUTILS_PATH "${BINUTILS_PATH}") 21 + list(GET BINUTILS_PATH 0 BINUTILS_PATH) 22 + endif () 23 + endif () 24 + 25 + if (NOT BINUTILS_PATH) 26 + message(FATAL_ERROR "ARM GCC toolchain not found") 27 + endif () 28 + 29 + SET (CMAKE_C_COMPILER_WORKS 1) 30 + SET (CMAKE_CXX_COMPILER_WORKS 1) 31 + 32 + get_filename_component(ARM_TOOLCHAIN_DIR ${BINUTILS_PATH} DIRECTORY) 33 + # Without that flag CMake is not able to pass test compilation check 34 + if (${CMAKE_VERSION} VERSION_EQUAL "3.6.0" OR ${CMAKE_VERSION} VERSION_GREATER "3.6") 35 + set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) 36 + else () 37 + set(CMAKE_EXE_LINKER_FLAGS_INIT "--specs=nosys.specs") 38 + endif () 39 + 40 + set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) 41 + set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) 42 + # set(CMAKE_AR ${TOOLCHAIN_PREFIX}ar) 43 + # set(CMAKE_RANLIB ${TOOLCHAIN_PREFIX}ranlib) 44 + 45 + set(CMAKE_OBJCOPY ${ARM_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}objcopy CACHE INTERNAL "objcopy tool") 46 + set(CMAKE_SIZE_UTIL ${ARM_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}size CACHE INTERNAL "size tool") 47 + 48 + set(CMAKE_SYSROOT ${ARM_TOOLCHAIN_DIR}/../${TOOLCHAIN}) 49 + set(CMAKE_FIND_ROOT_PATH ${BINUTILS_PATH}) 50 + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 51 + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 52 + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+5 -4
cmake/target.cmake
··· 29 29 macro(setup_arch arch) 30 30 if(${arch} STREQUAL "32") 31 31 set(ARCH "AARCH_32") 32 - set(CMAKE_C_COMPILER "arm-none-eabi-gcc") 33 - set(CMAKE_ASM_COMPILER "arm-none-eabi-gcc") 32 + set(TOOLCHAIN_PREFIX arm-none-eabi-) 34 33 set(KERNEL kernel7) 35 34 else() 36 35 set(ARCH "AARCH_64") 37 - set(CMAKE_C_COMPILER "aarch64-none-elf-gcc") 38 - set(CMAKE_ASM_COMPILER "aarch64-none-elf-gcc") 36 + set(TOOLCHAIN_PREFIX aarch64-none-elf-) 39 37 set(KERNEL kernel8) 40 38 endif() 39 + 40 + set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cmake/arm-gcc-toolchain.cmake") 41 + 41 42 endmacro()
+2
os/CMakeLists.txt
··· 8 8 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -T ${ARCH_DIR}/linker.ld") 9 9 10 10 set(SOURCES 11 + src/kernel/memory.c 12 + src/kernel/atag.c 11 13 src/kernel/uart.c 12 14 src/kernel/mmio.c 13 15 src/kernel/kernel.c