include(ExternalProject)
include(ProcessorCount)

# Provide a config.h which exposes build system information.
configure_file(
  cmd/gllgo/config.h.cmake
  ${CMAKE_CURRENT_BINARY_DIR}/cmd/gllgo/config.h)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/cmd/gllgo)

llvm_add_go_executable(llgo llvm.org/llgo/cmd/gllgo ALL DEPENDS
  build/context.go
  cmd/gllgo/gllgo.go
  debug/debug.go
  driver/parser.go
  irgen/annotations.go
  irgen/attribute.go
  irgen/builtins.go
  irgen/cabi.go
  irgen/call.go
  irgen/channels.go
  irgen/closures.go
  irgen/compiler.go
  irgen/errors.go
  irgen/indirect.go
  irgen/interfaces.go
  irgen/maps.go
  irgen/predicates.go
  irgen/println.go
  irgen/runtime.go
  irgen/slice.go
  irgen/ssa.go
  irgen/strings.go
  irgen/switches.go
  irgen/targets.go
  irgen/typemap.go
  irgen/types.go
  irgen/utils.go
  irgen/value.go
  irgen/version.go
  ssaopt/esc.go
)

string(REGEX MATCH "[0-9]+\\.[0-9]+(\\.[0-9]+)?" LLGO_VERSION
  ${PACKAGE_VERSION})

configure_file(
  cmd/go/zdefaultcc.go.in
  ${CMAKE_CURRENT_BINARY_DIR}/cmd/go/zdefaultcc.go)

set(LLGO_GO_SOURCES
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/build.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/clean.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/context.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/discovery.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/doc.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/env.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/fix.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/fmt.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/generate.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/get.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/go11.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/help.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/http.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/list.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/main.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/pkg.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/run.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/signal.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/signal_unix.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/testflag.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/test.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/tool.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/vcs.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/version.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/go/vet.go
  ${CMAKE_CURRENT_BINARY_DIR}/cmd/go/zdefaultcc.go
)

add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/llgo-go${CMAKE_EXECUTABLE_SUFFIX}
  COMMAND ${CMAKE_BINARY_DIR}/bin/llgo -static-libgo
          -o ${CMAKE_BINARY_DIR}/bin/llgo-go${CMAKE_EXECUTABLE_SUFFIX}
          ${LLGO_GO_SOURCES}
          ${CMAKE_CURRENT_BINARY_DIR}/libgo/zstdpkglist.go
  DEPENDS llgo libgo ${LLGO_GO_SOURCES}
  COMMENT "Building Go executable llgo-go"
  VERBATIM)
add_custom_target(llgo-go ALL DEPENDS ${CMAKE_BINARY_DIR}/bin/llgo-go${CMAKE_EXECUTABLE_SUFFIX})

set(LLGO_CGO_SOURCES
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/cgo/ast.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/cgo/doc.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/cgo/gcc.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/cgo/godefs.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/cgo/main.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/cgo/out.go
  ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo/go/cmd/cgo/util.go
  ${CMAKE_CURRENT_SOURCE_DIR}/cmd/cgo/zdefaultcc.go
)

add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/lib/go/llgo-${LLGO_VERSION}/cgo
  COMMAND ${CMAKE_BINARY_DIR}/bin/llgo -static-libgo
          -o ${CMAKE_BINARY_DIR}/lib/go/llgo-${LLGO_VERSION}/cgo
          ${LLGO_CGO_SOURCES}
  DEPENDS llgo libgo ${LLGO_CGO_SOURCES}
  COMMENT "Building Go executable cgo"
  VERBATIM)
add_custom_target(cgo ALL DEPENDS ${CMAKE_BINARY_DIR}/lib/go/llgo-${LLGO_VERSION}/cgo)

llvm_add_go_executable(llgo-stage2 llvm.org/llgo/cmd/gllgo
  DEPENDS libgo ${CMAKE_BINARY_DIR}/bin/llgo${CMAKE_EXECUTABLE_SUFFIX}
          ${CMAKE_BINARY_DIR}/lib/go/llgo-${LLGO_VERSION}/cgo
          ${CMAKE_BINARY_DIR}/bin/llgo-go${CMAKE_EXECUTABLE_SUFFIX}
  GOFLAGS "cc=${CMAKE_BINARY_DIR}/bin/clang"
          "cxx=${CMAKE_BINARY_DIR}/bin/clang++"
          "go=${CMAKE_BINARY_DIR}/bin/llgo-go"
)

llvm_add_go_executable(llgo-stage3 llvm.org/llgo/cmd/gllgo
  DEPENDS libgo ${CMAKE_BINARY_DIR}/bin/llgo-stage2${CMAKE_EXECUTABLE_SUFFIX}
  GOFLAGS "cc=${CMAKE_BINARY_DIR}/bin/clang"
          "cxx=${CMAKE_BINARY_DIR}/bin/clang++"
          "go=${CMAKE_BINARY_DIR}/bin/llgo-go"
          "llgo=${CMAKE_BINARY_DIR}/bin/llgo-stage2${CMAKE_EXECUTABLE_SUFFIX}"
)

llvm_add_go_executable(cc-wrapper llvm.org/llgo/cmd/cc-wrapper DEPENDS
  cmd/cc-wrapper/main.go
)

llvm_add_go_executable(llgoi llvm.org/llgo/cmd/llgoi ALL
  DEPENDS libgo ${CMAKE_BINARY_DIR}/bin/llgo${CMAKE_EXECUTABLE_SUFFIX}
          ${CMAKE_BINARY_DIR}/lib/go/llgo-${LLGO_VERSION}/cgo
          ${CMAKE_BINARY_DIR}/bin/llgo-go${CMAKE_EXECUTABLE_SUFFIX}
          cmd/llgoi/llgoi.go
  GOFLAGS "cc=${CMAKE_BINARY_DIR}/bin/clang"
          "cxx=${CMAKE_BINARY_DIR}/bin/clang++"
          "go=${CMAKE_BINARY_DIR}/bin/llgo-go"
)

install(FILES ${CMAKE_BINARY_DIR}/bin/llgo${CMAKE_EXECUTABLE_SUFFIX}
              ${CMAKE_BINARY_DIR}/bin/llgoi${CMAKE_EXECUTABLE_SUFFIX}
              ${CMAKE_BINARY_DIR}/bin/llgo-go${CMAKE_EXECUTABLE_SUFFIX}
        DESTINATION bin
        PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
                    GROUP_READ GROUP_EXECUTE
                    WORLD_READ WORLD_EXECUTE)

function(add_clobber_steps name)
  ExternalProject_Add_Step(${name} force-reconfigure
    DEPENDERS configure
    ALWAYS 1
    )

  ExternalProject_Add_Step(${name} clobber
    COMMAND ${CMAKE_COMMAND} -E remove_directory <BINARY_DIR>
    COMMAND ${CMAKE_COMMAND} -E make_directory <BINARY_DIR>
    COMMENT "Clobbering ${name} build directory..."
    DEPENDERS configure
    DEPENDS ${ARGN}
    )
endfunction()

processorcount(PROCESSOR_COUNT)

function(add_libgo_variant suffix cflags gocflags deps exclude_from_all)
  externalproject_add(libbacktrace${suffix}
    DEPENDS clang ${deps}
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libbacktrace
    BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${suffix}/libbacktrace
    CONFIGURE_COMMAND <SOURCE_DIR>/configure --disable-multilib --enable-host-shared "CC=${CMAKE_BINARY_DIR}/bin/clang ${cflags}"
    BUILD_COMMAND make -j${PROCESSOR_COUNT}
    INSTALL_COMMAND ""
    LOG_CONFIGURE 1
    LOG_BUILD 1
  )
  set_property(TARGET libbacktrace${suffix}
               PROPERTY EXCLUDE_FROM_ALL ${exclude_from_all})

  add_clobber_steps(libbacktrace${suffix} clang ${deps})

  externalproject_add(libffi${suffix}
    DEPENDS clang ${deps}
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libffi
    BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${suffix}/libffi
    CONFIGURE_COMMAND <SOURCE_DIR>/configure --disable-multilib "CC=${CMAKE_BINARY_DIR}/bin/clang ${cflags}"
    BUILD_COMMAND make -j${PROCESSOR_COUNT}
    INSTALL_COMMAND ""
    LOG_CONFIGURE 1
    LOG_BUILD 1
  )
  set_property(TARGET libffi${suffix}
               PROPERTY EXCLUDE_FROM_ALL ${exclude_from_all})

  add_clobber_steps(libffi${suffix} clang ${deps})

  externalproject_add(libgo${suffix}
    DEPENDS clang llgo cc-wrapper libbacktrace${suffix} libffi${suffix} ${deps}
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/third_party/gofrontend/libgo
    BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${suffix}/libgo
    INSTALL_DIR ${CMAKE_BINARY_DIR}
    CONFIGURE_COMMAND <SOURCE_DIR>/configure --disable-multilib --without-libatomic --prefix=<INSTALL_DIR> "CC=env REAL_CC=${CMAKE_BINARY_DIR}/bin/clang@SPACE@${cflags} ${CMAKE_BINARY_DIR}/bin/cc-wrapper" "GOC=${CMAKE_BINARY_DIR}/bin/llgo -no-prefix -fcompilerrt-prefix=${CMAKE_BINARY_DIR} ${gocflags}"
    BUILD_COMMAND make -j${PROCESSOR_COUNT}
    LOG_CONFIGURE 1
    LOG_BUILD 1
    LOG_INSTALL 1
  )
  set_property(TARGET libgo${suffix}
               PROPERTY EXCLUDE_FROM_ALL ${exclude_from_all})

  add_clobber_steps(libgo${suffix} clang
    ${CMAKE_BINARY_DIR}/bin/llgo${CMAKE_EXECUTABLE_SUFFIX}
    ${CMAKE_BINARY_DIR}/bin/cc-wrapper${CMAKE_EXECUTABLE_SUFFIX})
endfunction()

add_libgo_variant("" "" "" "" FALSE)

if(TARGET asan)
  add_libgo_variant("_asan" "-fsanitize=address" "-fsanitize=address" asan TRUE)
endif()

if(TARGET tsan)
  add_libgo_variant("_tsan" "-fsanitize=thread" "-fsanitize=thread" tsan TRUE)
endif()

if(TARGET msan)
  add_libgo_variant("_msan" "-fsanitize=memory" "-fsanitize=memory" msan TRUE)
endif()

if(TARGET dfsan)
  add_libgo_variant("_dfsan" "-fsanitize=dataflow" "-fsanitize=dataflow" dfsan TRUE)
endif()

set(LLGO_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX})

install(FILES ${LLGO_LIBRARY_DIR}/libgo-llgo.a
              ${LLGO_LIBRARY_DIR}/libgo-llgo.so
              ${LLGO_LIBRARY_DIR}/libgo-llgo.so.7
              ${LLGO_LIBRARY_DIR}/libgo-llgo.so.7.0.0
              ${LLGO_LIBRARY_DIR}/libgobegin-llgo.a
        DESTINATION lib${LLVM_LIBDIR_SUFFIX})

install(DIRECTORY ${LLGO_LIBRARY_DIR}/go
        DESTINATION lib${LLVM_LIBDIR_SUFFIX})

add_custom_target(check-libgo
  COMMAND make -C ${CMAKE_CURRENT_BINARY_DIR}/libgo -j${PROCESSOR_COUNT} check
  DEPENDS libgo
  COMMENT "Running libgo tests")

add_custom_target(check-llgo-bootstrap
  COMMAND strip -R .note.gnu.build-id -o ${CMAKE_CURRENT_BINARY_DIR}/llgo-stage2.stripped
          ${CMAKE_BINARY_DIR}/bin/llgo-stage2${CMAKE_EXECUTABLE_SUFFIX}
  COMMAND strip -R .note.gnu.build-id -o ${CMAKE_CURRENT_BINARY_DIR}/llgo-stage3.stripped
          ${CMAKE_BINARY_DIR}/bin/llgo-stage3${CMAKE_EXECUTABLE_SUFFIX}
  COMMAND cmp ${CMAKE_CURRENT_BINARY_DIR}/llgo-stage2.stripped
          ${CMAKE_CURRENT_BINARY_DIR}/llgo-stage3.stripped
  DEPENDS llgo-stage2 llgo-stage3
  COMMENT "Checking llgo bootstrap")

add_subdirectory(test)
