blob: 40a96183c8ea8247e718976b42e771d8caeb888c [file] [log] [blame]
Than McIntosh9cff07b2017-05-18 14:24:02 -04001
Than McIntosh25365e02018-06-20 09:05:08 -04002# 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 McIntosh9cff07b2017-05-18 14:24:02 -04006# 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
13include(ExternalProject)
14include(ProcessorCount)
15include(LLVMExternalProjectUtils)
16
Than McIntosh7860a962018-05-03 09:11:51 -040017list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
eric fang75e1a722019-12-03 08:43:47 +000018set(GOLLVM_USE_SPLIT_STACK ON CACHE BOOL "use split stack by default")
Than McIntosh2ded6bd2020-06-25 11:14:47 -040019set(GOLLVM_DEFAULT_LINKER gold CACHE STRING "default linker for Go links")
Than McIntoshcfefce42018-02-01 14:59:09 -050020
Than McIntosha5c58bc2018-05-03 08:32:06 -040021include(CmakeUtils)
Than McIntosh562b7972018-05-03 11:39:49 -040022include(AddGollvm)
Than McIntosha5c58bc2018-05-03 08:32:06 -040023
Than McIntosh9cff07b2017-05-18 14:24:02 -040024# So that we can issue "make -jN" cmds in externalproject_add
25processorcount(PROCESSOR_COUNT)
26
Than McIntoshed89bcb2018-02-28 16:03:37 -050027set(EXTINSTALLDIR ${CMAKE_CURRENT_BINARY_DIR}/external/install)
28set(EXTLIBDIR "${EXTINSTALLDIR}/lib")
29set(EXTINCLUDEDIR "${EXTINSTALLDIR}/include")
Cherry Zhang0612e162018-07-11 19:59:12 -040030set(EXTCPPFLAGS "CFLAGS=-I${EXTINCLUDEDIR}")
Cherry Zhangca8dc1f2018-06-12 15:40:59 -040031if(NOT "${CMAKE_SYSROOT}" STREQUAL "")
32 string(APPEND EXTCPPFLAGS " --sysroot=${CMAKE_SYSROOT}")
33endif()
Cherry Zhang6fc2bc62018-08-04 22:21:02 -040034if(LLVM_ENABLE_PIC)
Cherry Zhang48ad0532019-07-17 21:03:50 -040035 string(APPEND EXTCPPFLAGS " -fPIC -DPIC")
Cherry Zhang6fc2bc62018-08-04 22:21:02 -040036endif()
Than McIntoshed89bcb2018-02-28 16:03:37 -050037set(EXTLDFLAGS "LDFLAGS=-L${EXTLIBDIR}")
Cherry Zhangb81d2672018-06-06 11:26:10 -040038set(EXTCC "CC=${CMAKE_C_COMPILER}" "CXX=${CMAKE_CXX_COMPILER}")
Than McIntosh9cff07b2017-05-18 14:24:02 -040039
Than McIntosh96525562018-03-14 10:10:57 -040040set(gollvm_binroot "${CMAKE_CURRENT_BINARY_DIR}")
41
Than McIntosh9cff07b2017-05-18 14:24:02 -040042externalproject_add(libgmp
Than McIntosh449d6292020-12-04 12:01:14 -050043 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 Serdyuk44a7a472020-10-25 21:24:25 +020044 URL_MD5 c24161e0dd44cae78cd5f67193492a21
Than McIntosh9cff07b2017-05-18 14:24:02 -040045 DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/external-downloads
Than McIntoshed89bcb2018-02-28 16:03:37 -050046 BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/gmp-build
47 SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/gmp
Cherry Zhangb81d2672018-06-06 11:26:10 -040048 CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=${EXTINSTALLDIR} ${EXTCPPFLAGS} ${EXTLDFLAGS} ${EXTCC}
Than McIntoshed89bcb2018-02-28 16:03:37 -050049 BUILD_COMMAND make -j${PROCESSOR_COUNT} install
50 LOG_CONFIGURE 1
51 LOG_BUILD 1
52 LOG_INSTALL 1
53 )
54
55externalproject_add(libmpfr
56 DEPENDS libgmp
Than McIntosh449d6292020-12-04 12:01:14 -050057 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 Serdyuk44a7a472020-10-25 21:24:25 +020058 URL_MD5 44b892bc5a45bafb4294d134e13aad1d
Than McIntoshed89bcb2018-02-28 16:03:37 -050059 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 Zhangb81d2672018-06-06 11:26:10 -040062 CONFIGURE_COMMAND <SOURCE_DIR>/configure --with-gmp=${CMAKE_CURRENT_BINARY_DIR}/external/gmp --prefix=${EXTINSTALLDIR} ${EXTCPPFLAGS} ${EXTLDFLAGS} ${EXTCC}
Than McIntoshed89bcb2018-02-28 16:03:37 -050063 BUILD_COMMAND make -j${PROCESSOR_COUNT} install
64 LOG_CONFIGURE 1
65 LOG_BUILD 1
66 LOG_INSTALL 1
67 )
68
69externalproject_add(libmpc
70 DEPENDS libgmp libmpfr
Than McIntosh449d6292020-12-04 12:01:14 -050071 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 Serdyuk44a7a472020-10-25 21:24:25 +020072 URL_MD5 2f1ce56ac775f2be090863f364931a03
Than McIntoshed89bcb2018-02-28 16:03:37 -050073 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 Zhangb81d2672018-06-06 11:26:10 -040077 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 McIntoshed89bcb2018-02-28 16:03:37 -050078 BUILD_COMMAND make -j${PROCESSOR_COUNT} install
Than McIntosh9cff07b2017-05-18 14:24:02 -040079 LOG_CONFIGURE 1
80 LOG_BUILD 1
81 LOG_INSTALL 1
82 )
83
Than McIntosh562b7972018-05-03 11:39:49 -040084# Top level targets for building, installing
85add_custom_target(gollvm ALL)
86add_custom_target(install-gollvm)
87
Than McIntosha5c58bc2018-05-03 08:32:06 -040088# In most use cases, we want to force a rebuild of all objects built
89# from Go source if the compiler changes.
90set(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.
98if (DISABLE_LIBGO_GOC_DEP)
99 set(gocdep llvm-goc-token)
100endif()
101
Than McIntoshaccdf972018-01-22 12:35:20 -0500102# Root of gollvm source code.
103set(GOLLVM_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
104
Than McIntoshdf29fb22018-01-04 12:27:16 -0500105# Location of gofrontend source code.
106set(GOFRONTEND_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/gofrontend/go)
Than McIntosh9cff07b2017-05-18 14:24:02 -0400107
Than McIntoshdf29fb22018-01-04 12:27:16 -0500108# Location of bridge source code.
109set(BRIDGE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/bridge)
110
Cherry Zhangc20b7932018-09-20 16:13:46 -0400111# Location of gollvm specific passes source code.
112set(PASSES_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/passes)
113
Than McIntosh41157f82018-04-23 14:52:17 -0400114# Location of driver utilities source code.
115set(DRIVER_UTILS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/driver)
116
Than McIntoshdf29fb22018-01-04 12:27:16 -0500117# Subdirectory for the middle layer that translates Backend method
118# calls into LLVM IR.
119add_subdirectory(bridge)
120
Cherry Zhangc20b7932018-09-20 16:13:46 -0400121# Subdirectory for gollvm specific backend passes.
122add_subdirectory(passes)
123
Than McIntosh41157f82018-04-23 14:52:17 -0400124# Subdirectory for compiler driver utilities library.
Than McIntoshdf29fb22018-01-04 12:27:16 -0500125add_subdirectory(driver)
126
Than McIntosh41157f82018-04-23 14:52:17 -0400127# Subdirectory for compiler driver executable.
128add_subdirectory(driver-main)
129
Than McIntoshaccdf972018-01-22 12:35:20 -0500130# Go standard library
131add_subdirectory(libgo)
Than McIntosh67e1d522018-02-05 14:33:20 -0500132
133# Go tools (go, gofmt, etc)
134add_subdirectory(gotools)
Than McIntoshd9c38102018-03-07 08:36:05 -0500135
Than McIntosh41157f82018-04-23 14:52:17 -0400136# Subdir for unit tests
Than McIntoshd9c38102018-03-07 08:36:05 -0500137add_subdirectory(unittests)
138
Than McIntosh01475152018-08-15 09:19:08 -0400139# Top-level check target for gollvm
140add_custom_target(check-gollvm DEPENDS check-libgo check-gotools)