runmain.go raw

   1  // SPDX-License-Identifier: Unlicense OR MIT
   2  
   3  // +build android darwin,ios
   4  
   5  package wm
   6  
   7  // Android only supports non-Java programs as c-shared libraries.
   8  // Unfortunately, Go does not run a program's main function in
   9  // library mode. To make Gio programs simpler and uniform, we'll
  10  // link to the main function here and call it from Java.
  11  
  12  import (
  13  	"sync"
  14  	_ "unsafe" // for go:linkname
  15  )
  16  
  17  //go:linkname mainMain main.main
  18  func mainMain()
  19  
  20  var runMainOnce sync.Once
  21  
  22  func runMain() {
  23  	runMainOnce.Do(func() {
  24  		// Indirect call, since the linker does not know the address of main when
  25  		// laying down this package.
  26  		fn := mainMain
  27  		fn()
  28  	})
  29  }
  30