build.mk 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. abs_top_srcdir ?= $(abspath $(CURDIR)/..)
  2. LLVM_BUILD ?= $(abspath $(abs_top_srcdir)/llvm/build)
  3. LLVM_PREFIX ?= $(abspath $(abs_top_srcdir)/llvm/usr)
  4. # LLVM_BRANCH := $(shell git -C "$(abs_top_srcdir)/external/llvm-project/llvm" rev-parse --abbrev-ref HEAD)
  5. LLVM_VERSION := $(shell git -C "$(abs_top_srcdir)/external/llvm-project/llvm" rev-parse HEAD)
  6. # FIXME: URL should be https://xamjenkinsartifact.blob.core.windows.net/build-package-osx-llvm-$(LLVM_BRANCH)/llvm-osx64-$(LLVM_VERSION).tar.gz
  7. LLVM_DOWNLOAD_LOCATION = "https://xamjenkinsartifact.blob.core.windows.net/build-package-osx-llvm-release60/llvm-osx64-$(LLVM_VERSION).tar.gz"
  8. CPU_COUNT ?= $(shell getconf _NPROCESSORS_ONLN || echo 8)
  9. CMAKE := $(or $(CMAKE),$(shell which cmake))
  10. NINJA := $(shell which ninja)
  11. EXTRA_LLVM_ARGS = $(if $(filter $(LLVM_TARGET),wasm32), -DLLVM_BUILD_32_BITS=On -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="WebAssembly",) \
  12. $(if $(STATIC_GCC_LIBS),-DCMAKE_EXE_LINKER_FLAGS="-static")
  13. # -DLLVM_ENABLE_LIBXML2=Off is needed because xml2 is not used and it breaks 32-bit builds on 64-bit Linux hosts
  14. $(LLVM_BUILD)/$(if $(NINJA),build.ninja,Makefile): $(abs_top_srcdir)/external/llvm-project/llvm/CMakeLists.txt
  15. mkdir -p $(LLVM_BUILD) $(LLVM_PREFIX)
  16. cd $(LLVM_BUILD) && $(CMAKE) \
  17. $(if $(NINJA),-G Ninja) \
  18. -DCMAKE_INSTALL_PREFIX="$(LLVM_PREFIX)" \
  19. -DCMAKE_BUILD_TYPE=Release \
  20. -DLLVM_BUILD_TESTS=Off \
  21. -DLLVM_INCLUDE_TESTS=Off \
  22. -DLLVM_BUILD_EXAMPLES=Off \
  23. -DLLVM_INCLUDE_EXAMPLES=Off \
  24. -DLLVM_TOOLS_TO_BUILD="opt;llc;llvm-config;llvm-dis" \
  25. -DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64" \
  26. $(EXTRA_LLVM_ARGS) \
  27. -DLLVM_ENABLE_ASSERTIONS=$(ENABLE_ASSERTS) \
  28. -DLLVM_ENABLE_LIBXML2=Off \
  29. -DHAVE_FUTIMENS=0 \
  30. $(LLVM_CMAKE_ARGS) \
  31. $(dir $<)
  32. .PHONY: configure-llvm
  33. configure-llvm: $(LLVM_BUILD)/$(if $(NINJA),build.ninja,Makefile)
  34. # The DESTDIR fix is to prevent the build from trying to install this out-of-build-tree
  35. # as the DESTDIR hasn't been created when we're building mono
  36. .PHONY: build-llvm
  37. build-llvm: configure-llvm
  38. DESTDIR="" $(if $(NINJA),$(NINJA),$(MAKE) -j$(CPU_COUNT)) -C $(LLVM_BUILD)
  39. .PHONY: install-llvm
  40. install-llvm: build-llvm
  41. DESTDIR="" $(if $(NINJA),$(NINJA),$(MAKE)) -C $(LLVM_BUILD) install
  42. .PHONY: download-llvm
  43. download-llvm:
  44. (wget --no-verbose -O - $(LLVM_DOWNLOAD_LOCATION) || curl -L $(LLVM_DOWNLOAD_LOCATION)) | tar -xzf - -C $(dir $(LLVM_PREFIX))
  45. .PHONY: clean-llvm
  46. clean-llvm:
  47. $(RM) -r $(LLVM_BUILD) $(LLVM_PREFIX)