aboutsummaryrefslogtreecommitdiffstats
path: root/techlibs/common/Makefile.inc
blob: 0e05620bc6e9250d674f3a3ab462523d8b25f056 (plain)
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
ifneq ($(SMALL),1)
OBJS += techlibs/common/synth.o
OBJS += techlibs/common/prep.o
endif

GENFILES += techlibs/common/simlib_help.inc
GENFILES += techlibs/common/simcells_help.inc

techlibs/common/simlib_help.inc: techlibs/common/cellhelp.py techlibs/common/simlib.v
	$(Q) mkdir -p techlibs/common
	$(P) python3 $^ > $@.new
	$(Q) mv $@.new $@

techlibs/common/simcells_help.inc: techlibs/common/cellhelp.py techlibs/common/simcells.v
	$(Q) mkdir -p techlibs/common
	$(P) python3 $^ > $@.new
	$(Q) mv $@.new $@

kernel/register.o: techlibs/common/simlib_help.inc techlibs/common/simcells_help.inc

$(eval $(call add_share_file,share,techlibs/common/simlib.v))
$(eval $(call add_share_file,share,techlibs/common/simcells.v))
$(eval $(call add_share_file,share,techlibs/common/techmap.v))
$(eval $(call add_share_file,share,techlibs/common/pmux2mux.v))
$(eval $(call add_share_file,share,techlibs/common/adff2dff.v))
$(eval $(call add_share_file,share,techlibs/common/dff2ff.v))
$(eval $(call add_share_file,share,techlibs/common/gate2lut.v))
$(eval $(call add_share_file,share,techlibs/common/cmp2lut.v))
$(eval $(call add_share_file,share,techlibs/common/cells.lib))
n>) >> 2; } uint16_t jboot_checksum(uint16_t start_val, uint16_t *data, int size) { uint32_t counter = start_val; uint16_t *ptr = data; while (size > 1) { counter += *ptr; ++ptr; while (counter >> 16) counter = (uint16_t) counter + (counter >> 16); size -= 2; } if (size > 0) { counter += *(uint8_t *) ptr; counter -= 0xFF; } while (counter >> 16) counter = (uint16_t) counter + (counter >> 16); return counter; } int get_file_stat(struct file_info *fdata) { struct stat st; int res; if (fdata->file_name == NULL) return 0; res = stat(fdata->file_name, &st); if (res) { ERRS("stat failed on %s", fdata->file_name); return res; } fdata->file_size = st.st_size; return 0; } int read_to_buf(const struct file_info *fdata, char *buf) { FILE *f; int ret = EXIT_FAILURE; f = fopen(fdata->file_name, "r"); if (f == NULL) { ERRS("could not open \"%s\" for reading", fdata->file_name); goto out; } errno = 0; fread(buf, fdata->file_size, 1, f); if (errno != 0) { ERRS("unable to read from file \"%s\"", fdata->file_name); goto out_close; } ret = EXIT_SUCCESS; out_close: fclose(f); out: return ret; } int pad_jffs2(char *buf, int currlen, int maxlen) { int len; uint32_t pad_mask; len = currlen; pad_mask = (4 * 1024) | (64 * 1024); /* EOF at 4KB and at 64KB */ while ((len < maxlen) && (pad_mask != 0)) { uint32_t mask; int i; for (i = 10; i < 32; i++) { mask = 1 << i; if (pad_mask & mask) break; } len = ALIGN(len, mask); for (i = 10; i < 32; i++) { mask = 1 << i; if ((len & (mask - 1)) == 0) pad_mask &= ~mask; } for (i = 0; i < sizeof(jffs2_eof_mark); i++) buf[len + i] = jffs2_eof_mark[i]; len += sizeof(jffs2_eof_mark); } return len; } int write_fw(const char *ofname, const char *data, int len) { FILE *f; int ret = EXIT_FAILURE; f = fopen(ofname, "w"); if (f == NULL) { ERRS("could not open \"%s\" for writing", ofname); goto out; } errno = 0; fwrite(data, len, 1, f); if (errno) { ERRS("unable to write output file"); goto out_flush; } DBG("firmware file \"%s\" completed", ofname); ret = EXIT_SUCCESS; out_flush: fflush(f); fclose(f); if (ret != EXIT_SUCCESS) unlink(ofname); out: return ret; }