Skip to content

Commit 3c52979

Browse files
committed
Merge pull request #1 from intersystems-ru/adding-libffi-sources
Adding libffi sources
2 parents be48974 + 0e81bf5 commit 3c52979

File tree

323 files changed

+139927
-658
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

323 files changed

+139927
-658
lines changed

Makefile

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,50 @@
1-
CC = gcc
2-
RM = rm
1+
CC := gcc
2+
RM := rm
3+
CD := cd
4+
MAKE := make
35

4-
CFLAGS = -Wall -Wextra -fpic -O2 -fno-strict-aliasing -Wno-unused-parameter
6+
CFLAGS += -Wall -Wextra -fpic -O2 -fno-strict-aliasing -Wno-unused-parameter
57

68
SYS := $(shell gcc -dumpmachine)
7-
ifneq (, $(findstring linux, $(SYS)))
8-
9-
SUFFIX = so
10-
LDFLAGS = -shared
11-
LIBS = -ldl -lffi
12-
CFLAGS += -I/usr/local/lib/libffi-3.1/include/
13-
ifndef GLOBALS_HOME
14-
$(error Couldn't find GLOBALS_HOME)
15-
endif
9+
LIBFFI_PATH := ./libs/libffi
1610

17-
else ifneq (, $(findstring mingw, $(SYS)))
18-
ifneq (, $(findstring x86_64, $(SYS)))
19-
PLATFORM = x86-64
20-
else
21-
PLATFORM = x86-32
22-
endif
23-
SUFFIX = dll
24-
LDFLAGS = -mdll
25-
LIBS = -L./libs/$(PLATFORM)/ -lffi
26-
CFLAGS += -I./libs/$(PLATFORM)/include/
27-
ifndef GLOBALS_HOME
28-
GLOBALS_HOME = C:/InterSystems/Cache
29-
endif
11+
ifeq ($(SYS), x86_64-w64-mingw32)
12+
BUILDSYS := $(SYS)
13+
else
14+
BUILDSYS := $(shell bash $(LIBFFI_PATH)/config.guess)
15+
endif
3016

17+
LIBFFI_PATH := $(LIBFFI_PATH)/$(BUILDSYS)
18+
INCLUDES :=-I$(LIBFFI_PATH)/include
19+
LIBS := -L$(LIBFFI_PATH)/.libs -lffi
20+
21+
ifneq (, $(findstring linux, $(SYS)))
22+
SUFFIX := so
23+
LDFLAGS := -shared
24+
LIBS += -ldl
25+
else ifneq (, $(findstring mingw, $(SYS)))
26+
SUFFIX := dll
27+
LDFLAGS := -mdll
3128
else
3229
$(error Unsupported build platform)
3330
endif
3431

35-
CFLAGS += -I${GLOBALS_HOME}/dev/cpp/include
3632

37-
TESTSDIR = tests
33+
ifndef GLOBALS_HOME
34+
$(error Couldn't find GLOBALS_HOME)
35+
endif
36+
37+
38+
INCLUDES += -I${GLOBALS_HOME}/dev/cpp/include
39+
CFLAGS += $(INCLUDES)
40+
TESTSDIR := tests
3841

42+
.PHONY: all clean libffi libffi-clean
3943

40-
all: libcna.$(SUFFIX) $(TESTSDIR)/libtest.$(SUFFIX)
44+
all: libcna.$(SUFFIX) $(TESTSDIR)/libtest.$(SUFFIX)
45+
46+
libffi:
47+
cd libs/libffi && ./configure --build=$(BUILDSYS) --enable-shared=no && $(MAKE)
4148

4249
cna.o: cna.c storage.h
4350

@@ -51,5 +58,8 @@ $(TESTSDIR)/teslib.o: $(TESTSDIR)/testlib.c
5158
$(TESTSDIR)/libtest.$(SUFFIX): $(TESTSDIR)/testlib.o
5259
$(CC) $(LDFLAGS) -o $@ $^
5360

61+
libffi-clean:
62+
$(CD) libs/libffi && $(MAKE) clean
63+
5464
clean:
5565
$(RM) *.$(SUFFIX) *.o $(TESTSDIR)/*.$(SUFFIX) $(TESTSDIR)/*.o

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ CNA — связка класса Caché и библиотеки на C, поз
88

99
###Linux###
1010

11-
- Устанавливаем пакет libffi-dev из репозиториев или собираем libffi из [исходников](https://github.com/atgreen/libffi).
12-
- Делаем `make`. Если ругается на отстуствие переменной `GLOBALS_HOME` — прописываем
11+
- Собираем libffi: `make libffi`. Если ругается на отстуствие переменной `GLOBALS_HOME` — прописываем
1312

1413
```sh
1514
export GLOBALS_HOME='путь к корневой папке Caché'
1615
```
16+
17+
- Собираем libcna: `make`
1718
- Готово! Нужный нам файл — libcna.so. Осталось только импортировать класс cna.xml в любую удобную область Caché:
1819

1920
```lisp
@@ -22,7 +23,7 @@ CNA — связка класса Caché и библиотеки на C, поз
2223

2324
###Windows###
2425

25-
Для Windows-систем можно повторить указанные выше действия (для компиляции и сборки использовать [mingw32](http://www.mingw.org/) или [mingw32-w64](http://mingw-w64.sourceforge.net/)). libffi устанавливать не надо, она скачивается вместе с репозиторием. Или можно загрузить уже готовые [бинарные версии](https://github.com/intersystems-ru/cna/releases) CNA. **Внимание: разрядности libcna, инсталяции Caché и внешних библиотек доллжны совпадать.** Импорт cna.xml делаем аналогично или через студию.
26+
Для Windows-систем можно повторить указанные выше действия (для компиляции и сборки использовать [mingw32](http://www.mingw.org/) или [mingw32-w64](http://mingw-w64.sourceforge.net/)). Или можно загрузить уже готовые [бинарные версии](https://github.com/intersystems-ru/cna/releases) CNA. **Внимание: разрядности libcna, инсталяции Caché и внешних библиотек доллжны совпадать.** Импорт cna.xml делаем аналогично или через студию.
2627

2728
##Запуск тестов##
2829

libs/libffi/.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Makefile
2+
config.log
3+
confdefs.h
4+
*~
5+
x86_64-w64-mingw32

0 commit comments

Comments
 (0)