From 38090aa7798c4e01cf6afeddd0369d5f79e534bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Sok=C3=B3=C5=82?= Date: Thu, 1 Aug 2024 15:51:34 +0200 Subject: [PATCH] BLD: Add support for Darwin system --- ...meson_linux.yml => meson_linux_darwin.yml} | 25 ++++++++++++++++--- driver/level2/meson.build | 4 +-- driver/level3/meson.build | 4 +-- driver/others/meson.build | 12 ++++----- interface/meson.build | 12 ++++----- kernel/meson.build | 4 +-- meson.build | 11 +++++++- 7 files changed, 49 insertions(+), 23 deletions(-) rename .github/workflows/{meson_linux.yml => meson_linux_darwin.yml} (59%) diff --git a/.github/workflows/meson_linux.yml b/.github/workflows/meson_linux_darwin.yml similarity index 59% rename from .github/workflows/meson_linux.yml rename to .github/workflows/meson_linux_darwin.yml index d6c8b6b23..ab63be52e 100644 --- a/.github/workflows/meson_linux.yml +++ b/.github/workflows/meson_linux_darwin.yml @@ -1,6 +1,5 @@ name: meson build -#on: [push, pull_request] on: push: branches: @@ -21,11 +20,12 @@ permissions: jobs: build: if: "github.repository == 'HaoZeke/OpenBLAS'" - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: + os: [ubuntu-latest, macos-13] build: [meson] fortran: [gfortran] openmp: [0] @@ -37,7 +37,14 @@ jobs: - name: Print system information run: | - cat /proc/cpuinfo + if [ "$RUNNER_OS" == "Linux" ]; then + cat /proc/cpuinfo + elif [ "$RUNNER_OS" == "macOS" ]; then + sysctl -a | grep machdep.cpu + else + echo "::error::$RUNNER_OS not supported" + exit 1 + fi - name: Set up Python uses: actions/setup-python@v5 with: @@ -46,7 +53,17 @@ jobs: - name: Install dependencies run: | - sudo apt-get install -y gfortran libtinfo5 + if [ "$RUNNER_OS" == "Linux" ]; then + sudo apt-get install -y gfortran libtinfo5 + elif [ "$RUNNER_OS" == "macOS" ]; then + # It looks like "gfortran" isn't working correctly unless "gcc" is re-installed. + brew reinstall gcc + brew install coreutils + brew install llvm + else + echo "::error::$RUNNER_OS not supported" + exit 1 + fi - name: Install packages run: | python -m pip install meson ninja diff --git a/driver/level2/meson.build b/driver/level2/meson.build index bbc1c859d..78e25b3fd 100644 --- a/driver/level2/meson.build +++ b/driver/level2/meson.build @@ -513,8 +513,8 @@ foreach _kop : driver_kops # Add standard flags for naming conventions _ext_cargs += [ - f'-DASMNAME=@sym_name@', - f'-DASMFNAME=@sym_underscored@', + f'-DASMNAME=@asm_name_prefix@@sym_name@', + f'-DASMFNAME=@asm_name_prefix@@sym_underscored@', f'-DNAME=@sym_underscored@', f'-DCNAME=@sym_name@', f'-DCHAR_NAME="@sym_underscored@"', diff --git a/driver/level3/meson.build b/driver/level3/meson.build index 2a1c22eac..fca6407cf 100644 --- a/driver/level3/meson.build +++ b/driver/level3/meson.build @@ -438,8 +438,8 @@ foreach _kop : driver_kops # Add standard flags for naming conventions _ext_cargs += [ - f'-DASMNAME=@sym_name@', - f'-DASMFNAME=@sym_underscored@', + f'-DASMNAME=@asm_name_prefix@@sym_name@', + f'-DASMFNAME=@asm_name_prefix@@sym_underscored@', f'-DNAME=@sym_underscored@', f'-DCNAME=@sym_name@', f'-DCHAR_NAME="@sym_underscored@"', diff --git a/driver/others/meson.build b/driver/others/meson.build index 127c12a25..c1a2e681f 100644 --- a/driver/others/meson.build +++ b/driver/others/meson.build @@ -52,12 +52,12 @@ foreach op : others_ops # Add standard flags for naming conventions c_args += [ - '-DASMNAME=@0@'.format(sym_name), - '-DASMFNAME=@0@_'.format(sym_name), - '-DNAME=@0@_'.format(sym_name), - '-DCNAME=@0@'.format(sym_name), - '-DCHAR_NAME="@0@_"'.format(sym_name), - '-DCHAR_CNAME="@0@"'.format(sym_name) + f'-DASMNAME=@asm_name_prefix@@sym_name@', + f'-DASMFNAME=@asm_name_prefix@@sym_name@_', + f'-DNAME=@sym_name@_', + f'-DCNAME=@sym_name@', + f'-DCHAR_NAME="@sym_name@_"', + f'-DCHAR_CNAME="@sym_name@"', ] # Append the current configuration diff --git a/interface/meson.build b/interface/meson.build index 5ac098573..ff19535da 100644 --- a/interface/meson.build +++ b/interface/meson.build @@ -626,12 +626,12 @@ foreach conf : _blas_roots sources: [conf['fname'], config_h], include_directories: _inc, c_args: compiler_args + [ - f'-DASMNAME=@sym_name@', - f'-DASMFNAME=@sym_underscored@', + f'-DASMNAME=@asm_name_prefix@@sym_name@', + f'-DASMFNAME=@asm_name_prefix@@sym_underscored@', f'-DNAME=@sym_underscored@', f'-DCNAME=@sym_name@', f'-DCHAR_NAME="@sym_underscored@"', - f'-DCHAR_CNAME="@sym_name@"' + f'-DCHAR_CNAME="@sym_name@"', ] ) _interface_libs += lib @@ -649,12 +649,12 @@ foreach conf : _blas_roots include_directories: _inc, c_args: compiler_args + [ '-DCBLAS', - f'-DASMNAME=@cblas_sym_name@', - f'-DASMFNAME=@cblas_sym_underscored@', + f'-DASMNAME=@asm_name_prefix@@cblas_sym_name@', + f'-DASMFNAME=@asm_name_prefix@@cblas_sym_underscored@', f'-DNAME=@cblas_sym_underscored@', f'-DCNAME=@cblas_sym_name@', f'-DCHAR_NAME="@cblas_sym_underscored@"', - f'-DCHAR_CNAME="@cblas_sym_name@"' + f'-DCHAR_CNAME="@cblas_sym_name@"', ] ) _interface_libs += cblas_lib diff --git a/kernel/meson.build b/kernel/meson.build index 06cec1049..b04cae6d1 100644 --- a/kernel/meson.build +++ b/kernel/meson.build @@ -1486,8 +1486,8 @@ foreach _kop : base_kops sym_name = base.replace('?', mode) + ext sym_underscored = f'@sym_name@_' _ext_cargs += [ - f'-DASMNAME=@sym_name@', - f'-DASMFNAME=@sym_underscored@', + f'-DASMNAME=@asm_name_prefix@@sym_name@', + f'-DASMFNAME=@asm_name_prefix@@sym_underscored@', f'-DNAME=@sym_underscored@', f'-DCNAME=@sym_name@', f'-DCHAR_NAME="@sym_underscored@"', diff --git a/meson.build b/meson.build index 90148b945..775fa5b85 100644 --- a/meson.build +++ b/meson.build @@ -67,12 +67,21 @@ max_stack_alloc = get_option('max_stack_alloc') quad_prec = get_option('quad_precision') exprecision = get_option('exprecision') -if host_machine.system() == 'linux' +is_linux = host_machine.system() == 'linux' +is_darwin = host_machine.system() == 'darwin' + +if is_linux or is_darwin no_affinity = true else no_affinity = false endif +if cc_id == 'clang' + asm_name_prefix = '_' +else + asm_name_prefix = '' +endif + _check_prefix = [] conf_data = configuration_data() is_win = host_machine.system() == 'windows' or host_machine.system() == 'cygwin'