├── .github ├── actions │ └── build-toolchain │ │ └── action.yml └── workflows │ ├── build.yml │ └── release.yml ├── .gitignore ├── CMakeLists.txt ├── README.md ├── flake.lock ├── flake.nix ├── package ├── CMakeLists.txt ├── autoconf-archive │ └── CMakeLists.txt ├── autoconf │ └── CMakeLists.txt ├── automake │ └── CMakeLists.txt ├── binutils │ ├── 0001-fix-pthread-once.patch │ └── CMakeLists.txt ├── gawk │ └── CMakeLists.txt ├── gcc │ └── CMakeLists.txt ├── gmp │ └── CMakeLists.txt ├── gperf │ └── CMakeLists.txt ├── isl │ └── CMakeLists.txt ├── libtool │ └── CMakeLists.txt ├── m4 │ └── CMakeLists.txt ├── mpc │ └── CMakeLists.txt ├── mpfr │ └── CMakeLists.txt ├── pkgconf │ └── CMakeLists.txt └── wayland │ ├── CMakeLists.txt │ └── fix-dtddata.macos.patch ├── sysroot ├── CMakeLists.txt └── relocate-sdk.patch └── toolchain ├── CMakeLists.txt ├── fix-rpath.macos.sh └── toolchain-wrapper-links.cmake /.github/actions/build-toolchain/action.yml: -------------------------------------------------------------------------------- 1 | name: Build Toolchain 2 | inputs: 3 | machine: 4 | required: true 5 | type: string 6 | os: 7 | required: true 8 | type: string 9 | arch: 10 | required: true 11 | type: string 12 | build-type: 13 | default: Release 14 | required: true 15 | type: string 16 | 17 | outputs: 18 | dist: 19 | description: 'Installation prefix for the toolchain' 20 | value: ${{steps.set-output.outputs.dist}} 21 | 22 | runs: 23 | using: 'composite' 24 | steps: 25 | - name: Install GCC 12 (Linux) 26 | if: inputs.os == 'linux' 27 | shell: bash 28 | run: | 29 | sudo apt-get update -y 30 | sudo apt-get install -y gcc-12 g++-12 31 | 32 | - name: Install GMake (macOS) 33 | if: inputs.os == 'darwin' 34 | shell: bash 35 | run: | 36 | brew install make 37 | echo "$HOMEBREW_PREFIX/opt/make/libexec/gnubin" >> $GITHUB_PATH 38 | 39 | - name: Set parallel level (macOS) 40 | if: inputs.os == 'darwin' 41 | shell: bash 42 | run: echo "CMAKE_BUILD_PARALLEL_LEVEL=$(sysctl -n hw.logicalcpu)" >> $GITHUB_ENV 43 | 44 | - name: Set parallel level (Linux) 45 | if: inputs.os == 'linux' 46 | shell: bash 47 | run: echo "CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)" >> $GITHUB_ENV 48 | 49 | - name: Configure CMake 50 | shell: bash 51 | run: | 52 | cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{inputs.build-type}} \ 53 | -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/build/dist/arm-webos-linux-gnueabi_sdk-buildroot \ 54 | -DCMAKE_INSTALL_MESSAGE=NEVER 55 | env: 56 | CC: 'gcc-12' 57 | CXX: 'g++-12' 58 | LANG: 'en_US.UTF-8' 59 | 60 | - name: Build 61 | id: build 62 | shell: bash 63 | run: cmake --build ${{github.workspace}}/build --config ${{inputs.build-type}} 64 | env: 65 | LANG: 'en_US.UTF-8' 66 | 67 | - name: Install 68 | shell: bash 69 | run: cmake --install ${{github.workspace}}/build 70 | 71 | - name: Set output 72 | id: set-output 73 | shell: bash 74 | run: echo "dist=${{github.workspace}}/build/dist" >> "$GITHUB_OUTPUT" 75 | 76 | - name: Upload build logs 77 | uses: actions/upload-artifact@v4 78 | if: ${{ failure() && steps.build.conclusion == 'failure' }} 79 | with: 80 | name: build-toolchains-logs-${{ inputs.os }}-${{ inputs.arch }}-${{ github.run_id }} 81 | path: | 82 | build/**/*.log 83 | build/**/*.txt 84 | build/**/*.cmake 85 | build/**/Makefile -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | run-name: Build (${{ github.event.inputs.machine-name }}) 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | machine-name: 8 | description: 'Host to build for' 9 | required: true 10 | type: choice 11 | options: 12 | - 'macOS x86_64' 13 | - 'macOS ARM64' 14 | - 'Linux ARM64' 15 | 16 | jobs: 17 | machine-select: 18 | name: Select build machine 19 | runs-on: ubuntu-latest 20 | outputs: 21 | matrix: ${{ steps.set-matrix.outputs.result }} 22 | steps: 23 | - name: Set Output 24 | id: set-matrix 25 | uses: actions/github-script@v7 26 | with: 27 | script: | 28 | const machines = [ 29 | {machine: 'macos-12', os: 'darwin', arch: 'x86_64', name: 'macOS x86_64'}, 30 | {machine: 'macos-14', os: 'darwin', arch: 'arm64', name: 'macOS ARM64'}, 31 | {machine: 'ubuntu-22.04-arm', os: 'linux', arch: 'aarch64', name: 'Linux ARM64'} 32 | ]; 33 | return machines.filter(machine => machine.name === '${{ github.event.inputs.machine-name }}'); 34 | 35 | build: 36 | name: Build for ${{ matrix.name }} 37 | needs: machine-select 38 | strategy: 39 | matrix: 40 | include: ${{ fromJson(needs.machine-select.outputs.matrix) }} 41 | runs-on: ${{ matrix.machine }} 42 | env: 43 | ARTIFACT_NAME: arm-webos-linux-gnueabi_sdk-buildroot_${{matrix.os}}-${{matrix.arch}}.tar.bz2 44 | 45 | steps: 46 | - uses: actions/checkout@v4 47 | 48 | - name: Build toolchain 49 | id: build-toolchain 50 | uses: './.github/actions/build-toolchain' 51 | with: 52 | machine: ${{ matrix.machine }} 53 | os: ${{ matrix.os }} 54 | arch: ${{ matrix.arch }} 55 | 56 | - name: Make tarball 57 | run: | 58 | cmake -E tar cjvf ${ARTIFACT_NAME} arm-webos-linux-gnueabi_sdk-buildroot 59 | working-directory: ${{steps.build-toolchain.outputs.dist}} 60 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | release: 5 | types: [ "published" ] 6 | 7 | permissions: 8 | contents: write 9 | 10 | env: 11 | BUILD_TYPE: Release 12 | LANG: 'en_US.UTF-8' 13 | 14 | jobs: 15 | release: 16 | name: Release for ${{ matrix.name }} 17 | strategy: 18 | fail-fast: false 19 | matrix: 20 | include: 21 | - machine: 'macos-12' 22 | os: 'darwin' 23 | arch: 'x86_64' 24 | name: macOS x86_64 25 | - machine: 'macos-14' 26 | os: 'darwin' 27 | arch: 'arm64' 28 | name: macOS ARM64 29 | - machine: 'ubuntu-22.04-arm' 30 | os: 'linux' 31 | arch: 'aarch64' 32 | name: Linux ARM64 33 | runs-on: ${{ matrix.machine }} 34 | env: 35 | ARTIFACT_NAME: arm-webos-linux-gnueabi_sdk-buildroot_${{matrix.os}}-${{matrix.arch}}.tar.bz2 36 | 37 | steps: 38 | - uses: actions/checkout@v4 39 | 40 | - id: build-toolchain 41 | name: Build Toolchain 42 | uses: './.github/actions/build-toolchain' 43 | with: 44 | machine: ${{ matrix.machine }} 45 | os: ${{ matrix.os }} 46 | arch: ${{ matrix.arch }} 47 | 48 | - name: Make Tarball 49 | run: | 50 | cmake -E tar cjvf ${ARTIFACT_NAME} arm-webos-linux-gnueabi_sdk-buildroot 51 | working-directory: ${{steps.build-toolchain.outputs.dist}} 52 | 53 | - name: Create Release 54 | uses: ncipollo/release-action@v1 55 | with: 56 | name: Release ${{ github.event.release.tag_name }} 57 | allowUpdates: true 58 | omitNameDuringUpdate: true 59 | omitBodyDuringUpdate: true 60 | omitPrereleaseDuringUpdate: true 61 | artifacts: ${{github.workspace}}/build/dist/${{env.ARTIFACT_NAME}} -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | .idea/ -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.24) 2 | 3 | project(buildroot_ports C) 4 | 5 | if (NOT CMAKE_C_COMPILER_ID STREQUAL "GNU") 6 | message(FATAL_ERROR "To build the toolchain, you'll need GCC on your machine") 7 | endif () 8 | if (NOT "$ENV{LANG}" STREQUAL "en_US.UTF-8") 9 | message(FATAL_ERROR "Please set LANG environment variable to `en_US.UTF-8`") 10 | endif () 11 | 12 | set(CMAKE_C_STANDARD 11) 13 | 14 | string(REGEX REPLACE ".*-" "" BUILDROOT_BUILD_ID "${BUILDROOT_RELEASE}") 15 | set(GNU_TARGET_NAME "arm-webos-linux-gnueabi") 16 | 17 | set(BUILDROOT_RELEASE "webos-d7ed7ee") 18 | set(BUILDROOT_SDK_NAME "${GNU_TARGET_NAME}_sdk-buildroot") 19 | 20 | if (NOT DEFINED GNU_MIRROR) 21 | set(GNU_MIRROR "https://ftp.gnu.org/gnu") 22 | endif () 23 | 24 | if (NOT DEFINED GCC_MIRROR) 25 | set(GCC_MIRROR "https://gcc.gnu.org/pub/gcc") 26 | endif () 27 | 28 | if (NOT DEFINED BUILDROOT_DOWNLOADS) 29 | set(BUILDROOT_DOWNLOADS "https://github.com/openlgtv/buildroot-nc4/releases/download") 30 | endif () 31 | 32 | if (NOT DEFINED CMAKE_INSTALL_PREFIX) 33 | set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/dist") 34 | endif () 35 | set(CMAKE_STAGING_PREFIX "${CMAKE_BINARY_DIR}/${BUILDROOT_SDK_NAME}") 36 | 37 | if (NOT DEFINED CMAKE_C_COMPILER_TARGET) 38 | execute_process(COMMAND "${CMAKE_C_COMPILER}" "-v" ERROR_VARIABLE GCC_VERSION_INFO) 39 | string(REGEX REPLACE ".*Target: ([^\n]+).*" "\\1" CMAKE_C_COMPILER_TARGET "${GCC_VERSION_INFO}") 40 | endif () 41 | 42 | include(FetchContent) 43 | include(ExternalProject) 44 | 45 | FetchContent_Declare( 46 | buildroot-nc4 47 | GIT_REPOSITORY "https://github.com/openlgtv/buildroot-nc4.git" 48 | GIT_TAG "${BUILDROOT_RELEASE}") 49 | 50 | FetchContent_MakeAvailable(buildroot-nc4) 51 | 52 | add_subdirectory(sysroot) 53 | add_subdirectory(package) 54 | 55 | install(DIRECTORY ${CMAKE_STAGING_PREFIX}/ DESTINATION ${CMAKE_INSTALL_PREFIX} USE_SOURCE_PERMISSIONS) 56 | 57 | add_subdirectory(toolchain) 58 | 59 | install(CODE "execute_process(COMMAND ${CMAKE_INSTALL_PREFIX}/relocate-sdk.sh)") -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Unofficial Native Toolchain for webOS 2 | 3 | Ports, downloads and documents for [unofficial webOS NDK](https://github.com/openlgtv/buildroot-nc4). 4 | You can use this tool to develop native applications for your webOS based TV. 5 | 6 | --- 7 | 8 | ## Download 9 | 10 | | Operating System | x86_64 | arm64 | 11 | |------------------|----------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------| 12 | | Linux | [arm-webos-linux-gnueabi_sdk-buildroot.tar.gz][toolchain-linux-x86_64] | [arm-webos-linux-gnueabi_sdk-buildroot_linux-aarch64.tar.bz2][toolchain-linux-aarch64] | 13 | | macOS | [arm-webos-linux-gnueabi_sdk-buildroot_darwin-x86_64.tar.bz2][toolchain-darwin-x86_64] | [arm-webos-linux-gnueabi_sdk-buildroot_darwin-arm64.tar.bz2][toolchain-darwin-arm64] | 14 | 15 | ## Install 16 | 17 | 1. Download tarball for your system listed above 18 | 2. Extract the tarball to the location you want (please avoid having spaces and special characters in the path) 19 | 3. Run `relocate-sdk.sh` in extracted contents 20 | 21 | ## Usage 22 | 23 | ### CMake 24 | 25 | When you build a CMake project in command line, assign `CMAKE_TOOLCHAIN_FILE` with toolchain file. 26 | 27 | ```shell 28 | cmake -B build -DCMAKE_TOOLCHAIN_FILE=/path/to/extracted/tarball/arm-webos-linux-gnueabi_sdk-buildroot/share/buildroot/toolchainfile.cmake 29 | ``` 30 | 31 | For VSCode [CMake Tools](https://github.com/microsoft/vscode-cmake-tools/), add entry in 32 | [Kit options](https://github.com/microsoft/vscode-cmake-tools/blob/main/docs/kits.md#kit-options): 33 | 34 | ```json 35 | [ 36 | { 37 | "name": "webOS", 38 | "toolchainFile": "/path/to/extracted/tarball/arm-webos-linux-gnueabi_sdk-buildroot/share/buildroot/toolchainfile.cmake" 39 | } 40 | ] 41 | ``` 42 | 43 | ## Advanced Usage Guide: Building the Port 44 | 45 | If your machine is not included, you can build it on your local machine. **Normally, you don't need to do this!** 46 | 47 | #### Prerequisites 48 | 49 | * GCC 50 | * CMake 51 | * Newer GNU Make (default one in macOS will probably not work) 52 | 53 | #### Build Toolchain Port 54 | 55 | Please set `CC` and `CXX` environment variable to binary of GCC you have installed. 56 | If your `LANG` environment variable is not `en_US.UTF-8`, please set to that. 57 | 58 | ```shell 59 | cmake -E make_directory build 60 | cmake -B build -DCMAKE_INSTALL_PREFIX=/path/to/install/location 61 | cmake --build build 62 | cmake --install build # Ensure you have write permission to the prefix you set 63 | ``` 64 | 65 | Then the toolchain will be installed to the location you want automatically. 66 | 67 | [toolchain-linux-x86_64]: https://github.com/openlgtv/buildroot-nc4/releases/latest/download/arm-webos-linux-gnueabi_sdk-buildroot.tar.gz 68 | 69 | [toolchain-linux-aarch64]: https://github.com/webosbrew/native-toolchain/releases/latest/download/arm-webos-linux-gnueabi_sdk-buildroot_linux-aarch64.tar.bz2 70 | 71 | [toolchain-darwin-x86_64]: https://github.com/webosbrew/native-toolchain/releases/latest/download/arm-webos-linux-gnueabi_sdk-buildroot_darwin-x86_64.tar.bz2 72 | 73 | [toolchain-darwin-arm64]: https://github.com/webosbrew/native-toolchain/releases/latest/download/arm-webos-linux-gnueabi_sdk-buildroot_darwin-arm64.tar.bz2 -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "nixpkgs": { 4 | "locked": { 5 | "lastModified": 1715668745, 6 | "narHash": "sha256-xp62OkRkbUDNUc6VSqH02jB0FbOS+MsfMb7wL1RJOfA=", 7 | "owner": "NixOS", 8 | "repo": "nixpkgs", 9 | "rev": "9ddcaffecdf098822d944d4147dd8da30b4e6843", 10 | "type": "github" 11 | }, 12 | "original": { 13 | "owner": "NixOS", 14 | "ref": "nixos-23.11", 15 | "repo": "nixpkgs", 16 | "type": "github" 17 | } 18 | }, 19 | "root": { 20 | "inputs": { 21 | "nixpkgs": "nixpkgs" 22 | } 23 | } 24 | }, 25 | "root": "root", 26 | "version": 7 27 | } 28 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "Cmake with webOS toolchain"; 3 | 4 | inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.11"; }; 5 | 6 | outputs = { self, nixpkgs }: 7 | let 8 | allSystems = [ 9 | "x86_64-linux" # 64bit AMD/Intel x86 10 | "aarch64-linux" # 64bit ARM 11 | "x86_64-darwin" # 64bit AMD/Intel macOS 12 | "aarch64-darwin" # 64bit ARM macOS 13 | ]; 14 | 15 | forAllSystems = fn: 16 | nixpkgs.lib.genAttrs allSystems 17 | (system: fn { pkgs = import nixpkgs { inherit system; }; inherit system;}); 18 | 19 | webOSToolchain = {system, fetchurl, runCommand}: let 20 | urlToolchain = { 21 | "x86_64-linux" = "https://github.com/openlgtv/buildroot-nc4/releases/download/webos-d7ed7ee/arm-webos-linux-gnueabi_sdk-buildroot.tar.gz"; 22 | "aarch64-linux" = "https://github.com/webosbrew/native-toolchain/releases/download/webos-d7ed7ee.6/arm-webos-linux-gnueabi_sdk-buildroot_linux-aarch64.tar.bz2"; 23 | "x86_64-darwin" = "https://github.com/webosbrew/native-toolchain/releases/download/webos-d7ed7ee.6/arm-webos-linux-gnueabi_sdk-buildroot_darwin-x86_64.tar.bz2"; 24 | "aarch64-darwin"= "https://github.com/webosbrew/native-toolchain/releases/download/webos-d7ed7ee.6/arm-webos-linux-gnueabi_sdk-buildroot_darwin-arm64.tar.bz2"; 25 | }."${system}"; 26 | 27 | hashToolchain = { 28 | "x86_64-linux" = "sha256-MoFmJumfs0kipJ0MY598ijA1b/+yIjctSCMCfxOC9kA="; 29 | "aarch64-linux" = "sha256-RaLRL/VXRX2SzeT92qd6bxCQ/KA63EO7dDl+Xgw3lQE="; 30 | "x86_64-darwin" = "sha256-dedFGsOWBIcq5/B4lMvo7bYrIJFmSheByxk+fr5WqnU="; 31 | "aarch64-darwin"= "sha256-lUMzaUqx/h93N+gaC+HjGIzf/8GhGcgchvX86/GFfEU="; 32 | }."${system}"; 33 | 34 | webosToolchainPkg = fetchurl { 35 | url = urlToolchain; 36 | hash = hashToolchain; 37 | }; 38 | in 39 | runCommand "webos-toolchain" {} '' 40 | mkdir -p $out 41 | tar -xf ${webosToolchainPkg} -C $out 42 | mv $out/arm-webos-linux-gnueabi_sdk-buildroot/* $out 43 | rm -rf $out/arm-webos-linux-gnueabi_sdk-buildroot 44 | ''; 45 | in { 46 | 47 | defaultPackage = forAllSystems ({ pkgs, system }: pkgs.callPackage webOSToolchain { inherit system; }); 48 | 49 | devShells = forAllSystems ({ pkgs, system }: let 50 | webOS = (pkgs.callPackage webOSToolchain { inherit system; }); 51 | in 52 | { 53 | default = pkgs.mkShell { 54 | nativeBuildInputs = [ webOS pkgs.cmake ]; 55 | shellHook = '' 56 | alias cmake='${pkgs.cmake}/bin/cmake -DCMAKE_TOOLCHAIN_FILE=${webOS}/share/buildroot/toolchainfile.cmake' 57 | function webos_cmake_kit { 58 | mkdir -p .vscode 59 | echo '${builtins.toJSON [{ name = "webos-toolchain"; toolchainFile = "${webOS}/share/buildroot/toolchainfile.cmake";}]}' > .vscode/cmake-kits.json 60 | } 61 | ''; 62 | }; 63 | }); 64 | }; 65 | } -------------------------------------------------------------------------------- /package/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | function(br_get_var PATH VAR OUT_VAR) 2 | file(STRINGS "${buildroot-nc4_SOURCE_DIR}/${PATH}" FIND_LINE REGEX "^${VAR} = (.*)$") 3 | if (NOT FIND_LINE) 4 | unset(${OUT_VAR} PARENT_SCOPE) 5 | return() 6 | endif () 7 | string(REGEX REPLACE "^${VAR} = (.*)$" "\\1" VAR_VALUE "${FIND_LINE}") 8 | set(${OUT_VAR} "${VAR_VALUE}" PARENT_SCOPE) 9 | endfunction() 10 | 11 | add_subdirectory(gperf) 12 | add_subdirectory(m4) 13 | add_subdirectory(autoconf) 14 | add_subdirectory(autoconf-archive) 15 | add_subdirectory(automake) 16 | 17 | add_subdirectory(gmp) 18 | add_subdirectory(mpfr) 19 | add_subdirectory(mpc) 20 | add_subdirectory(isl) 21 | add_subdirectory(libtool) 22 | 23 | add_subdirectory(binutils) 24 | add_subdirectory(gcc) 25 | add_subdirectory(pkgconf) 26 | add_subdirectory(gawk) 27 | 28 | add_subdirectory(wayland) -------------------------------------------------------------------------------- /package/autoconf-archive/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | br_get_var("package/autoconf-archive/autoconf-archive.mk" AUTOCONF_ARCHIVE_VERSION AUTOCONF_ARCHIVE_VERSION) 2 | 3 | ExternalProject_Get_Property(autoconf INSTALL_DIR) 4 | set(AUTOCONF_INSTALL_DIR ${INSTALL_DIR}) 5 | 6 | ExternalProject_Add(autoconf-archive DEPENDS autoconf m4 7 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 8 | URL "${GNU_MIRROR}/autoconf-archive/autoconf-archive-${AUTOCONF_ARCHIVE_VERSION}.tar.xz" 9 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 10 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc 11 | AUTOCONF=${AUTOCONF_INSTALL_DIR}/bin/autoconf AUTOHEADER=${AUTOCONF_INSTALL_DIR}/bin/autoheader 12 | BUILD_COMMAND $(MAKE) 13 | INSTALL_COMMAND $(MAKE) install-strip 14 | LOG_CONFIGURE TRUE 15 | LOG_BUILD TRUE 16 | LOG_INSTALL TRUE 17 | LOG_OUTPUT_ON_FAILURE TRUE 18 | ) 19 | 20 | ExternalProject_Get_Property(autoconf-archive INSTALL_DIR) -------------------------------------------------------------------------------- /package/autoconf/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | br_get_var("package/autoconf/autoconf.mk" AUTOCONF_VERSION AUTOCONF_VERSION) 2 | 3 | file(GLOB AUTOCONF_PATCHES "${buildroot-nc4_SOURCE_DIR}/package/autoconf/*.patch") 4 | list(TRANSFORM AUTOCONF_PATCHES PREPEND "COMMAND;patch;-p1;<;" OUTPUT_VARIABLE AUTOCONF_PATCH_COMMANDS) 5 | 6 | ExternalProject_Get_Property(m4 INSTALL_DIR) 7 | set(M4_INSTALL_DIR ${INSTALL_DIR}) 8 | 9 | ExternalProject_Add(autoconf DEPENDS m4 10 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 11 | URL "${GNU_MIRROR}/autoconf/autoconf-${AUTOCONF_VERSION}.tar.xz" 12 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 13 | PATCH_COMMAND ${AUTOCONF_PATCH_COMMANDS} 14 | CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env EMACS=no ac_cv_path_M4=${M4_INSTALL_DIR}/bin/m4 15 | ac_cv_prog_gnu_m4_gnu=no -- /configure --prefix= --sysconfdir=/etc 16 | BUILD_COMMAND $(MAKE) 17 | INSTALL_COMMAND $(MAKE) install-strip 18 | LOG_CONFIGURE TRUE 19 | LOG_BUILD TRUE 20 | LOG_INSTALL TRUE 21 | LOG_OUTPUT_ON_FAILURE TRUE 22 | ) 23 | 24 | ExternalProject_Get_Property(autoconf INSTALL_DIR) -------------------------------------------------------------------------------- /package/automake/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | br_get_var("package/automake/automake.mk" AUTOMAKE_VERSION AUTOMAKE_VERSION) 2 | 3 | file(GLOB AUTOMAKE_PATCHES "${buildroot-nc4_SOURCE_DIR}/package/automake/*.patch") 4 | list(TRANSFORM AUTOMAKE_PATCHES PREPEND "COMMAND;patch;-p1;<;" OUTPUT_VARIABLE AUTOMAKE_PATCH_COMMANDS) 5 | 6 | ExternalProject_Get_Property(autoconf INSTALL_DIR) 7 | set(AUTOCONF_INSTALL_DIR ${INSTALL_DIR}) 8 | 9 | ExternalProject_Add(automake DEPENDS autoconf autoconf-archive 10 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 11 | URL "${GNU_MIRROR}/automake/automake-${AUTOMAKE_VERSION}.tar.xz" 12 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 13 | PATCH_COMMAND ${AUTOMAKE_PATCH_COMMANDS} 14 | CONFIGURE_COMMAND 15 | COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_STAGING_PREFIX}/share/aclocal 16 | COMMAND /configure --prefix= --sysconfdir=/etc 17 | AUTOCONF=${AUTOCONF_INSTALL_DIR}/bin/autoconf AUTOHEADER=${AUTOCONF_INSTALL_DIR}/bin/autoheader 18 | BUILD_COMMAND $(MAKE) 19 | INSTALL_COMMAND $(MAKE) install-strip 20 | LOG_CONFIGURE TRUE 21 | LOG_BUILD TRUE 22 | LOG_INSTALL TRUE 23 | LOG_OUTPUT_ON_FAILURE TRUE 24 | ) 25 | 26 | ExternalProject_Get_Property(automake INSTALL_DIR) -------------------------------------------------------------------------------- /package/binutils/0001-fix-pthread-once.patch: -------------------------------------------------------------------------------- 1 | diff --git a/gold/gold-threads.cc b/gold/gold-threads.cc 2 | --- a/gold/gold-threads.cc (date 1642853649000) 3 | +++ b/gold/gold-threads.cc (date 1709531784143) 4 | @@ -285,8 +285,10 @@ 5 | { 6 | public: 7 | Once_initialize() 8 | - : once_(PTHREAD_ONCE_INIT) 9 | - { } 10 | + { 11 | + pthread_once_t once_init = PTHREAD_ONCE_INIT; 12 | + this->once_ = once_init; 13 | + } 14 | 15 | // Return a pointer to the pthread_once_t variable. 16 | pthread_once_t* 17 | -------------------------------------------------------------------------------- /package/binutils/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(BINUTILS_VERSION 2.38) 2 | 3 | file(GLOB BINUTILS_PATCHES "${CMAKE_CURRENT_SOURCE_DIR}/*.patch") 4 | 5 | list(TRANSFORM BINUTILS_PATCHES PREPEND "COMMAND;patch;-p1;<;" OUTPUT_VARIABLE BINUTILS_PATCH_COMMANDS) 6 | 7 | set(SYSROOT "${CMAKE_STAGING_PREFIX}/${GNU_TARGET_NAME}/sysroot") 8 | 9 | ExternalProject_Add(binutils DEPENDS sysroot 10 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 11 | URL "${GNU_MIRROR}/binutils/binutils-${BINUTILS_VERSION}.tar.bz2" 12 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 13 | PATCH_COMMAND ${BINUTILS_PATCH_COMMANDS} 14 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc --disable-multilib 15 | --disable-werror --target=${GNU_TARGET_NAME} --disable-shared --enable-static --with-sysroot=${SYSROOT} 16 | --enable-poison-system-directories --without-debuginfod --enable-plugins --enable-lto --disable-sim 17 | --disable-gdb --enable-gold --disable-gprofng 18 | BUILD_COMMAND $(MAKE) MAKEINFO=true 19 | INSTALL_COMMAND $(MAKE) install-strip MAKEINFO=true 20 | LOG_CONFIGURE TRUE 21 | LOG_BUILD TRUE 22 | LOG_INSTALL TRUE 23 | LOG_OUTPUT_ON_FAILURE TRUE 24 | ) 25 | 26 | ExternalProject_Get_Property(binutils INSTALL_DIR) -------------------------------------------------------------------------------- /package/gawk/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | br_get_var("package/gawk/gawk.mk" GAWK_VERSION GAWK_VERSION) 2 | 3 | file(GLOB GAWK_PATCHES "${buildroot-nc4_SOURCE_DIR}/package/gawk/*.patch") 4 | list(TRANSFORM GAWK_PATCHES PREPEND "COMMAND;patch;-p1;<;" OUTPUT_VARIABLE GAWK_PATCH_COMMANDS) 5 | 6 | ExternalProject_Get_Property(mpfr INSTALL_DIR) 7 | set(MPFR_INSTALL_DIR ${INSTALL_DIR}) 8 | 9 | ExternalProject_Add(gawk DEPENDS mpfr 10 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 11 | URL "${GNU_MIRROR}/gawk/gawk-${GAWK_VERSION}.tar.xz" 12 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 13 | PATCH_COMMAND ${GAWK_PATCH_COMMANDS} 14 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc 15 | BUILD_COMMAND $(MAKE) 16 | INSTALL_COMMAND $(MAKE) install-strip 17 | LOG_CONFIGURE TRUE 18 | LOG_BUILD TRUE 19 | LOG_INSTALL TRUE 20 | LOG_OUTPUT_ON_FAILURE TRUE 21 | ) 22 | 23 | ExternalProject_Get_Property(gawk INSTALL_DIR) 24 | 25 | install(CODE "file(CREATE_LINK gawk ${CMAKE_INSTALL_PREFIX}/bin/awk SYMBOLIC)") -------------------------------------------------------------------------------- /package/gcc/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(GCC_VERSION 12.2.0) 2 | 3 | set(SYSROOT "${CMAKE_STAGING_PREFIX}/${GNU_TARGET_NAME}/sysroot") 4 | 5 | file(GLOB GCC_PATCHES "${buildroot-nc4_SOURCE_DIR}/package/gcc/12.2.0/*.patch") 6 | list(TRANSFORM GCC_PATCHES PREPEND "COMMAND;patch;-p1;<;" OUTPUT_VARIABLE GCC_PATCH_COMMANDS) 7 | 8 | ExternalProject_Get_Property(gmp INSTALL_DIR) 9 | set(GMP_INSTALL_DIR ${INSTALL_DIR}) 10 | 11 | ExternalProject_Get_Property(mpc INSTALL_DIR) 12 | set(MPC_INSTALL_DIR ${INSTALL_DIR}) 13 | 14 | ExternalProject_Get_Property(mpfr INSTALL_DIR) 15 | set(MPFR_INSTALL_DIR ${INSTALL_DIR}) 16 | 17 | ExternalProject_Get_Property(isl INSTALL_DIR) 18 | set(ISL_INSTALL_DIR ${INSTALL_DIR}) 19 | 20 | ExternalProject_Get_Property(binutils INSTALL_DIR) 21 | set(BINUTILS_INSTALL_DIR ${INSTALL_DIR}) 22 | 23 | ExternalProject_Add(gcc DEPENDS sysroot binutils gmp mpc mpfr isl m4 24 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 25 | URL "${GCC_MIRROR}/releases/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz" 26 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 27 | PATCH_COMMAND ${GCC_PATCH_COMMANDS} 28 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc --enable-static 29 | --build=${CMAKE_C_COMPILER_TARGET} --target=${GNU_TARGET_NAME} --with-sysroot=${SYSROOT} --enable-__cxa_atexit 30 | --with-gnu-ld --disable-libssp --disable-multilib --disable-decimal-float --enable-plugins --enable-lto 31 | --with-gmp= --with-mpc= --with-mpfr= --with-isl= 32 | "--with-pkgversion=Buildroot -g${BUILDROOT_BUILD_ID}" "--with-bugurl=http://bugs.buildroot.net" 33 | --without-zstd --disable-libquadmath --disable-libquadmath-support --enable-tls --enable-threads 34 | --with-abi=aapcs-linux --with-cpu=cortex-a9 --with-fpu=neon-fp16 35 | --with-float=softfp --with-mode=arm --enable-languages=c,c++ 36 | --with-build-time-tools=${BINUTILS_INSTALL_DIR}/${GNU_TARGET_NAME}/bin --enable-shared --disable-libgomp 37 | BUILD_COMMAND $(MAKE) MAKEINFO=true 38 | INSTALL_COMMAND $(MAKE) install-strip MAKEINFO=true 39 | LOG_CONFIGURE TRUE 40 | LOG_BUILD TRUE 41 | LOG_INSTALL TRUE 42 | LOG_OUTPUT_ON_FAILURE TRUE 43 | ) -------------------------------------------------------------------------------- /package/gmp/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | br_get_var("package/gmp/gmp.mk" GMP_VERSION GMP_VERSION) 2 | 3 | ExternalProject_Get_Property(m4 INSTALL_DIR) 4 | set(M4_INSTALL_DIR ${INSTALL_DIR}) 5 | 6 | ExternalProject_Add(gmp DEPENDS m4 7 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 8 | URL "${GCC_MIRROR}/infrastructure/gmp-${GMP_VERSION}.tar.bz2" 9 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 10 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc 11 | M4=${M4_INSTALL_DIR}/bin/m4 12 | BUILD_COMMAND $(MAKE) 13 | INSTALL_COMMAND $(MAKE) install-strip 14 | LOG_CONFIGURE TRUE 15 | LOG_BUILD TRUE 16 | LOG_INSTALL TRUE 17 | LOG_OUTPUT_ON_FAILURE TRUE 18 | ) 19 | 20 | ExternalProject_Get_Property(gmp INSTALL_DIR) 21 | -------------------------------------------------------------------------------- /package/gperf/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | br_get_var("package/gperf/gperf.mk" GPERF_VERSION GPERF_VERSION) 2 | 3 | ExternalProject_Add(gperf 4 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 5 | URL "${GNU_MIRROR}/gperf/gperf-${GPERF_VERSION}.tar.gz" 6 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 7 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc 8 | BUILD_COMMAND $(MAKE) 9 | INSTALL_COMMAND $(MAKE) install 10 | LOG_CONFIGURE TRUE 11 | LOG_BUILD TRUE 12 | LOG_INSTALL TRUE 13 | LOG_OUTPUT_ON_FAILURE TRUE 14 | ) 15 | 16 | ExternalProject_Get_Property(gperf INSTALL_DIR) 17 | -------------------------------------------------------------------------------- /package/isl/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(ISL_VERSION 0.24) 2 | 3 | ExternalProject_Get_Property(gmp INSTALL_DIR) 4 | set(GMP_INSTALL_DIR ${INSTALL_DIR}) 5 | 6 | ExternalProject_Add(isl DEPENDS gmp 7 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 8 | URL "${GCC_MIRROR}/infrastructure/isl-${ISL_VERSION}.tar.bz2" 9 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 10 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc 11 | --with-gmp-prefix= 12 | BUILD_COMMAND $(MAKE) 13 | INSTALL_COMMAND $(MAKE) install-strip 14 | LOG_CONFIGURE TRUE 15 | LOG_BUILD TRUE 16 | LOG_INSTALL TRUE 17 | LOG_OUTPUT_ON_FAILURE TRUE 18 | ) 19 | 20 | ExternalProject_Get_Property(isl INSTALL_DIR) 21 | -------------------------------------------------------------------------------- /package/libtool/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | br_get_var("package/libtool/libtool.mk" LIBTOOL_VERSION LIBTOOL_VERSION) 2 | 3 | ExternalProject_Get_Property(m4 INSTALL_DIR) 4 | set(M4_INSTALL_DIR ${INSTALL_DIR}) 5 | 6 | ExternalProject_Add(libtool DEPENDS autoconf m4 7 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 8 | URL "${GNU_MIRROR}/libtool/libtool-${LIBTOOL_VERSION}.tar.xz" 9 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 10 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc 11 | M4=${M4_INSTALL_DIR}/bin/m4 MAKEINFO=true 12 | BUILD_COMMAND $(MAKE) 13 | INSTALL_COMMAND $(MAKE) install-strip 14 | LOG_CONFIGURE TRUE 15 | LOG_BUILD TRUE 16 | LOG_INSTALL TRUE 17 | LOG_OUTPUT_ON_FAILURE TRUE 18 | ) 19 | 20 | ExternalProject_Get_Property(libtool INSTALL_DIR) 21 | -------------------------------------------------------------------------------- /package/m4/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | br_get_var("package/m4/m4.mk" M4_VERSION M4_VERSION) 2 | 3 | ExternalProject_Get_Property(gperf INSTALL_DIR) 4 | set(GPERF_INSTALL_DIR ${INSTALL_DIR}) 5 | 6 | ExternalProject_Add(m4 DEPENDS gperf 7 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 8 | URL "${GNU_MIRROR}/m4/m4-${M4_VERSION}.tar.xz" 9 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 10 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc --disable-nls 11 | BUILD_COMMAND $(MAKE) GPERF=${GPERF_INSTALL_DIR}/bin/gperf HELP2MAN=true 12 | INSTALL_COMMAND $(MAKE) install-strip HELP2MAN=true 13 | LOG_CONFIGURE TRUE 14 | LOG_BUILD TRUE 15 | LOG_INSTALL TRUE 16 | LOG_OUTPUT_ON_FAILURE TRUE 17 | ) 18 | 19 | ExternalProject_Get_Property(m4 INSTALL_DIR) -------------------------------------------------------------------------------- /package/mpc/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | br_get_var("package/mpc/mpc.mk" MPC_VERSION MPC_VERSION) 2 | 3 | ExternalProject_Get_Property(gmp INSTALL_DIR) 4 | set(GMP_INSTALL_DIR ${INSTALL_DIR}) 5 | 6 | ExternalProject_Get_Property(mpfr INSTALL_DIR) 7 | set(MPFR_INSTALL_DIR ${INSTALL_DIR}) 8 | 9 | ExternalProject_Add(mpc DEPENDS gmp mpfr 10 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 11 | URL "${GCC_MIRROR}/infrastructure/mpc-${MPC_VERSION}.tar.gz" 12 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 13 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc 14 | --with-gmp= --with-mpfr= 15 | BUILD_COMMAND $(MAKE) 16 | INSTALL_COMMAND $(MAKE) install-strip 17 | LOG_CONFIGURE TRUE 18 | LOG_BUILD TRUE 19 | LOG_INSTALL TRUE 20 | LOG_OUTPUT_ON_FAILURE TRUE 21 | ) 22 | 23 | ExternalProject_Get_Property(mpc INSTALL_DIR) -------------------------------------------------------------------------------- /package/mpfr/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | br_get_var("package/mpfr/mpfr.mk" MPFR_VERSION MPFR_VERSION) 2 | 3 | ExternalProject_Get_Property(gmp INSTALL_DIR) 4 | set(GMP_INSTALL_DIR ${INSTALL_DIR}) 5 | 6 | ExternalProject_Add(mpfr DEPENDS gmp 7 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 8 | URL "${GCC_MIRROR}/infrastructure/mpfr-${MPFR_VERSION}.tar.bz2" 9 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 10 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc 11 | --with-gmp= 12 | BUILD_COMMAND $(MAKE) 13 | INSTALL_COMMAND $(MAKE) install-strip 14 | LOG_CONFIGURE TRUE 15 | LOG_BUILD TRUE 16 | LOG_INSTALL TRUE 17 | LOG_OUTPUT_ON_FAILURE TRUE 18 | ) 19 | 20 | ExternalProject_Get_Property(mpfr INSTALL_DIR) -------------------------------------------------------------------------------- /package/pkgconf/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | br_get_var("package/pkgconf/pkgconf.mk" PKGCONF_VERSION PKGCONF_VERSION) 2 | 3 | set(SYSROOT "${CMAKE_STAGING_PREFIX}/${GNU_TARGET_NAME}/sysroot") 4 | 5 | file(GLOB PKGCONF_PATCHES "${buildroot-nc4_SOURCE_DIR}/package/pkgconf/*.patch") 6 | list(TRANSFORM PKGCONF_PATCHES PREPEND "COMMAND;patch;-p1;<;" OUTPUT_VARIABLE PKGCONF_PATCH_COMMANDS) 7 | 8 | ExternalProject_Add(pkgconf DEPENDS autoconf automake sysroot 9 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 10 | URL "https://distfiles.dereferenced.org/pkgconf/pkgconf-${PKGCONF_VERSION}.tar.xz" 11 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 12 | PATCH_COMMAND ${PKGCONF_PATCH_COMMANDS} 13 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc 14 | --with-sysroot=${SYSROOT} 15 | BUILD_COMMAND $(MAKE) 16 | INSTALL_COMMAND $(MAKE) install-strip 17 | LOG_CONFIGURE TRUE 18 | LOG_BUILD TRUE 19 | LOG_INSTALL TRUE 20 | LOG_OUTPUT_ON_FAILURE TRUE 21 | ) 22 | 23 | ExternalProject_Get_Property(pkgconf INSTALL_DIR) 24 | 25 | set(STAGING_SUBDIR "${GNU_TARGET_NAME}/sysroot") 26 | set(STATIC "") 27 | 28 | configure_file(${buildroot-nc4_SOURCE_DIR}/package/pkgconf/pkg-config.in ${CMAKE_CURRENT_BINARY_DIR}/pkg-config @ONLY) 29 | install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/pkg-config DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) -------------------------------------------------------------------------------- /package/wayland/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | br_get_var("package/wayland/wayland.mk" HOST_WAYLAND_VERSION WAYLAND_VERSION) 2 | 3 | if (APPLE OR BSD) 4 | list(APPEND WAYLAND_PATCHES "${CMAKE_CURRENT_SOURCE_DIR}/fix-dtddata.macos.patch") 5 | endif () 6 | 7 | list(TRANSFORM WAYLAND_PATCHES PREPEND "COMMAND;patch;-p1;<;" OUTPUT_VARIABLE WAYLAND_PATCH_COMMANDS) 8 | 9 | ExternalProject_Add(wayland 10 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 11 | URL "http://wayland.freedesktop.org/releases/wayland-${WAYLAND_VERSION}.tar.xz" 12 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE 13 | PATCH_COMMAND ${WAYLAND_PATCH_COMMANDS} 14 | CONFIGURE_COMMAND /configure --prefix= --sysconfdir=/etc 15 | --disable-libraries --disable-documentation 16 | BUILD_COMMAND $(MAKE) 17 | INSTALL_COMMAND $(MAKE) install-strip 18 | LOG_CONFIGURE TRUE 19 | LOG_BUILD TRUE 20 | LOG_INSTALL TRUE 21 | LOG_OUTPUT_ON_FAILURE TRUE 22 | ) 23 | 24 | ExternalProject_Get_Property(wayland INSTALL_DIR) -------------------------------------------------------------------------------- /package/wayland/fix-dtddata.macos.patch: -------------------------------------------------------------------------------- 1 | diff --git a/src/dtddata.S b/src/dtddata.S 2 | --- a/src/dtddata.S (date 1709447244638) 3 | +++ b/src/dtddata.S (date 1709447346579) 4 | @@ -46,5 +46,5 @@ 5 | .int (\name\()_end - \name\()_begin) 6 | .endm 7 | 8 | -.section .rodata 9 | -binfile DTD_DATA src/wayland.dtd.embed 10 | +.section __TEXT,__const 11 | +binfile _DTD_DATA, src/wayland.dtd.embed 12 | -------------------------------------------------------------------------------- /sysroot/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | set(SYSROOT "${CMAKE_STAGING_PREFIX}/${GNU_TARGET_NAME}/sysroot") 2 | 3 | if (APPLE OR BSD) 4 | set(PATCH_RELOCATE_SDK "COMMAND" "patch" "${CMAKE_STAGING_PREFIX}/relocate-sdk.sh" 5 | "${CMAKE_CURRENT_SOURCE_DIR}/relocate-sdk.patch") 6 | endif () 7 | 8 | ExternalProject_Add(sysroot 9 | INSTALL_DIR "${CMAKE_STAGING_PREFIX}" 10 | URL "${BUILDROOT_DOWNLOADS}/${BUILDROOT_RELEASE}/${BUILDROOT_SDK_NAME}.tar.gz" 11 | DOWNLOAD_NO_EXTRACT TRUE 12 | CONFIGURE_COMMAND "" 13 | BUILD_COMMAND "" 14 | INSTALL_COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} tar xf 15 | --exclude "${BUILDROOT_SDK_NAME}/${GNU_TARGET_NAME}/sysroot/usr/share/doc" 16 | --exclude "${BUILDROOT_SDK_NAME}/${GNU_TARGET_NAME}/sysroot/usr/share/i18n" 17 | --exclude "${BUILDROOT_SDK_NAME}/${GNU_TARGET_NAME}/sysroot/usr/share/locale" 18 | --exclude "${BUILDROOT_SDK_NAME}/${GNU_TARGET_NAME}/sysroot/usr/share/man" 19 | --exclude "${BUILDROOT_SDK_NAME}/${GNU_TARGET_NAME}/sysroot/usr/share/terminfo" 20 | --exclude "${BUILDROOT_SDK_NAME}/${GNU_TARGET_NAME}/sysroot/usr/share/zoneinfo" 21 | "${BUILDROOT_SDK_NAME}/${GNU_TARGET_NAME}/sysroot" 22 | "${BUILDROOT_SDK_NAME}/share/buildroot" 23 | "${BUILDROOT_SDK_NAME}/environment-setup" 24 | "${BUILDROOT_SDK_NAME}/relocate-sdk.sh" 25 | ${PATCH_RELOCATE_SDK} 26 | COMMAND "${CMAKE_STAGING_PREFIX}/relocate-sdk.sh" 27 | LOG_CONFIGURE TRUE 28 | LOG_BUILD TRUE 29 | LOG_INSTALL TRUE 30 | LOG_OUTPUT_ON_FAILURE TRUE) 31 | -------------------------------------------------------------------------------- /sysroot/relocate-sdk.patch: -------------------------------------------------------------------------------- 1 | diff --git a/relocate-sdk.sh b/relocate-sdk.sh 2 | --- a/relocate-sdk.sh (date 1687254851000) 3 | +++ b/relocate-sdk.sh (date 1699325031602) 4 | @@ -39,14 +39,20 @@ 5 | 6 | # Make sure file uses the right language 7 | export LC_ALL=C 8 | +# Proper in-place argument for sed 9 | +if sed --version 1>/dev/null 2>&1; then 10 | + SED_INPLACE_ARGS="-i" 11 | +else # BSD sed 12 | + SED_INPLACE_ARGS="-i ''" 13 | +fi 14 | # Replace the old path with the new one in all text files 15 | grep -lr "${OLDPATH}" . | while read -r FILE ; do 16 | if file -b --mime-type "${FILE}" | grep -q '^text/' && [ "${FILE}" != "${LOCFILE}" ] 17 | then 18 | - sed -i "s|${OLDPATH}|${NEWPATH}|g" "${FILE}" 19 | + sed ${SED_INPLACE_ARGS} "s|${OLDPATH}|${NEWPATH}|g" "${FILE}" 20 | fi 21 | done 22 | 23 | # At the very end, we update the location file to not break the 24 | # SDK if this script gets interruted. 25 | -sed -i "s|${OLDPATH}|${NEWPATH}|g" ${LOCFILE} 26 | +sed ${SED_INPLACE_ARGS} "s|${OLDPATH}|${NEWPATH}|g" ${LOCFILE} 27 | -------------------------------------------------------------------------------- /toolchain/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(toolchain-wrapper ${buildroot-nc4_SOURCE_DIR}/toolchain/toolchain-wrapper.c) 2 | target_compile_definitions(toolchain-wrapper PUBLIC BR_CROSS_PATH_SUFFIX=".br_real" 3 | BR_SYSROOT="%s/arm-webos-linux-gnueabi/sysroot") 4 | 5 | if (APPLE OR BSD) 6 | target_compile_definitions(toolchain-wrapper PUBLIC "program_invocation_short_name=getprogname()") 7 | endif () 8 | 9 | add_dependencies(toolchain-wrapper gcc) 10 | 11 | install(TARGETS toolchain-wrapper DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) 12 | 13 | ExternalProject_Get_Property(gcc INSTALL_DIR) 14 | 15 | install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -DBINDIR=${CMAKE_INSTALL_PREFIX}/bin 16 | -DGNU_TARGET_NAME=${GNU_TARGET_NAME} -P ${CMAKE_CURRENT_SOURCE_DIR}/toolchain-wrapper-links.cmake)") 17 | 18 | if (APPLE OR BSD) 19 | install(CODE "execute_process(COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/fix-rpath.macos.sh 20 | ${CMAKE_STAGING_PREFIX}/lib WORKING_DIRECTORY ${CMAKE_INSTALL_PREFIX})") 21 | endif () -------------------------------------------------------------------------------- /toolchain/fix-rpath.macos.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ ! -d "$1" ]; then 4 | echo "Usage: $0 LIBDIR" 5 | exit 1 6 | fi 7 | 8 | LIBDIR="$1" 9 | AWK_LIB_PREFIX=$(echo "$LIBDIR" | sed -e 's/\//\\\//g') 10 | 11 | find bin lib libexec -type file | while read -r FILE; do 12 | if [ $(file -b --mime-type "${FILE}") != "application/x-mach-binary" ]; then 13 | continue 14 | fi 15 | 16 | HAS_CHANGED=false 17 | while read LINK; do 18 | LINK_NAME=$(basename "${LINK}") 19 | if [ -z "${LINK}" ] || [ $(basename "$FILE") = "${LINK_NAME}" ]; then 20 | continue 21 | fi 22 | install_name_tool -change "${LINK}" "@rpath/${LINK_NAME}" "${FILE}" 23 | HAS_CHANGED=true 24 | done <<<"$(otool -LX ${FILE} | awk /${AWK_LIB_PREFIX}/'{ print $1 }')" 25 | 26 | if [ "$HAS_CHANGED" = true ]; then 27 | if [ $(dirname "${FILE}") != "lib" ]; then 28 | install_name_tool -add_rpath "@loader_path/$(dirname ${FILE} | sed -e 's/[^/]*/../g')/lib" "${FILE}" 29 | fi 30 | echo "Patched ${FILE}" 31 | fi 32 | done 33 | -------------------------------------------------------------------------------- /toolchain/toolchain-wrapper-links.cmake: -------------------------------------------------------------------------------- 1 | file(GLOB BINARIES RELATIVE ${BINDIR} "${BINDIR}/${GNU_TARGET_NAME}-*") 2 | 3 | foreach (BINARY ${BINARIES}) 4 | if (${BINARY} MATCHES ".*\\.br_real") 5 | continue() 6 | elseif (${BINARY} MATCHES "(-ar)|(-ranlib)|(-nm)|(-c\\+\\+filt)$") 7 | continue() 8 | elseif (${BINARY} MATCHES "^(.*cc)|(.*cc\\-.*)|(.*\\+\\+)|(.*\\+\\+\\-.*)|(.*cpp)|(.*\\-gfortran)|(.*\\-gdc)$") 9 | file(RENAME "${BINDIR}/${BINARY}" "${BINDIR}/${BINARY}.br_real") 10 | file(CREATE_LINK "toolchain-wrapper" "${BINDIR}/${BINARY}" SYMBOLIC) 11 | endif () 12 | endforeach () --------------------------------------------------------------------------------