1. export SLEDGE=$HOME/sat/sledge 2. clone llvm, clang, and libcxxabi - cd $SLEDGE - git clone https://github.com/jberdine/llvm.git --branch ocaml_api - git clone https://github.com/llvm-mirror/clang.git llvm/tools/clang - git -C llvm/tools/clang checkout 32f603c58965543e256fdf8c3cb6eaceec2974da - git clone https://github.com/llvm-mirror/libcxx.git llvm/projects/libcxx - git clone https://github.com/llvm-mirror/libcxxabi.git llvm/projects/libcxxabi 3. export OPAMJOBS=$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1) 4. create opam switches - for variant in '' '+flambda'; do opam switch --yes create sledge$variant 4.07.1+rc1$variant; done 5. install llvm deps - install deps + sudo yum install cmake ninja + brew install cmake ninja - for switch in sledge sledge+flambda; do opam install --yes --switch=$switch ctypes; done 6. build llvm & clang - cd $SLEDGE/llvm - mkdir _build - cd _build - for switch in sledge sledge+flambda; do cmake -G Ninja -DCMAKE_INSTALL_PREFIX=../_install/$switch -DLLVM_OCAML_INSTALL_PATH=../_install/$switch -DLLVM_TARGETS_TO_BUILD="X86" .. && ninja && ninja install; done 7. install deps - cd $SLEDGE/llvm - for switch in sledge sledge+flambda; do opam pin --switch=$switch add -n -k git llvm .; done - cd $SLEDGE - for switch in sledge sledge+flambda; do PATH=$SLEDGE/llvm/_install/$switch/bin:$PATH opam install --yes --switch=$switch ./sledge.opam --deps-only; done 8. hush `ld: warning: directory not found for option '-L/opt/local/lib'` - the zarith package adds a spurious linker option unless you have both brew and macports, so if you see this linker warning when compiling, execute + sudo mkdir -p /opt/local/lib 9. install dev tools - opam pin --yes --switch=sledge add tools/opam 10. if needed: point new clang to xcode c++ lib - cd $SLEDGE/$(opam switch show)/include - ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++ . 11. llvm dev workflow - modify llvm sources - cd $SLEDGE/llvm/_build; ninja - iterate - (optional?) git add -u; git commit -m ... - ninja && ninja ocaml_doc && ninja install && opam upgrade llvm - cd $SLEDGE; make - it is not uncommon to get "inconsistent assumptions" errors: clean and re-make 12. llvm emacs mode - (add-to-list 'load-path (expand-file-name "$SLEDGE/llvm/utils/emacs")) - (require 'llvm-mode) - (require 'autodisass-llvm-bitcode) 13. install llair for llvm_sil - cd $SLEDGE - opam pin add -n -k git llair . + when prompted, ok to create new package - opam install llair