mirror of
https://github.com/raspberrypi/userland.git
synced 2025-12-06 04:49:12 +00:00
buildme: Add option for ARM64 builds via either native or cross compile
Supports native builds on aarch64 machines. Supports making a 64-bit build via either cross compiling, or on aarch64 machines. Both options require the addition of --aarch64 to the command line, otherwise 32-bit libraries will be built. Cross compiling requires the aarch64-linux-gnu- compile tools to be installed (packages gcc-5-aarch64-linux-gnu and g++-aarch64-linux-gnu on Ubuntu).
This commit is contained in:
committed by
Phil Elwell
parent
0b1293c70d
commit
8b8f6571b6
@@ -2,7 +2,9 @@ This repository contains the source code for the ARM side libraries used on Rasp
|
|||||||
These typically are installed in /opt/vc/lib and includes source for the ARM side code to interface to:
|
These typically are installed in /opt/vc/lib and includes source for the ARM side code to interface to:
|
||||||
EGL, mmal, GLESv2, vcos, openmaxil, vchiq_arm, bcm_host, WFC, OpenVG.
|
EGL, mmal, GLESv2, vcos, openmaxil, vchiq_arm, bcm_host, WFC, OpenVG.
|
||||||
|
|
||||||
Use buildme to build. It requires cmake to be installed and an arm cross compiler. It is set up to use this one:
|
Use buildme to build. It requires cmake to be installed and an arm cross compiler. For 32 bit cross compiliation it is set up to use this one:
|
||||||
https://github.com/raspberrypi/tools/tree/master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian
|
https://github.com/raspberrypi/tools/tree/master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian
|
||||||
|
|
||||||
|
Whilst 64 bit userspace is not officially supported, some of the libraries will work for it. To cross compile, install gcc-aarch64-linux-gnu and g++-aarch64-linux-gnu first. For both native and cross compiles, add the option ```--aarch64``` to the buildme command.
|
||||||
|
|
||||||
Note that this repository does not contain the source for the edidparser and vcdbg binaries due to licensing restrictions.
|
Note that this repository does not contain the source for the edidparser and vcdbg binaries due to licensing restrictions.
|
||||||
|
|||||||
17
buildme
17
buildme
@@ -1,19 +1,28 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
BUILDTYPE=Release
|
BUILDTYPE=Release
|
||||||
|
ARCH=`arch`
|
||||||
|
ARM64=OFF
|
||||||
|
CMAKE_TOOLCHAIN_FILE=../../../makefiles/cmake/toolchains/arm-linux-gnueabihf.cmake
|
||||||
|
|
||||||
if [ "$1" = "--debug" ]; then
|
if [ "$1" = "--debug" ]; then
|
||||||
BUILDTYPE=Debug
|
BUILDTYPE=Debug
|
||||||
shift
|
shift
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$1" = "--arm64" ]; then
|
||||||
|
ARM64=ON
|
||||||
|
CMAKE_TOOLCHAIN_FILE=../../../makefiles/cmake/toolchains/aarch64-linux-gnu.cmake
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
|
||||||
BUILDSUBDIR=`echo $BUILDTYPE | tr '[A-Z]' '[a-z]'`;
|
BUILDSUBDIR=`echo $BUILDTYPE | tr '[A-Z]' '[a-z]'`;
|
||||||
|
|
||||||
if [ "armv6l" = `arch` ] || [ "armv7l" = `arch` ]; then
|
if [ $ARCH = "armv6l" ] || [ $ARCH = "armv7l" ] || [ $ARCH = "aarch64" ]; then
|
||||||
# Native compile on the Raspberry Pi
|
# Native compile on the Raspberry Pi
|
||||||
mkdir -p build/raspberry/$BUILDSUBDIR
|
mkdir -p build/raspberry/$BUILDSUBDIR
|
||||||
pushd build/raspberry/$BUILDSUBDIR
|
pushd build/raspberry/$BUILDSUBDIR
|
||||||
cmake -DCMAKE_BUILD_TYPE=$BUILDTYPE ../../..
|
cmake -DCMAKE_BUILD_TYPE=$BUILDTYPE -DARM64=$ARM64 ../../..
|
||||||
if [ "armv6l" = `arch` ]; then
|
if [ $ARCH = "armv6l" ]; then
|
||||||
make
|
make
|
||||||
else
|
else
|
||||||
make -j4
|
make -j4
|
||||||
@@ -34,7 +43,7 @@ else
|
|||||||
# Cross compile on a more capable machine
|
# Cross compile on a more capable machine
|
||||||
mkdir -p build/arm-linux/$BUILDSUBDIR
|
mkdir -p build/arm-linux/$BUILDSUBDIR
|
||||||
pushd build/arm-linux/$BUILDSUBDIR
|
pushd build/arm-linux/$BUILDSUBDIR
|
||||||
cmake -DCMAKE_TOOLCHAIN_FILE=../../../makefiles/cmake/toolchains/arm-linux-gnueabihf.cmake -DCMAKE_BUILD_TYPE=$BUILDTYPE ../../..
|
cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE -DCMAKE_BUILD_TYPE=$BUILDTYPE -DARM64=$ARM64 ../../..
|
||||||
make -j `nproc`
|
make -j `nproc`
|
||||||
|
|
||||||
if [ "$1" != "" ]; then
|
if [ "$1" != "" ]; then
|
||||||
|
|||||||
22
makefiles/cmake/toolchains/aarch64-linux-gnu.cmake
Normal file
22
makefiles/cmake/toolchains/aarch64-linux-gnu.cmake
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
#
|
||||||
|
# CMake defines to cross-compile to ARM/Linux on BCM2708 using glibc.
|
||||||
|
#
|
||||||
|
|
||||||
|
SET(CMAKE_SYSTEM_NAME Linux)
|
||||||
|
SET(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
|
||||||
|
SET(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
|
||||||
|
SET(CMAKE_ASM_COMPILER aarch64-linux-gnu-gcc)
|
||||||
|
SET(CMAKE_SYSTEM_PROCESSOR arm)
|
||||||
|
|
||||||
|
#ADD_DEFINITIONS("-march=armv6")
|
||||||
|
#add_definitions("-mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -marm")
|
||||||
|
|
||||||
|
# rdynamic means the backtrace should work
|
||||||
|
IF (CMAKE_BUILD_TYPE MATCHES "Debug")
|
||||||
|
add_definitions(-rdynamic)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
# avoids annoying and pointless warnings from gcc
|
||||||
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -U_FORTIFY_SOURCE")
|
||||||
|
SET(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -c")
|
||||||
Reference in New Issue
Block a user