This repository has been archived by the owner on Nov 14, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
98 lines (75 loc) · 3.93 KB
/
Makefile
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
# Makefile for SVM-struct API, 03.07.04
export
CC = gcc
LD = gcc
#CC = attolcc -mempro -perfpro -block -proc -- gcc
#LD = attolcc -mempro -perfpro -block -proc -- gcc
CFLAGS = -O3 -fomit-frame-pointer -ffast-math -Wall
LDFLAGS = -O3 -lm -Wall
CFLAGS = -g -Wall
LDFLAGS = -g -lm
#CFLAGS = -pg -Wall
#LDFLAGS = -pg -lm -Wall
OPTIMIZER := hideo
TARGETNAME := python
TRAIN_TARGET := svm_$(TARGETNAME)_learn
CLASS_TARGET := svm_$(TARGETNAME)_classify
DEFAULT_MODULE := multiclass
DEFAULT_MODULE := svmstruct
PY_OBJS := $(patsubst %.c,%.o,$(wildcard pyobjs/*.c))
all: $(addsuffix $(OPTIMIZER),$(TRAIN_TARGET)_) $(CLASS_TARGET)
.PHONY: clean
clean: svm_light_clean svm_struct_clean
rm -f *.o *.tcov *.d core gmon.out *.stackdump
rm -f $(PY_OBJS)
rm -rf $(TRAIN_TARGET) $(CLASS_TARGET)
#-----------------------#
#---- Python dec ----#
#-----------------------#
PYTHON := python
# Happily, thanks to the built-in distutils module, the Python
# interpreter is able to return many variables relating to its
# installation including where to look for the library, the library
# name, include files, and the special compiler directives that allow
# for dynamic loading of modules in programs that embed Python!
define PYTHON_COMMAND
-c "from distutils import sysconfig; print sysconfig.get_config_var('R')"
endef
PYTHON_LIB_DIR := $(shell $(PYTHON) $(subst R,LIBPL,$(PYTHON_COMMAND)))
PYTHON_LIB := $(basename $(patsubst lib%,%,$(shell $(PYTHON) $(subst R,LIBRARY,$(PYTHON_COMMAND)))))
PYTHON_INCLUDE := $(shell $(PYTHON) $(subst R,INCLUDEPY,$(PYTHON_COMMAND)))
PYTHON_SHARED := $(shell $(PYTHON) $(subst R,LINKFORSHARED,$(PYTHON_COMMAND)))
# Make it work on OS X with the Apple supplied python.
PYTHON_SHARED := $(PYTHON_SHARED:Python.framework/Versions/%/Python=-framework Python)
PYTHON_OTHER_LIBS := $(shell $(PYTHON) $(subst R,LIBS,$(PYTHON_COMMAND)))
PYTHON_LD_FLAGS := $(PYTHON_SHARED) -L$(PYTHON_LIB_DIR) -l$(PYTHON_LIB) $(PYTHON_OTHER_LIBS)
PYTHON_CC_FLAGS := -I$(PYTHON_INCLUDE)
#-----------------------#
#---- SVM-light ----#
#-----------------------#
svm_light_hideo_noexe:
cd svm_light; make svm_learn_hideo_noexe
svm_light_loqo_noexe:
cd svm_light; make svm_learn_loqo_noexe
svm_light_clean:
cd svm_light; make clean
#----------------------#
#---- STRUCT SVM ----#
#----------------------#
svm_struct_noexe:
cd svm_struct; make svm_struct_noexe
svm_struct_clean:
cd svm_struct; make clean
#-------------------------#
#---- SVM empty API ----#
#-------------------------#
$(CLASS_TARGET): svm_light_hideo_noexe svm_struct_noexe svm_struct_api.o svm_struct/svm_struct_classify.o svm_struct/svm_struct_common.o svm_struct/svm_struct_main.o $(PY_OBJS)
$(LD) $(LDFLAGS) svm_struct_api.o svm_struct/svm_struct_classify.o svm_light/svm_common.o svm_struct/svm_struct_common.o $(PY_OBJS) $(PYTHON_LD_FLAGS) $(LIBS) -o $@
$(TRAIN_TARGET)_loqo: svm_light_loqo_noexe svm_struct_noexe svm_struct_api.o svm_struct/svm_struct_learn.o svm_struct/svm_struct_common.o svm_struct/svm_struct_main.o $(PY_OBJS)
$(LD) $(LDFLAGS) svm_struct/svm_struct_learn.o svm_struct_api.o svm_light/svm_loqo.o svm_light/pr_loqo/pr_loqo.o svm_light/svm_learn.o svm_light/svm_common.o svm_struct/svm_struct_common.o svm_struct/svm_struct_main.o $(PY_OBJS) $(PYTHON_LD_FLAGS) $(LIBS) -o $(TRAIN_TARGET)
$(TRAIN_TARGET)_hideo: $(TRAIN_TARGET)_% : svm_light_%_noexe svm_struct_noexe svm_struct_api.o svm_struct/svm_struct_learn.o svm_struct/svm_struct_common.o svm_struct/svm_struct_main.o $(PY_OBJS)
$(LD) $(LDFLAGS) svm_struct/svm_struct_learn.o svm_struct_api.o svm_light/svm_$*.o svm_light/svm_learn.o svm_light/svm_common.o svm_struct/svm_struct_common.o svm_struct/svm_struct_main.o $(PY_OBJS) $(PYTHON_LD_FLAGS) $(LIBS) -o $(TRAIN_TARGET)
$(PY_OBJS): %.o : %.c %.h
$(CC) -c $(CFLAGS) $(PYTHON_CC_FLAGS) $< -o $@
svm_struct_api.o: svm_struct_api.c svm_struct_api.h svm_struct_api_types.h svm_struct/svm_struct_common.h
$(CC) -c $(CFLAGS) $(PYTHON_CC_FLAGS) -DDEFAULT_MODULE=$(DEFAULT_MODULE) $< -o $@