aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile179
1 files changed, 120 insertions, 59 deletions
diff --git a/Makefile b/Makefile
index 800ca92..d7848f7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,14 +1,50 @@
-all : lib data_recorder test calibrate calibrate_client simple_pose_test
+all : data_recorder test calibrate calibrate_client simple_pose_test
+ @echo "Built with defaults. Type 'make help' for more info."
+
+.PHONY : help clean buildfolders
+
+LIBRARY:=./lib/libsurvive.so
+OBJDIR:=build
+
+
+ifdef WINDOWS
+ CFLAGS+=-Iinclude/libsurvive -g -O3 -Iredist -DUSE_DOUBLE -std=gnu99 -MD -DNOZLIB -DWINDOWS -DWIN32 -DHIDAPI
+ LDFLAGS+=-L/usr/local/lib -lpthread -g -lm -lsetupapi -lkernel32 -ldbghelp -lgdi32
+ LDFLAGS_TOOLS+=-Llib -lsurvive -Wl,-rpath,lib -lX11 $(LDFLAGS)
+ LIBSURVIVE_CORE:=redist/puff.c redist/crc32.c redist/hid-windows.c winbuild/getdelim.c
+ CC:=i686-w64-mingw32-gcc
+else
+ CFLAGS+=-Iinclude/libsurvive -fPIC -g -O3 -Iredist -DUSE_DOUBLE -std=gnu99 -rdynamic -MD
+ LDFLAGS+=-L/usr/local/lib -lpthread -lz -lm -g -llapacke -lcblas -lm
+ LDFLAGS_TOOLS+=-Llib -lsurvive -Wl,-rpath,lib -lX11 $(LDFLAGS)
+endif
CC?=gcc
-CFLAGS:=-Iinclude/libsurvive -fPIC -g -O3 -Iredist -flto -DUSE_DOUBLE -std=gnu99 -rdynamic #-fsanitize=address -fsanitize=undefined -Wall -Wno-unused-variable -Wno-switch -Wno-unused-but-set-variable -Wno-pointer-sign -Wno-parentheses
-CFLAGS_RELEASE:=-Iinclude/libsurvive -fPIC -msse2 -ftree-vectorize -O3 -Iredist -flto -DUSE_DOUBLE -std=gnu99 -rdynamic -llapacke -lcblas -lm
+
+ifdef EXTRA_WARNINGS
+ CFLAGS+=-fsanitize=address -fsanitize=undefined -Wall -Wno-unused-variable -Wno-switch -Wno-unused-but-set-variable -Wno-pointer-sign -Wno-parentheses
+endif
+
-#LDFLAGS:=-L/usr/local/lib -lpthread -lusb-1.0 -lz -lm -flto -g
+SBA:=redist/sba/sba_chkjac.c redist/sba/sba_crsm.c redist/sba/sba_lapack.c redist/sba/sba_levmar.c redist/sba/sba_levmar_wrap.c redist/minimal_opencv.c src/poser_epnp.c src/poser_sba.c src/epnp/epnp.c
+LIBSURVIVE_CORE+=src/survive.c src/survive_process.c src/ootx_decoder.c src/survive_driverman.c src/survive_default_devices.c src/survive_playback.c src/survive_config.c src/survive_cal.c src/poser.c src/survive_sensor_activations.c src/survive_disambiguator.c src/survive_imu.c
+MINIMAL_NEEDED+=src/survive_usb.c src/survive_charlesbiguator.c src/survive_vive.c src/survive_reproject.c
+AUX_NEEDED+=src/survive_turveybiguator.c src/survive_statebased_disambiguator.c
+POSERS:=src/poser_dummy.c src/poser_imu.c src/poser_charlesrefine.c
+EXTRA_POSERS:=src/poser_daveortho.c src/poser_charlesslow.c src/poser_octavioradii.c src/poser_turveytori.c
+REDISTS:=redist/json_helpers.c redist/linmath.c redist/jsmn.c
+
+ifdef MINIMAL
+ LIBSURVIVE_C:=$(REDISTS) $(LIBSURVIVE_CORE) $(MINIMAL_NEEDED)
+else
+ LIBSURVIVE_C:=$(POSERS) $(REDISTS) $(LIBSURVIVE_CORE) $(SBA) $(MINIMAL_NEEDED) $(AUX_NEEDED)
+endif
-LDFLAGS:=-L/usr/local/lib -lpthread -lz -llapacke -lcblas -lm -flto -g
+LIBSURVIVE_O:=$(LIBSURVIVE_C:%.c=$(OBJDIR)/%.o)
+LIBSURVIVE_D:=$(LIBSURVIVE_C:%.c=$(OBJDIR)/%.d)
+-include $(LIBSURVIVE_D)
#----------
# Platform specific changes to CFLAGS/LDFLAGS
@@ -20,109 +56,134 @@ ifeq ($(UNAME), Darwin)
CFLAGS:=$(CFLAGS) -DRASTERIZER -DHIDAPI -I/usr/local/include -x objective-c
LDFLAGS:=$(LDFLAGS) -framework OpenGL -framework Cocoa -framework IOKit
-#DRAWFUNCTIONS=redist/CNFGFunctions.c redist/CocoaDriver.m
-#GRAPHICS_LOFI:=redist/CNFGFunctions.o redist/CocoaDriver.o
DRAWFUNCTIONS=redist/CNFGFunctions.c redist/CNFGCocoaNSImageDriver.m
GRAPHICS_LOFI:=redist/CNFGFunctions.o redist/CNFGCocoaNSImageDriver.o
# Linux / FreeBSD
else
-LDFLAGS:=$(LDFLAGS) -lX11 -lusb-1.0
+LDFLAGS:=$(LDFLAGS)
DRAWFUNCTIONS=redist/CNFGFunctions.c redist/CNFGXDriver.c redist/CNFG3D.c
GRAPHICS_LOFI:=redist/CNFGFunctions.o redist/CNFGXDriver.o
endif
-SBA:=redist/sba/sba_chkjac.o redist/sba/sba_crsm.o redist/sba/sba_lapack.o redist/sba/sba_levmar.o redist/sba/sba_levmar_wrap.o
-POSERS:=src/poser_dummy.o src/poser_daveortho.o src/poser_charlesslow.o src/poser_octavioradii.o src/poser_turveytori.o src/poser_epnp.o src/poser_sba.o
-REDISTS:=redist/json_helpers.o redist/linmath.o redist/jsmn.o redist/minimal_opencv.o
+
ifeq ($(UNAME), Darwin)
REDISTS:=$(REDISTS) redist/hid-osx.c
endif
-LIBSURVIVE_CORE:=src/survive.o src/survive_usb.o src/survive_charlesbiguator.o src/survive_process.o src/ootx_decoder.o src/survive_driverman.o src/survive_default_devices.o src/survive_vive.o src/survive_playback.o src/survive_config.o src/survive_cal.o src/survive_reproject.o src/poser.o src/epnp/epnp.o src/survive_sensor_activations.o src/survive_turveybiguator.o src/survive_disambiguator.o src/survive_statebased_disambiguator.o src/poser_charlesrefine.o src/survive_imu.o src/poser_imu.o src/poser_general_optimizer.o src/poser_mpfit.o redist/mpfit/mpfit.o src/survive_api.o
-
-#If you want to use HIDAPI on Linux.
-#CFLAGS:=$(CFLAGS) -DHIDAPI
-#REDISTS:=$(REDISTS) redist/hid-linux.o
-#LDFLAGS:=$(LDFLAGS) -ludev
-
-#Useful Preprocessor Directives:
-# -DUSE_DOUBLE = use double instead of float for most operations.
-# -DNOZLIB = use puff.c
-# -DTCC = various things needed for TCC.
-# -DWINDOWS -DWIN32 = Building for Windows
-# -DHIDAPI = Build vive driver to use USBHID instead of interrupt/control messages.
-# -DRUNTIME_SYMNUM = Don't assume __attribute__((constructor)) works. Instead comb for anything starting with REGISTER.
-
-
+ifdef LINUX_USE_HIDAPI
+ CFLAGS:=$(CFLAGS) -DHIDAPI
+ REDISTS:=$(REDISTS) redist/hid-linux.o
+ LDFLAGS:=$(LDFLAGS) -ludev
+endif
-LIBSURVIVE_CORE:=$(LIBSURVIVE_CORE)
-LIBSURVIVE_O:=$(POSERS) $(REDISTS) $(LIBSURVIVE_CORE) $(SBA)
-LIBSURVIVE_C:=$(LIBSURVIVE_O:.o=.c)
+#### Tools
-# unused: redist/crc32.c
+testCocoa : testCocoa.c $(LIBRARY)
+ $(CC) -o $@ $^ $(LDFLAGS_TOOLS) $(CFLAGS)
-testCocoa : testCocoa.c
- $(CC) -o $@ $^ $(LDFLAGS) $(CFLAGS)
+test : test.c $(LIBRARY)
+ $(CC) -o $@ $^ $(LDFLAGS_TOOLS) $(CFLAGS)
-test : test.c ./lib/libsurvive.so
- $(CC) -o $@ $^ $(LDFLAGS) $(CFLAGS)
+simple_pose_test : simple_pose_test.c $(DRAWFUNCTIONS) $(LIBRARY)
+ $(CC) -o $@ $^ $(LDFLAGS_TOOLS) $(CFLAGS)
-simple_pose_test : simple_pose_test.c ./lib/libsurvive.so $(DRAWFUNCTIONS)
- $(CC) -o $@ $^ $(LDFLAGS) $(CFLAGS)
+data_recorder : data_recorder.c $(LIBRARY)
+ $(CC) -o $@ $^ $(LDFLAGS_TOOLS) $(CFLAGS)
-data_recorder : data_recorder.c ./lib/libsurvive.so
- $(CC) -o $@ $^ $(LDFLAGS) $(CFLAGS)
+calibrate : calibrate.c $(DRAWFUNCTIONS) $(LIBRARY)
+ $(CC) -o $@ $^ $(LDFLAGS_TOOLS) $(CFLAGS)
-calibrate : calibrate.c ./lib/libsurvive.so $(DRAWFUNCTIONS)
- $(CC) -o $@ $^ $(LDFLAGS) $(CFLAGS)
+calibrate_client : calibrate_client.c $(GRAPHICS_LOFI) $(LIBRARY)
+ $(CC) -o $@ $^ $(LDFLAGS_TOOLS) $(CFLAGS)
-calibrate_client : calibrate_client.c ./lib/libsurvive.so $(GRAPHICS_LOFI)
- $(CC) -o $@ $^ $(LDFLAGS) $(CFLAGS)
-## Still not working!!! Don't use.
-static_calibrate : calibrate.c $(DRAWFUNCTIONS) $(LIBSURVIVE_C)
- tcc -o $@ $^ $(CFLAGS) $(LDFLAGS) -DTCC
+#### Testers.
./redist/dclhelpers_debuggable.c : ./redist/dclhelpers.c ./redist/dclhelpers.h ./redist/dclapack.h
gcc -E ./redist/dclhelpers.c > ./redist/dclhelpers_debuggable.c
clang-format -i ./redist/dclhelpers_debuggable.c
sed -i 's/#/\/\/#/g' ./redist/dclhelpers_debuggable.c
-
test_dcl: ./redist/test_dcl.c ./redist/dclhelpers.c ./redist/dclhelpers.h ./redist/dclapack.h ./redist/minimal_opencv.c ./src/epnp/epnp.c
- $(CC) -o $@ $^ $(LDFLAGS) $(CFLAGS_RELEASE) -DFLT=double
+ $(CC) -o $@ $^ $(LDFLAGS_TOOLS) $(CFLAGS) -DFLT=double
test_dcl_debug: ./redist/test_dcl.c ./redist/dclhelpers_debuggable.c ./redist/dclhelpers.h ./redist/dclapack.h redist/os_generic.c
- $(CC) -o $@ $^ $(LDFLAGS) $(CFLAGS) -DFLT=double -fsanitize=address -fsanitize=undefined
+ $(CC) -o $@ $^ $(LDFLAGS_TOOLS) $(CFLAGS) -DFLT=double -fsanitize=address -fsanitize=undefined
-test_minimal_cv: ./src/epnp/test_minimal_cv.c ./lib/libsurvive.so
- $(CC) -o $@ $^ $(LDFLAGS) $(CFLAGS)
+test_minimal_cv: ./src/epnp/test_minimal_cv.c $(LIBRARY)
+ $(CC) -o $@ $^ $(LDFLAGS_TOOLS) $(CFLAGS)
-test_epnp: ./src/epnp/test_epnp.c ./lib/libsurvive.so
- $(CC) -o $@ $^ $(LDFLAGS) $(CFLAGS)
+test_epnp: ./src/epnp/test_epnp.c $(LIBRARY)
+ $(CC) -o $@ $^ $(LDFLAGS_TOOLS) $(CFLAGS)
test_epnp_ocv: ./src/epnp/test_epnp.c ./src/epnp/epnp.c
- $(CC) -o $@ $^ -DWITH_OPENCV -lpthread -lz -lm -flto -g -lX11 -lusb-1.0 -Iinclude/libsurvive -fPIC -g -O4 -Iredist -flto -DUSE_DOUBLE -std=gnu99 -rdynamic -fsanitize=address -fsanitize=undefined -llapack -lm -lopencv_core
+ $(CC) -o $@ $^ -DWITH_OPENCV -lpthread -lz -lm -flto -g -lX11 -lusb-1.0 -Iinclude/libsurvive -fPIC -g -O4 -Iredist -flto -DUSE_DOUBLE -std=gnu99 -rdynamic -fsanitize=address -fsanitize=undefined -llapack -lm -lopencv_core $(LDFLAGS_TOOLS)
+
+
-lib:
- mkdir lib
+#### Actual build system.
-lib/libsurvive.so : $(LIBSURVIVE_O)
- $(CC) -o $@ $^ $(LDFLAGS) -shared
+$(OBJDIR):
+ mkdir -p lib
+ mkdir -p $(OBJDIR)
+ mkdir -p $(OBJDIR)/winbuild
+ mkdir -p $(OBJDIR)/src
+ mkdir -p $(OBJDIR)/redist
+ mkdir -p $(OBJDIR)/redist/sba
+ mkdir -p $(OBJDIR)/src/epnp
+$(LIBRARY): $(LIBSURVIVE_O) $(OBJDIR)
+ $(CC) -o $@ $(LIBSURVIVE_O) $(CFLAGS) $(LDFLAGS) -shared
+
+$(OBJDIR)/%.o : %.c $(OBJDIR)
+ $(CC) -c -o $@ $< $(CFLAGS)
calibrate_tcc : $(LIBSURVIVE_C)
tcc -DRUNTIME_SYMNUM $(CFLAGS) -o $@ $^ $(LDFLAGS) calibrate.c $(DRAWFUNCTIONS) redist/symbol_enumerator.c
clean :
- rm -rf */*/*.o *.o src/*.o *~ src/*~ test simple_pose_test data_recorder calibrate testCocoa lib/libsurvive.so test_minimal_cv test_epnp test_epnp_ocv calibrate_client redist/*.o redist/*~ tools/data_server/data_server tools/lighthousefind/lighthousefind tools/lighthousefind_tori/lighthousefind-tori tools/plot_lighthouse/plot_lighthouse tools/process_rawcap/process_to_points redist/jsmntest redist/lintest
+ rm -rf */*/*.o *.o src/*.o $(OBJDIR) *~ src/*~ test simple_pose_test data_recorder calibrate testCocoa lib/libsurvive.so test_minimal_cv test_epnp test_epnp_ocv calibrate_client redist/*.o redist/*~ tools/data_server/data_server tools/lighthousefind/lighthousefind tools/lighthousefind_tori/lighthousefind-tori tools/plot_lighthouse/plot_lighthouse tools/process_rawcap/process_to_points redist/jsmntest redist/lintest
.test_redist:
cd redist && make .run_tests;
.run_tests: .test_redist
+tccbatch :
+ echo "@echo off" > winbuild/build_tcc.bat
+ echo "set TCC=C:\\\\tcc\\\\tcc.exe" >> winbuild/build_tcc.bat
+ echo "echo USing %TCC%" >> winbuild/build_tcc.bat
+ echo "set SOURCES=$(LIBSURVIVE_C)" >> winbuild/build_tcc.bat
+ echo "set EXEC=..\\\\calibrate.c redist\\\\CNFGWinDriver.c redist\\\\os_generic.c redist\\\\CNFGFunctions.c" >> winbuild/build_tcc.bat
+ echo "set CFLAGS=$(CFLAGS)" >> winbuild/build_tcc.bat
+ echo "@echo on" >> winbuild/build_tcc.bat
+ echo "%TCC% -v %CFLAGS% %SOURCES% %REDIST% %EXEC% %LDFLAGS% tcc_stubs.c %RD%hid-windows.c -o calibrate.exe" >> winbuild/build_tcc.bat
+
+help :
+ @echo "Usage: make [flags]"
+ @echo " Build-system flags:"
+ @echo " MINIMAL=1 Buld a minimal build, geared for embedded systems."
+ @echo " LINUX_USE_HIDAPI=1 Build with HIDAPI in Linux instead of just libusb."
+ @echo " EXTRA_WARNINGS=1 Provide many mor warnings for build system."
+ @echo " WINDOWS=1 Cross-target Windows (EXPERIMENTAL)"
+ @echo " CFLAGS= Specify additional CFLAGS."
+ @echo " LDFLAGS= Specify additional LDFLAGS."
+ @echo " CC= Specify a different C compiler."
+ @echo " Useful Preprocessor Directives (For CFLAGS):"
+ @echo " -DUSE_DOUBLE Use double instead of float for most operations."
+ @echo " -DNOZLIB Use puff.c"
+ @echo " -DTCC Various things needed for TCC."
+ @echo " -DWINDOWS -DWIN32 Building for Windows."
+ @echo " -DRUNTIME_SYMNUM Don't assume __attribute__((constructor)) works. Instead comb for anything starting with REGISTER."
+ @echo " -flto Do link-time optimizations. This significantly increases period of time to link but improves performance.."
+ @echo " Useful build targets:"
+ @echo " all Build libsurvive.so and tools."
+ @echo " clean Erase build and incremental files."
+ @echo " buildfolders Produce build file structure."
+ @echo " $(LIBRARY) Produce libsurvive.so"
+
+