Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build(cmake): 📦 apple brew omp configs added #14

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
120 changes: 120 additions & 0 deletions .github/workflows/build_dev_macos.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# CI code is based on
# https://github.com/nihui/realsr-ncnn-vulkan/blob/master/.github/workflows/release.yml
# Modified in here for newer vulkan
# https://github.com/onuralpszr/realsr-ncnn-vulkan/blob/vulkan-ci-version/.github/workflows/CI.yml


name: macOS Dev Build
on: [pull_request]

env:
APPLICATION_NAME: gfpgan-ncnn-vulkan
DEVELOPER_DIR: /Applications/Xcode_14.2.app/Contents/Developer

jobs:
openmp-macos:
runs-on: macos-latest
steps:
- name: cache-openmp
id: cache-openmp
uses: actions/cache@v3
with:
path: openmp-install
key: openmp-macos-release-${{ vars.LLVM_PACKAGE_VERSION}}
- name: checkout
if: steps.cache-openmp.outputs.cache-hit != 'true'
uses: actions/checkout@v4
- name: openmp
if: steps.cache-openmp.outputs.cache-hit != 'true'
run: |
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-${{ vars.LLVM_PACKAGE_VERSION}}/llvm-project-${{ vars.LLVM_PACKAGE_VERSION}}.src.tar.xz
tar -xf llvm-project-${{ vars.LLVM_PACKAGE_VERSION}}.src.tar.xz
cd llvm-project-${{ vars.LLVM_PACKAGE_VERSION}}.src/openmp
- name: build-x86_64
if: steps.cache-openmp.outputs.cache-hit != 'true'
run: |
cd llvm-project-${{ vars.LLVM_PACKAGE_VERSION}}.src/openmp
mkdir build-x86_64 && cd build-x86_64
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DCMAKE_OSX_ARCHITECTURES="x86_64" \
-DLIBOMP_ENABLE_SHARED=OFF -DENABLE_CHECK_TARGETS=OFF -DLIBOMP_OMPT_SUPPORT=OFF -DLIBOMP_USE_HWLOC=OFF ..
cmake --build . -j 3
cmake --build . --target install
- name: build-arm64
if: steps.cache-openmp.outputs.cache-hit != 'true'
run: |
cd llvm-project-${{ vars.LLVM_PACKAGE_VERSION}}.src/openmp
mkdir build-arm64 && cd build-arm64
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DCMAKE_OSX_ARCHITECTURES="arm64" \
-DLIBOMP_ENABLE_SHARED=OFF -DENABLE_CHECK_TARGETS=OFF -DLIBOMP_OMPT_SUPPORT=OFF -DLIBOMP_USE_HWLOC=OFF ..
cmake --build . -j 3
cmake --build . --target install
- name: merge-fat-library
if: steps.cache-openmp.outputs.cache-hit != 'true'
run: |
rm -rf $GITHUB_WORKSPACE/openmp-install
mkdir -p $GITHUB_WORKSPACE/openmp-install
cp -r llvm-project-${{ vars.LLVM_PACKAGE_VERSION}}.src/openmp/build-x86_64/install/include $GITHUB_WORKSPACE/openmp-install
mkdir -p $GITHUB_WORKSPACE/openmp-install/lib
lipo -create llvm-project-${{ vars.LLVM_PACKAGE_VERSION}}.src/openmp/build-x86_64/install/lib/libomp.a llvm-project-${{ vars.LLVM_PACKAGE_VERSION}}.src/openmp/build-arm64/install/lib/libomp.a -o $GITHUB_WORKSPACE/openmp-install/lib/libomp.a
- name: upload
uses: actions/upload-artifact@v3
with:
name: openmp-macos
path: openmp-install

macos:
needs: [openmp-macos]
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- name: download-openmp-macos
uses: actions/download-artifact@v3
with:
name: openmp-macos
path: openmp-macos
- name: install-openmp
run: |
sudo cp openmp-macos/include/* $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
sudo cp openmp-macos/lib/libomp.a $DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib
- name: cache-vulkansdk
id: cache-vulkansdk
uses: actions/cache@v3
with:
path: "vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}"
key: vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}
- name: vulkansdk
if: steps.cache-vulkansdk.outputs.cache-hit != 'true'
run: |
wget https://sdk.lunarg.com/sdk/download/${{ vars.VULKAN_SDK_VERSION }}/mac/vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}.dmg?Human=true -O vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}.dmg
hdiutil attach vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}.dmg
cp -r /Volumes/vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }} .
rm -rf vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}/Applications
find vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }} -type f | grep -v -E 'vulkan|glslang|MoltenVK' | xargs rm
hdiutil detach /Volumes/vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}
- name: build-x86_64
run: |
export VULKAN_SDK=`pwd`/vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}/macOS
mkdir build-x86_64 && cd build-x86_64
cmake -DUSE_OPENMP_SRC=ON -DUSE_STATIC_MOLTENVK=ON -DCMAKE_OSX_ARCHITECTURES="x86_64" \
-DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \
-DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \
-DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \
-DVulkan_INCLUDE_DIR=`pwd`/../vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}/MoltenVK/include \
-DVulkan_LIBRARY=`pwd`/../vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}/MoltenVK/MoltenVK.xcframework/macos-arm64_x86_64/libMoltenVK.a \
../src
cmake --build . -j 3
- name: build-arm64
run: |
export VULKAN_SDK=`pwd`/vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}/macOS
mkdir build-arm64 && cd build-arm64
cmake -DUSE_OPENMP_SRC=ON -DUSE_STATIC_MOLTENVK=ON -DCMAKE_OSX_ARCHITECTURES="arm64" \
-DCMAKE_CROSSCOMPILING=ON -DCMAKE_SYSTEM_PROCESSOR=arm64 \
-DOpenMP_C_FLAGS="-Xclang -fopenmp" -DOpenMP_CXX_FLAGS="-Xclang -fopenmp" \
-DOpenMP_C_LIB_NAMES="libomp" -DOpenMP_CXX_LIB_NAMES="libomp" \
-DOpenMP_libomp_LIBRARY="$DEVELOPER_DIR/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/libomp.a" \
-DVulkan_INCLUDE_DIR=`pwd`/../vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}/MoltenVK/include \
-DVulkan_LIBRARY=`pwd`/../vulkansdk-macos-${{ vars.VULKAN_SDK_VERSION }}/MoltenVK/MoltenVK.xcframework/macos-arm64_x86_64/libMoltenVK.a \
../src
cmake --build . -j 3
19 changes: 18 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,27 @@ set(CMAKE_CXX_EXTENSIONS ON)
option(USE_SYSTEM_NCNN "build with system libncnn" OFF)
option(USE_SYSTEM_WEBP "build with system libwebp" OFF)

set(USE_OPENMP_SRC OFF)

if(APPLE AND NOT USE_OPENMP_SRC)
find_program(BREW_EXECUTABLE NAMES brew)
if(NOT BREW_EXECUTABLE)
message(FATAL_ERROR "Brew not found!")
endif()
execute_process(COMMAND brew --prefix libomp
OUTPUT_VARIABLE HOMEBREW_LIBOMP_PREFIX
OUTPUT_STRIP_TRAILING_WHITESPACE)
set(OpenMP_C_FLAGS
"-Xpreprocessor -fopenmp -I${HOMEBREW_LIBOMP_PREFIX}/include")
set(OpenMP_CXX_FLAGS
"-Xpreprocessor -fopenmp -I${HOMEBREW_LIBOMP_PREFIX}/include")
set(OpenMP_C_LIB_NAMES omp)
set(OpenMP_CXX_LIB_NAMES omp)
set(OpenMP_omp_LIBRARY ${HOMEBREW_LIBOMP_PREFIX}/lib/libomp.dylib)
endif()

find_package(Threads)
find_package(OpenMP REQUIRED)
find_package(Threads)
find_package(Vulkan REQUIRED)

if (Vulkan_FOUND)
Expand Down
Loading