Than McIntosh | 9cff07b | 2017-05-18 14:24:02 -0400 | [diff] [blame] | 1 | |
Than McIntosh | 25365e0 | 2018-06-20 09:05:08 -0400 | [diff] [blame] | 2 | # Copyright 2018 The Go Authors. All rights reserved. |
| 3 | # Use of this source code is governed by a BSD-style |
| 4 | # license that can be found in the LICENSE file. |
| 5 | |
Than McIntosh | 9cff07b | 2017-05-18 14:24:02 -0400 | [diff] [blame] | 6 | # Notes: |
| 7 | # |
| 8 | # The code in gofrontend depends on functions from GMP, MPC, and MPFR; |
| 9 | # these libraries are currently handled via the cmake "ExternalProject" |
| 10 | # utility. |
| 11 | # |
| 12 | |
| 13 | include(ExternalProject) |
| 14 | include(ProcessorCount) |
| 15 | include(LLVMExternalProjectUtils) |
| 16 | |
Than McIntosh | 7860a96 | 2018-05-03 09:11:51 -0400 | [diff] [blame] | 17 | list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") |
eric fang | 75e1a72 | 2019-12-03 08:43:47 +0000 | [diff] [blame] | 18 | set(GOLLVM_USE_SPLIT_STACK ON CACHE BOOL "use split stack by default") |
Than McIntosh | 2ded6bd | 2020-06-25 11:14:47 -0400 | [diff] [blame] | 19 | set(GOLLVM_DEFAULT_LINKER gold CACHE STRING "default linker for Go links") |
Than McIntosh | cfefce4 | 2018-02-01 14:59:09 -0500 | [diff] [blame] | 20 | |
Than McIntosh | a5c58bc | 2018-05-03 08:32:06 -0400 | [diff] [blame] | 21 | include(CmakeUtils) |
Than McIntosh | 562b797 | 2018-05-03 11:39:49 -0400 | [diff] [blame] | 22 | include(AddGollvm) |
Than McIntosh | a5c58bc | 2018-05-03 08:32:06 -0400 | [diff] [blame] | 23 | |
Than McIntosh | 9cff07b | 2017-05-18 14:24:02 -0400 | [diff] [blame] | 24 | # So that we can issue "make -jN" cmds in externalproject_add |
| 25 | processorcount(PROCESSOR_COUNT) |
| 26 | |
Than McIntosh | ed89bcb | 2018-02-28 16:03:37 -0500 | [diff] [blame] | 27 | set(EXTINSTALLDIR ${CMAKE_CURRENT_BINARY_DIR}/external/install) |
| 28 | set(EXTLIBDIR "${EXTINSTALLDIR}/lib") |
| 29 | set(EXTINCLUDEDIR "${EXTINSTALLDIR}/include") |
Cherry Zhang | 0612e16 | 2018-07-11 19:59:12 -0400 | [diff] [blame] | 30 | set(EXTCPPFLAGS "CFLAGS=-I${EXTINCLUDEDIR}") |
Cherry Zhang | ca8dc1f | 2018-06-12 15:40:59 -0400 | [diff] [blame] | 31 | if(NOT "${CMAKE_SYSROOT}" STREQUAL "") |
| 32 | string(APPEND EXTCPPFLAGS " --sysroot=${CMAKE_SYSROOT}") |
| 33 | endif() |
Cherry Zhang | 6fc2bc6 | 2018-08-04 22:21:02 -0400 | [diff] [blame] | 34 | if(LLVM_ENABLE_PIC) |
Cherry Zhang | 48ad053 | 2019-07-17 21:03:50 -0400 | [diff] [blame] | 35 | string(APPEND EXTCPPFLAGS " -fPIC -DPIC") |
Cherry Zhang | 6fc2bc6 | 2018-08-04 22:21:02 -0400 | [diff] [blame] | 36 | endif() |
Than McIntosh | ed89bcb | 2018-02-28 16:03:37 -0500 | [diff] [blame] | 37 | set(EXTLDFLAGS "LDFLAGS=-L${EXTLIBDIR}") |
Cherry Zhang | b81d267 | 2018-06-06 11:26:10 -0400 | [diff] [blame] | 38 | set(EXTCC "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}") |
Than McIntosh | 9cff07b | 2017-05-18 14:24:02 -0400 | [diff] [blame] | 39 | |
Than McIntosh | 9652556 | 2018-03-14 10:10:57 -0400 | [diff] [blame] | 40 | set(gollvm_binroot "${CMAKE_CURRENT_BINARY_DIR}") |
| 41 | |
Than McIntosh | 9cff07b | 2017-05-18 14:24:02 -0400 | [diff] [blame] | 42 | externalproject_add(libgmp |
Than McIntosh | 449d629 | 2020-12-04 12:01:14 -0500 | [diff] [blame] | 43 | URL https://gmplib.org/download/gmp/gmp-6.2.0.tar.bz2 https://mirrors.kernel.org/gnu/gmp/gmp-6.2.0.tar.bz2 |
Ivan Serdyuk | 44a7a47 | 2020-10-25 21:24:25 +0200 | [diff] [blame] | 44 | URL_MD5 c24161e0dd44cae78cd5f67193492a21 |
Than McIntosh | 9cff07b | 2017-05-18 14:24:02 -0400 | [diff] [blame] | 45 | DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/external-downloads |
Than McIntosh | ed89bcb | 2018-02-28 16:03:37 -0500 | [diff] [blame] | 46 | BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/gmp-build |
| 47 | SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/gmp |
Cherry Zhang | b81d267 | 2018-06-06 11:26:10 -0400 | [diff] [blame] | 48 | CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${EXTINSTALLDIR} ${EXTCPPFLAGS} ${EXTLDFLAGS} ${EXTCC} |
Than McIntosh | ed89bcb | 2018-02-28 16:03:37 -0500 | [diff] [blame] | 49 | BUILD_COMMAND make -j${PROCESSOR_COUNT} install |
| 50 | LOG_CONFIGURE 1 |
| 51 | LOG_BUILD 1 |
| 52 | LOG_INSTALL 1 |
| 53 | ) |
| 54 | |
| 55 | externalproject_add(libmpfr |
| 56 | DEPENDS libgmp |
Than McIntosh | 449d629 | 2020-12-04 12:01:14 -0500 | [diff] [blame] | 57 | URL https://www.mpfr.org/mpfr-current/mpfr-4.1.0.tar.bz2 https://mirrors.kernel.org/gnu/mpfr/mpfr-4.1.0.tar.bz2 |
Ivan Serdyuk | 44a7a47 | 2020-10-25 21:24:25 +0200 | [diff] [blame] | 58 | URL_MD5 44b892bc5a45bafb4294d134e13aad1d |
Than McIntosh | ed89bcb | 2018-02-28 16:03:37 -0500 | [diff] [blame] | 59 | DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/external-downloads |
| 60 | BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/mpfr |
| 61 | SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/mpfr |
Cherry Zhang | b81d267 | 2018-06-06 11:26:10 -0400 | [diff] [blame] | 62 | CONFIGURE_COMMAND <SOURCE_DIR>/configure --with-gmp=${CMAKE_CURRENT_BINARY_DIR}/external/gmp --prefix=${EXTINSTALLDIR} ${EXTCPPFLAGS} ${EXTLDFLAGS} ${EXTCC} |
Than McIntosh | ed89bcb | 2018-02-28 16:03:37 -0500 | [diff] [blame] | 63 | BUILD_COMMAND make -j${PROCESSOR_COUNT} install |
| 64 | LOG_CONFIGURE 1 |
| 65 | LOG_BUILD 1 |
| 66 | LOG_INSTALL 1 |
| 67 | ) |
| 68 | |
| 69 | externalproject_add(libmpc |
| 70 | DEPENDS libgmp libmpfr |
Than McIntosh | 449d629 | 2020-12-04 12:01:14 -0500 | [diff] [blame] | 71 | URL https://ftp.gnu.org/gnu/mpc/mpc-1.2.0.tar.gz https://mirrors.kernel.org/gnu/mpc/mpc-1.2.0.tar.gz |
Ivan Serdyuk | 44a7a47 | 2020-10-25 21:24:25 +0200 | [diff] [blame] | 72 | URL_MD5 2f1ce56ac775f2be090863f364931a03 |
Than McIntosh | ed89bcb | 2018-02-28 16:03:37 -0500 | [diff] [blame] | 73 | DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/external-downloads |
| 74 | BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/mpc |
| 75 | SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/mpc |
| 76 | PREFIX ${EXTINSTALLDIR} |
Cherry Zhang | b81d267 | 2018-06-06 11:26:10 -0400 | [diff] [blame] | 77 | CONFIGURE_COMMAND <SOURCE_DIR>/configure --with-gmp=${CMAKE_CURRENT_BINARY_DIR}/external/gmp --with-mpfr=${CMAKE_CURRENT_BINARY_DIR}/external/mpfr --prefix=${EXTINSTALLDIR} ${EXTCPPFLAGS} ${EXTLDFLAGS} ${EXTCC} |
Than McIntosh | ed89bcb | 2018-02-28 16:03:37 -0500 | [diff] [blame] | 78 | BUILD_COMMAND make -j${PROCESSOR_COUNT} install |
Than McIntosh | 9cff07b | 2017-05-18 14:24:02 -0400 | [diff] [blame] | 79 | LOG_CONFIGURE 1 |
| 80 | LOG_BUILD 1 |
| 81 | LOG_INSTALL 1 |
| 82 | ) |
| 83 | |
Than McIntosh | 562b797 | 2018-05-03 11:39:49 -0400 | [diff] [blame] | 84 | # Top level targets for building, installing |
| 85 | add_custom_target(gollvm ALL) |
| 86 | add_custom_target(install-gollvm) |
| 87 | |
Than McIntosh | a5c58bc | 2018-05-03 08:32:06 -0400 | [diff] [blame] | 88 | # In most use cases, we want to force a rebuild of all objects built |
| 89 | # from Go source if the compiler changes. |
| 90 | set(gocdep llvm-goc llvm-goc-token) |
| 91 | |
| 92 | # For compiler developers, however, the dependence this can be a |
| 93 | # hassle-- when hacking on the compiler, it is annoying to have each |
| 94 | # tiny change force a library rebuild, so the DISABLE_LIBGO_GOC_DEP can |
| 95 | # be set as an (unsafe) escape hatch to break the dependence from golibs |
| 96 | # to compiler. In this case we still need to insure that the compiler |
| 97 | # exists, but we don't care whether it is up to date or not. |
| 98 | if (DISABLE_LIBGO_GOC_DEP) |
| 99 | set(gocdep llvm-goc-token) |
| 100 | endif() |
| 101 | |
Than McIntosh | accdf97 | 2018-01-22 12:35:20 -0500 | [diff] [blame] | 102 | # Root of gollvm source code. |
| 103 | set(GOLLVM_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 104 | |
Than McIntosh | df29fb2 | 2018-01-04 12:27:16 -0500 | [diff] [blame] | 105 | # Location of gofrontend source code. |
| 106 | set(GOFRONTEND_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/gofrontend/go) |
Than McIntosh | 9cff07b | 2017-05-18 14:24:02 -0400 | [diff] [blame] | 107 | |
Than McIntosh | df29fb2 | 2018-01-04 12:27:16 -0500 | [diff] [blame] | 108 | # Location of bridge source code. |
| 109 | set(BRIDGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/bridge) |
| 110 | |
Cherry Zhang | c20b793 | 2018-09-20 16:13:46 -0400 | [diff] [blame] | 111 | # Location of gollvm specific passes source code. |
| 112 | set(PASSES_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/passes) |
| 113 | |
Than McIntosh | 41157f8 | 2018-04-23 14:52:17 -0400 | [diff] [blame] | 114 | # Location of driver utilities source code. |
| 115 | set(DRIVER_UTILS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/driver) |
| 116 | |
Than McIntosh | df29fb2 | 2018-01-04 12:27:16 -0500 | [diff] [blame] | 117 | # Subdirectory for the middle layer that translates Backend method |
| 118 | # calls into LLVM IR. |
| 119 | add_subdirectory(bridge) |
| 120 | |
Cherry Zhang | c20b793 | 2018-09-20 16:13:46 -0400 | [diff] [blame] | 121 | # Subdirectory for gollvm specific backend passes. |
| 122 | add_subdirectory(passes) |
| 123 | |
Than McIntosh | 41157f8 | 2018-04-23 14:52:17 -0400 | [diff] [blame] | 124 | # Subdirectory for compiler driver utilities library. |
Than McIntosh | df29fb2 | 2018-01-04 12:27:16 -0500 | [diff] [blame] | 125 | add_subdirectory(driver) |
| 126 | |
Than McIntosh | 41157f8 | 2018-04-23 14:52:17 -0400 | [diff] [blame] | 127 | # Subdirectory for compiler driver executable. |
| 128 | add_subdirectory(driver-main) |
| 129 | |
Than McIntosh | accdf97 | 2018-01-22 12:35:20 -0500 | [diff] [blame] | 130 | # Go standard library |
| 131 | add_subdirectory(libgo) |
Than McIntosh | 67e1d52 | 2018-02-05 14:33:20 -0500 | [diff] [blame] | 132 | |
| 133 | # Go tools (go, gofmt, etc) |
| 134 | add_subdirectory(gotools) |
Than McIntosh | d9c3810 | 2018-03-07 08:36:05 -0500 | [diff] [blame] | 135 | |
Than McIntosh | 41157f8 | 2018-04-23 14:52:17 -0400 | [diff] [blame] | 136 | # Subdir for unit tests |
Than McIntosh | d9c3810 | 2018-03-07 08:36:05 -0500 | [diff] [blame] | 137 | add_subdirectory(unittests) |
| 138 | |
Than McIntosh | 0147515 | 2018-08-15 09:19:08 -0400 | [diff] [blame] | 139 | # Top-level check target for gollvm |
| 140 | add_custom_target(check-gollvm DEPENDS check-libgo check-gotools) |