1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
|
#? stdtmpl(subsChar='?') | standard
#proc generateMakefile(c: ConfigData): string =
# result = "# Generated from niminst\n" &
# "# Template is in tools/niminst/makefile.nimf\n" &
# "# To regenerate run ``niminst csource`` or ``koch csource``\n"
CC ??= gcc
CFLAGS += -Ic_code ?{c.ccompiler.flags}
LDFLAGS += ?{c.linker.flags}
binDir = ?{firstBinPath(c).toUnix}
koch := $(shell sh -c 'test -s ../koch.nim && echo "yes"')
ifeq ($(koch),yes)
binDir = ../bin
endif
target := ?{"$(binDir)/" & toLowerAscii(c.name)}
ucpu := $(shell sh -c 'uname -m | tr "[:upper:]" "[:lower:]"')
ifeq ($(OS),Windows_NT)
uos := windows
else
uos := $(shell sh -c 'uname | tr "[:upper:]" "[:lower:]"')
endif
ifeq ($(uos),linux)
myos = linux
## add -lrt to avoid "undefined reference to `clock_gettime'" with glibc<2.17
LDFLAGS += -ldl -lm -lrt
endif
ifeq ($(uos),dragonfly)
myos = freebsd
LDFLAGS += -lm
endif
ifeq ($(uos),freebsd)
myos= freebsd
CC = clang
LDFLAGS += -lm
endif
ifeq ($(uos),openbsd)
myos = openbsd
LDFLAGS += -lm
endif
ifeq ($(uos),netbsd)
myos = netbsd
LDFLAGS += -lm
endif
ifeq ($(uos),darwin)
myos = macosx
CC = clang
LDFLAGS += -ldl -lm
ifeq ($(HOSTTYPE),x86_64)
ucpu = amd64
endif
endif
ifeq ($(uos),aix)
myos = aix
LDFLAGS += -dl -lm
endif
ifeq ($(uos),solaris)
myos = solaris
LDFLAGS += -ldl -lm -lsocket -lnsl
endif
ifeq ($(uos),sun)
myos = solaris
LDFLAGS += -ldl -lm -lsocket -lnsl
endif
ifeq ($(uos),haiku)
myos = haiku
endif
ifeq ($(uos),windows)
myos = windows
target := $(target).exe
endif
ifndef myos
$(error unknown operating system: $(uos))
endif
ifeq ($(ucpu),i386)
mycpu = i386
endif
ifeq ($(ucpu),i486)
mycpu = i386
endif
ifeq ($(ucpu),i586)
mycpu = i386
endif
ifeq ($(ucpu),i686)
mycpu = i386
endif
ifeq ($(ucpu),bepc)
mycpu = i386
endif
ifeq ($(ucpu),i86pc)
mycpu = i386
endif
ifeq ($(ucpu),amd64)
mycpu = amd64
endif
ifeq ($(ucpu),x86-64)
mycpu = amd64
endif
ifeq ($(ucpu),x86_64)
mycpu = amd64
endif
ifeq ($(ucpu),sparc)
mycpu = sparc
endif
ifeq ($(ucpu),sun)
mycpu = sparc
endif
ifeq ($(ucpu),ppc64le)
mycpu = powerpc64el
endif
ifeq ($(ucpu),ppc64)
mycpu = powerpc64
ifeq ($(myos),linux)
CFLAGS += -m64
LDFLAGS += -m64
endif
endif
ifeq ($(ucpu),powerpc)
mycpu = powerpc
ifeq ($(myos),freebsd)
mycpu = $(shell sh -c 'uname -p | tr "[:upper:]" "[:lower:]"')
CFLAGS += -m64
LDFLAGS += -m64
ifeq ($(mycpu),powerpc64le)
mycpu = powerpc64el
endif
endif
endif
ifeq ($(ucpu),ppc)
mycpu = ppc
endif
ifneq (,$(filter $(ucpu), mips mips64))
mycpu = $(shell /bin/sh -c '"$(CC)" -dumpmachine | sed "s/-.*//"')
ifeq (,$(filter $(mycpu), mips mipsel mips64 mips64el))
$(error unknown MIPS target: $(mycpu))
endif
endif
ifeq ($(ucpu),arm)
mycpu = arm
endif
ifeq ($(ucpu),armeb)
mycpu = arm
endif
ifeq ($(ucpu),armel)
mycpu = arm
endif
ifeq ($(ucpu),armv6l)
mycpu = arm
endif
ifeq ($(ucpu),armv7l)
mycpu = arm
endif
ifeq ($(ucpu),armv7hl)
mycpu = arm
endif
ifeq ($(ucpu),armv8l)
mycpu = arm
endif
ifeq ($(ucpu),aarch64)
mycpu = arm64
endif
ifeq ($(ucpu),riscv64)
mycpu = riscv64
endif
ifndef mycpu
$(error unknown CPU architecture: $(ucpu) See makefile.nimf)
endif
# for osA in 1..c.oses.len:
ifeq ($(myos),?{c.oses[osA-1]})
# for cpuA in 1..c.cpus.len:
ifeq ($(mycpu),?{c.cpus[cpuA-1]})
# var oFiles = ""
# for ff in c.cfiles[osA][cpuA].items:
# oFiles.add(" " & changeFileExt(ff.toUnix, "o"))
# end for
oFiles =?oFiles
endif
# end for
endif
# end for
.check-arch
ifeq ($(strip $(oFiles)),)
$(error no C code generated for: [$(myos): $(mycpu)])
endif
$(target): .check-arch $(oFiles)
@mkdir -p $(binDir)
$(CC) -o $@ $(oFiles) $(LDFLAGS)
@echo "SUCCESS"
.PHONY: clean .check-arch
clean:
rm -f $(oFiles) ?{"$(binDir)/" & toLowerAscii(c.name)}
|