new makefile
This commit is contained in:
@@ -1,147 +1,85 @@
|
||||
|
||||
ifeq ($(OS),Windows_NT)
|
||||
OSNAME = windows
|
||||
ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
|
||||
ARCH = AMD64
|
||||
else ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
|
||||
ARCH = AMD64
|
||||
else ifeq ($(PROCESSOR_ARCHITECTURE),x86)
|
||||
ARCH = IA32
|
||||
endif
|
||||
OSTAG = WIN
|
||||
EXT = .exe
|
||||
CMAKE_GENERATOR = "MinGW Makefiles"
|
||||
else
|
||||
UNAME_S := $(shell uname -s)
|
||||
ifeq ($(UNAME_S),Linux)
|
||||
OSNAME = linux
|
||||
OSTAG = LIN
|
||||
EXT =
|
||||
CMAKE_GENERATOR = "Unix Makefiles"
|
||||
else ifeq ($(UNAME_S),Darwin)
|
||||
$(error OSX isn't supported)
|
||||
OSNAME = osx
|
||||
endif
|
||||
|
||||
UNAME_P := $(shell uname -p)
|
||||
ifeq ($(UNAME_P),x86_64)
|
||||
ARCH = AMD64
|
||||
endif
|
||||
ifneq ($(filter %86,$(UNAME_P)),)
|
||||
ARCH = IA32
|
||||
endif
|
||||
ifneq ($(filter arm%,$(UNAME_P)),)
|
||||
ARCH = ARM
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(OSNAME),windows)
|
||||
CC = gcc.exe
|
||||
CXX = g++.exe
|
||||
CFLAGS_PLATFORM =
|
||||
LFLAGS_PLATFORM = -lws2_32
|
||||
CMAKE_GENERATOR = "MinGW Makefiles"
|
||||
else ifeq ($(OSNAME),linux)
|
||||
CC = gcc
|
||||
CXX = g++
|
||||
CFLAGS_PLATFORM = -pthread
|
||||
LFLAGS_PLATFORM =
|
||||
CMAKE_GENERATOR = "Unix Makefiles"
|
||||
else
|
||||
endif
|
||||
AR = ar$(EXT)
|
||||
CC = gcc$(EXT)
|
||||
CXX = g++$(EXT)
|
||||
|
||||
# One of: drmemory, valgrind
|
||||
MEMDBG=valgrind
|
||||
SRCDIR = src
|
||||
OBJDIR = obj
|
||||
OUTDIR = out
|
||||
|
||||
LIBDIR = 3p/lib
|
||||
INCDIR = 3p/include
|
||||
CFILES = $(wildcard $(SRCDIR)/*.c)
|
||||
HFILES = $(wildcard $(SRCDIR)/*.h)
|
||||
OFILES = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(CFILES))
|
||||
|
||||
CFLAGS = $(CUSTOM_CFLAGS) $(CFLAGS_PLATFORM) -I$(INCDIR) -Ibuild/ -Wall -Wextra
|
||||
LFLAGS = $(CUSTOM_LFLAGS) -ltuntap $(LFLAGS_PLATFORM) -L$(LIBDIR)
|
||||
CFLAGS_WIN =
|
||||
CFLAGS_LIN = -pthread
|
||||
CFLAGS = -Wall -Wextra -g $(CFLAGS_$(OSTAG)) -DMICROTCP_DEBUG -DTCP_DEBUG
|
||||
|
||||
ifeq ($(MEMDBG),drmemory)
|
||||
CFLAGS += -gdwarf-2
|
||||
else
|
||||
CFLAGS += -g3
|
||||
endif
|
||||
LIBFILE = $(OUTDIR)/libmicrotcp.a
|
||||
|
||||
.PHONY: all clean
|
||||
TAP_AFILES = $(OUTDIR)/libtuntap.a
|
||||
TAP_HFILES = $(OUTDIR)/tuntap.h $(OUTDIR)/tuntap-export.h
|
||||
|
||||
all: build/microtcp.h build/microtcp.c build/echo_tcp build/echo_http build/test
|
||||
EXAMPLE_0 = $(OUTDIR)/http$(EXT)
|
||||
EXAMPLE_1 = $(OUTDIR)/echo$(EXT)
|
||||
|
||||
3p/lib/libtuntap.a: 3p/libtuntap/build/lib/libtuntap.a
|
||||
cp 3p/libtuntap/build/lib/libtuntap.a $(LIBDIR)
|
||||
EXAMPLE_CFILES_0 = $(wildcard examples/http/*.c)
|
||||
EXAMPLE_HFILES_0 = $(wildcard examples/http/*.h)
|
||||
|
||||
3p/include/tuntap.h: 3p/libtuntap/tuntap.h
|
||||
cp 3p/libtuntap/tuntap.h $(INCDIR)
|
||||
EXAMPLE_CFILES_1 = examples/echo.c
|
||||
EXAMPLE_HFILES_1 =
|
||||
|
||||
3p/include/tuntap-export.h: 3p/libtuntap/build/tuntap-export.h
|
||||
cp 3p/libtuntap/build/tuntap-export.h $(INCDIR)
|
||||
EXAMPLE_LFLAGS_WIN = -lws2_32
|
||||
EXAMPLE_LFLAGS_LIN =
|
||||
EXAMPLE_LFLAGS = -lmicrotcp -ltuntap $(EXAMPLE_LFLAGS_$(OSTAG))
|
||||
|
||||
3p/libtuntap/build/lib/libtuntap.a 3p/libtuntap/tuntap.h 3p/libtuntap/build/tuntap-export.h:
|
||||
cd 3p/libtuntap/ \
|
||||
&& mkdir -p build \
|
||||
&& cd build \
|
||||
&& cmake .. -G $(CMAKE_GENERATOR) \
|
||||
-DBUILD_TESTING=OFF \
|
||||
-DCMAKE_C_COMPILER=$(CC) \
|
||||
-DCMAKE_CXX_COMPILER=$(CXX) \
|
||||
-DCMAKE_BUILD_TYPE=Debug \
|
||||
&& make
|
||||
.PHONY: all exm lib clean
|
||||
|
||||
3p/include/tinycthread.h: 3p/tinycthread/source/tinycthread.h
|
||||
cp 3p/tinycthread/source/tinycthread.h 3p/include
|
||||
all: lib exm
|
||||
|
||||
3p/src/tinycthread.c: 3p/tinycthread/source/tinycthread.c
|
||||
cp 3p/tinycthread/source/tinycthread.c 3p/src
|
||||
exm: $(EXAMPLE_0) $(EXAMPLE_1)
|
||||
|
||||
build/echo_tcp: examples/echo_tcp.c $(LIBDIR)/libtuntap.a 3p/include/tuntap.h 3p/include/tuntap-export.h build/microtcp.c build/microtcp.h
|
||||
mkdir -p $(@D)
|
||||
gcc build/microtcp.c examples/echo_tcp.c -o $@ $(CFLAGS) $(LFLAGS) -DDEBUG=1 -DARP_DEBUG -DMICROTCP_DEBUG -DIP_DEBUG -DICMP_DEBUG -DTCP_DEBUG -DMICROTCP_BACKGROUND_THREAD -DMICROTCP_USING_TAP -DMICROTCP_USING_MUX
|
||||
lib: $(LIBFILE) $(TAP_HFILES) $(TAP_AFILES)
|
||||
cp $(SRCDIR)/microtcp.h $(OUTDIR)/microtcp.h
|
||||
|
||||
build/microtcp.h: src/microtcp.h
|
||||
mkdir -p $(@D)
|
||||
[ ! -e $@ ] || rm $@
|
||||
echo "#define MICROTCP_AMALGAMATION" >> $@
|
||||
cat src/microtcp.h >> $@
|
||||
$(OBJDIR)/%.o: $(SRCDIR)/%.c $(HFILES) $(TAP_HFILES)
|
||||
$(CC) -c -o $@ $< $(CFLAGS) -I$(OUTDIR)
|
||||
|
||||
build/microtcp.c: 3p/include/tinycthread.h 3p/src/tinycthread.c $(wildcard src/*.c src/*.h)
|
||||
mkdir -p $(@D)
|
||||
[ ! -e $@ ] || rm $@
|
||||
printf "#include \"microtcp.h\"\n" > $@
|
||||
printf "#ifdef MICROTCP_BACKGROUND_THREAD" >> $@
|
||||
printf "\n#line 1 \"3p/include/tinycthread.h\"\n" >> $@
|
||||
cat 3p/include/tinycthread.h >> $@
|
||||
printf "\n#line 1 \"3p/src/tinycthread.c\"\n" >> $@
|
||||
cat 3p/src/tinycthread.c >> $@
|
||||
printf "\n#endif /* MICROTCP_BACKGROUND_THREAD */" >> $@
|
||||
printf "\n#line 1 \"src/defs.h\"\n" >> $@
|
||||
cat src/defs.h >> $@
|
||||
printf "\n#line 1 \"src/utils.h\"\n" >> $@
|
||||
cat src/utils.h >> $@
|
||||
printf "\n#line 1 \"src/endian.h\"\n" >> $@
|
||||
cat src/endian.h >> $@
|
||||
printf "\n#line 1 \"src/arp.h\"\n" >> $@
|
||||
cat src/arp.h >> $@
|
||||
printf "\n#line 1 \"src/icmp.h\"\n" >> $@
|
||||
cat src/icmp.h >> $@
|
||||
printf "\n#line 1 \"src/ip.h\"\n" >> $@
|
||||
cat src/ip.h >> $@
|
||||
printf "\n#line 1 \"src/tcp_timer.h\"\n" >> $@
|
||||
cat src/tcp_timer.h >> $@
|
||||
printf "\n#line 1 \"src/tcp.h\"\n" >> $@
|
||||
cat src/tcp.h >> $@
|
||||
printf "\n#line 1 \"src/utils.c\"\n" >> $@
|
||||
cat src/utils.c >> $@
|
||||
printf "\n#line 1 \"src/endian.c\"\n" >> $@
|
||||
cat src/endian.c >> $@
|
||||
printf "\n#line 1 \"src/arp.c\"\n" >> $@
|
||||
cat src/arp.c >> $@
|
||||
printf "\n#line 1 \"src/icmp.c\"\n" >> $@
|
||||
cat src/icmp.c >> $@
|
||||
printf "\n#line 1 \"src/ip.c\"\n" >> $@
|
||||
cat src/ip.c >> $@
|
||||
printf "\n#line 1 \"src/tcp_timer.c\"\n" >> $@
|
||||
cat src/tcp_timer.c >> $@
|
||||
printf "\n#line 1 \"src/tcp.c\"\n" >> $@
|
||||
cat src/tcp.c >> $@
|
||||
printf "\n#line 1 \"src/microtcp.c\"\n" >> $@
|
||||
cat src/microtcp.c >> $@
|
||||
$(LIBFILE): $(OFILES)
|
||||
$(AR) rcs $@ $^
|
||||
|
||||
build/echo_http: examples/microhttp/main.c $(LIBDIR)/libtuntap.a 3p/include/tuntap.h 3p/include/tuntap-export.h build/microtcp.h build/microtcp.c
|
||||
gcc examples/microhttp/main.c examples/microhttp/xhttp.c build/microtcp.c -o $@ $(CFLAGS) $(LFLAGS) -DDEBUG=1 -DARP_DEBUG -DMICROTCP_DEBUG -DIP_DEBUG -DICMP_DEBUG -DTCP_DEBUG -DMICROTCP_USING_MUX
|
||||
$(TAP_AFILES) $(TAP_HFILES):
|
||||
cd 3p/libtuntap/ && \
|
||||
mkdir -p build && \
|
||||
cd build && \
|
||||
cmake .. -G $(CMAKE_GENERATOR) -DBUILD_TESTING=OFF -DCMAKE_C_COMPILER=$(CC) -DCMAKE_CXX_COMPILER=$(CXX) -DCMAKE_BUILD_TYPE=Debug && \
|
||||
make
|
||||
cp 3p/libtuntap/build/lib/libtuntap.a $(OUTDIR)/libtuntap.a
|
||||
cp 3p/libtuntap/tuntap.h $(OUTDIR)/tuntap.h
|
||||
cp 3p/libtuntap/build/tuntap-export.h $(OUTDIR)/tuntap-export.h
|
||||
|
||||
$(EXAMPLE_0): lib $(EXAMPLE_CFILES_0) $(EXAMPLE_HFILES_0)
|
||||
$(CC) -o $@ $(EXAMPLE_CFILES_0) $(CFLAGS) $(EXAMPLE_LFLAGS) -I$(OUTDIR) -L$(OUTDIR)
|
||||
|
||||
$(EXAMPLE_1): lib $(EXAMPLE_CFILES_1) $(EXAMPLE_HFILES_1)
|
||||
$(CC) -o $@ $(EXAMPLE_CFILES_1) $(CFLAGS) $(EXAMPLE_LFLAGS) -I$(OUTDIR) -L$(OUTDIR)
|
||||
|
||||
clean:
|
||||
rm -fr build 3p/libtuntap/build 3p/lib/* 3p/include/*
|
||||
rm -fr $(OBJDIR) $(OUTDIR)
|
||||
mkdir obj out
|
||||
|
||||
Reference in New Issue
Block a user