1+ #! /bin/bash
2+
3+ # Usage: makeMac.sh [--arch <x86_64 or arm64>]
4+ # Defaults: arch = ""
15
26# NOTE if fails in nataf_gsa on Mac it is because clang still not working with omp,
37# SOLN: you need a brew install of libomp, issue:
@@ -8,32 +12,91 @@ export CC=clang
812export CXX=clang++
913export CMAKE_ARGS=-DCMAKE_POLICY_VERSION_MINIMUM=3.5
1014
15+ CONAN_PROFILE=" default"
16+ BUILD_DIR=" build"
17+ OUTPUT_DIR=" applications"
18+ ARCH=" "
19+
20+ while [[ $# -gt 0 ]]; do
21+ case " $1 " in
22+ --arch|-a)
23+ # 1. Capture the value
24+ ARCH=" $2 "
25+
26+ # 2. VALIDATION: Check if it's one of the allowed types
27+ if [[ " $ARCH " != " x86_64" && " $ARCH " != " arm64" ]]; then
28+ echo " Error: Invalid architecture '$ARCH '."
29+ echo " Supported architectures: x86_64, arm64"
30+ exit 1
31+ fi
32+
33+ if [[ " $ARCH " != " x86_64" ]]; then
34+ CMAKE_DAKOTA_VERSION=619
35+ else
36+ CMAKE_DAKOTA_VERSION=620
37+ fi
38+
39+ # 3. If valid, set the variables
40+ CONAN_PROFILE=" macos-$ARCH "
41+ BUILD_DIR=" build_$ARCH "
42+ OUTPUT_DIR=" ${OUTPUT_DIR} _$ARCH "
43+
44+ shift 2
45+ ;;
46+ * )
47+ echo " Unknown argument: $1 "
48+ echo " Usage: $0 --arch <arm64|x86_64>"
49+ exit 1
50+ ;;
51+ esac
52+ done
53+
54+ # Define a helper to print error and stop without closing the terminal
55+ die () {
56+ echo " $1 "
57+ exit 1
58+ }
59+
60+ echo " Cleaning up old build directory..."
61+ rm -rf " ${BUILD_DIR} "
62+
1163#
1264# run conan to install dependencies
1365#
1466
15- conan install . --output-folder=build --build= missing
67+ conan install . --output-folder=" ${BUILD_DIR} " --build missing -s build_type=Release -pr " ${CONAN_PROFILE} " || die " FAIL: Conan install failed. "
1668
1769#
1870# run cmake to generate CMakefiles, then build & finally install
19- #
2071
21- cmake -B build -DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake -DCMAKE_BUILD_TYPE=Release
22- cmake --build build
23- cmake --install build --prefix ./applications
72+ CMAKE_ARCH_FLAG=" "
73+ if [ -n " ${ARCH} " ]; then
74+ CMAKE_ARCH_FLAG=" -DCMAKE_OSX_ARCHITECTURES=${ARCH} "
75+ fi
76+
77+ cmake -B " ${BUILD_DIR} " -S . \
78+ -DCMAKE_TOOLCHAIN_FILE=" ${BUILD_DIR} /conan_toolchain.cmake" ${CMAKE_ARCH_FLAG} -DDAKOTA_VERSION=${CMAKE_DAKOTA_VERSION} \
79+ -DCMAKE_BUILD_TYPE=Release || die " FAIL: CMake configure failed."
80+
81+ cmake --build " ${BUILD_DIR} " --parallel 8 || die " FAIL: CMake build failed."
82+
83+ cmake --install " ${BUILD_DIR} " --prefix " ${OUTPUT_DIR} " || die " FAIL: CMake install failed."
2484
2585#
2686# Bundle libomp.dylib with nataf_gsa and run install_name_tool on natf_gsa so it runs without needing a brew install on user machine
2787#
2888
29- NATAF_DIR=" ${PWD} /applications/performUQ/SimCenterUQ"
30- LIBOMP_DIR=" $( brew --prefix libomp) /lib"
89+ NATAF_DIR=" ${PWD} /${OUTPUT_DIR} /performUQ/SimCenterUQ"
90+ if [ " ${ARCH} " = " x86_64" ]; then
91+ LIBOMP_DIR=" /usr/local/opt/libomp/lib"
92+ else
93+ LIBOMP_DIR=" $( brew --prefix libomp) /lib"
94+ fi
3195LIBOMP_SRC=" ${LIBOMP_DIR} /libomp.dylib"
3296echo " $PWD ${LIBOMP_SRC} ${NATAF_DIR} /libomp.dylib "
3397
34-
3598if [ -f " ${NATAF_DIR} /nataf_gsa" ] && [ -f " ${LIBOMP_SRC} " ]; then
36- cp " ${LIBOMP_SRC} " " ${NATAF_DIR} "
99+ cp -f " ${LIBOMP_SRC} " " ${NATAF_DIR} "
37100 install_name_tool -change " ${LIBOMP_SRC} " " @executable_path/libomp.dylib" " ${NATAF_DIR} /nataf_gsa"
38101 echo " Bundled libomp.dylib into ${NATAF_DIR} "
39102else
0 commit comments