| @@ -8,8 +8,8 @@ SOURCES = $(wildcard src/*.cpp src/*/*.cpp) \ | |||
| ifeq ($(ARCH), lin) | |||
| SOURCES += ext/noc/noc_file_dialog.c | |||
| CFLAGS += -DNOC_FILE_DIALOG_GTK $(shell pkg-config --cflags gtk+-2.0) | |||
| SOURCES += ext/osdialog/osdialog_gtk2.c | |||
| CFLAGS += $(shell pkg-config --cflags gtk+-2.0) | |||
| LDFLAGS += -rdynamic \ | |||
| -lpthread -lGL -ldl \ | |||
| -lportaudio -lportmidi \ | |||
| @@ -19,16 +19,14 @@ TARGET = Rack | |||
| endif | |||
| ifeq ($(ARCH), mac) | |||
| SOURCES += ext/noc/noc_file_dialog.m | |||
| CFLAGS += -DNOC_FILE_DIALOG_OSX | |||
| SOURCES += ext/osdialog/osdialog_mac.m | |||
| CXXFLAGS += -DAPPLE -stdlib=libc++ -I$(HOME)/local/include -I/usr/local/lib/libzip/include | |||
| LDFLAGS += -stdlib=libc++ -L$(HOME)/local/lib -lpthread -lglew -lglfw3 -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo -ldl -ljansson -lportaudio -lportmidi -lsamplerate -lcurl -lzip | |||
| TARGET = Rack | |||
| endif | |||
| ifeq ($(ARCH), win) | |||
| SOURCES += ext/noc/noc_file_dialog.c | |||
| CFLAGS += -DNOC_FILE_DIALOG_WIN32 | |||
| SOURCES += ext/osdialog/osdialog_win.c | |||
| CXXFLAGS += -DGLEW_STATIC \ | |||
| -I$(HOME)/pkg/portaudio-r1891-build/include -I/mingw64/lib/libzip/include -I$(HOME)/local/include | |||
| LDFLAGS += \ | |||
| @@ -0,0 +1,15 @@ | |||
| # Detect architecture if ARCH is not defined | |||
| MACHINE = $(shell gcc -dumpmachine) | |||
| ifneq (,$(findstring linux,$(MACHINE))) | |||
| # Linux | |||
| ARCH = lin | |||
| else ifneq (,$(findstring apple,$(MACHINE))) | |||
| # Mac | |||
| ARCH = mac | |||
| else ifneq (,$(findstring mingw,$(MACHINE))) | |||
| # Windows | |||
| ARCH = win | |||
| else | |||
| $(error Could not determine machine type. Try hacking around in Makefile-arch.inc) | |||
| endif | |||
| @@ -1,3 +1,6 @@ | |||
| VERSION ?= dev | |||
| FLAGS += -DVERSION=$(VERSION) | |||
| # Generate dependency files build/*.d | |||
| FLAGS += -MMD | |||
| # Optimization | |||
| @@ -0,0 +1,99 @@ | |||
| LOCAL = $(PWD) | |||
| # Arch-specifics | |||
| include ../Makefile-arch.inc | |||
| ifeq ($(ARCH),mac) | |||
| export CFLAGS = -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk \ | |||
| -mmacosx-version-min=10.7 | |||
| export CXXFLAGS = $(CFLAGS) | |||
| export LDFLAGS = $(CFLAGS) | |||
| endif | |||
| # Commands | |||
| WGET = wget -nc | |||
| UNTAR = tar xf | |||
| UNZIP = unzip | |||
| # Packages | |||
| glew = glew-2.1.0 | |||
| glfw = glfw-3.2.1 | |||
| jansson = jansson-2.10 | |||
| libsamplerate = libsamplerate-0.1.9 | |||
| libcurl = curl-7.54.1 | |||
| libzip = libzip-1.2.0 | |||
| portmidi = portmidi | |||
| portaudio = portaudio | |||
| .NOTPARALLEL: | |||
| all: $(glew) $(glfw) $(jansson) $(libsamplerate) $(libcurl) $(libzip) $(portmidi) $(portaudio) | |||
| $(glew): | |||
| $(WGET) https://downloads.sourceforge.net/project/glew/glew/$(patsubst glew-%,%,$@)/$@.tgz | |||
| $(UNTAR) $@.tgz | |||
| $(MAKE) -C $@ | |||
| ln -s lib lib64 | |||
| $(MAKE) -C $@ GLEW_DEST="$(LOCAL)" install | |||
| rm lib64 | |||
| $(glfw): | |||
| $(WGET) https://github.com/glfw/glfw/releases/download/$(patsubst glfw-%,%,$@)/$@.zip | |||
| $(UNZIP) $@.zip | |||
| cd $@ && cmake . \ | |||
| -DCMAKE_INSTALL_PREFIX="$(LOCAL)" -DBUILD_SHARED_LIBS=ON \ | |||
| -DGLFW_USE_CHDIR=ON -DGLFW_USE_MENUBAR=ON -DGLFW_USE_RETINA=ON | |||
| $(MAKE) -C $@ | |||
| $(MAKE) -C $@ install | |||
| $(jansson): | |||
| $(WGET) http://www.digip.org/jansson/releases/$@.tar.gz | |||
| $(UNTAR) $@.tar.gz | |||
| cd $@ && ./configure --prefix="$(LOCAL)" | |||
| $(MAKE) -C $@ | |||
| $(MAKE) -C $@ install | |||
| $(libsamplerate): | |||
| $(WGET) http://www.mega-nerd.com/SRC/$@.tar.gz | |||
| $(UNTAR) $@.tar.gz | |||
| cd $@ && ./configure --prefix="$(LOCAL)" | |||
| $(MAKE) -C $@ | |||
| $(MAKE) -C $@ install | |||
| $(libcurl): | |||
| $(WGET) https://curl.haxx.se/download/$@.tar.gz | |||
| $(UNTAR) $@.tar.gz | |||
| cd $@ && ./configure --prefix="$(LOCAL)" \ | |||
| --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-manual \ | |||
| --without-zlib --without-ssl --without-ca-bundle --without-ca-path --without-ca-fallback --without-libpsl --without-libmetalink --without-libssh2 --without-librtmp --without-winidn --without-libidn2 --without-nghttp2 | |||
| $(MAKE) -C $@ | |||
| $(MAKE) -C $@ install | |||
| $(libzip): | |||
| $(WGET) https://nih.at/libzip/$@.tar.gz | |||
| $(UNTAR) $@.tar.gz | |||
| cd $@ && ./configure --prefix="$(LOCAL)" | |||
| $(MAKE) -C $@ | |||
| $(MAKE) -C $@ install | |||
| $(portmidi): | |||
| git clone https://github.com/aoeu/portmidi.git $@ | |||
| # TODO Does not yet work | |||
| cd $@ && cmake . -DCMAKE_INSTALL_PREFIX="$(LOCAL)" \ | |||
| -DCMAKE_BUILD_TYPE=Release \ | |||
| -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY=$(PWD)/$@/Release \ | |||
| -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=$(PWD)/$@/Release \ | |||
| -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=$(PWD)/$@/Release | |||
| $(MAKE) -C $@ | |||
| $(MAKE) -C $@ install | |||
| $(portaudio): | |||
| $(WGET) http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz | |||
| $(UNTAR) pa_stable_v190600_20161030.tgz | |||
| cd $@ && ./configure --prefix="$(LOCAL)" | |||
| $(MAKE) -C $@ | |||
| $(MAKE) -C $@ install | |||
| clean: | |||
| git clean -fdxi | |||
| @@ -11,8 +11,6 @@ void guiRun(); | |||
| bool guiIsKeyPressed(int key); | |||
| void guiCursorLock(); | |||
| void guiCursorUnlock(); | |||
| const char *guiSaveDialog(const char *filters, const char *filename); | |||
| const char *guiOpenDialog(const char *filters, const char *filename); | |||
| extern NVGcontext *gVg; | |||
| extern std::shared_ptr<Font> gGuiFont; | |||
| @@ -4,7 +4,7 @@ | |||
| namespace rack { | |||
| std::string gApplicationName = "VCV Rack"; | |||
| std::string gApplicationVersion = "v0.2.1 alpha"; | |||
| std::string gApplicationVersion = TOSTRING(VERSION); | |||
| RackWidget *gRackWidget = NULL; | |||
| @@ -1,6 +1,7 @@ | |||
| #include "app.hpp" | |||
| #include "gui.hpp" | |||
| #include "engine.hpp" | |||
| #include "../ext/osdialog/osdialog.h" | |||
| namespace rack { | |||
| @@ -16,18 +17,20 @@ struct NewItem : MenuItem { | |||
| struct SaveItem : MenuItem { | |||
| void onAction() { | |||
| const char *path = guiSaveDialog(filters, "Untitled.json"); | |||
| char *path = osdialog_file(OSDIALOG_SAVE, "./patches", "Untitled.json", NULL); | |||
| if (path) { | |||
| gRackWidget->savePatch(path); | |||
| free(path); | |||
| } | |||
| } | |||
| }; | |||
| struct OpenItem : MenuItem { | |||
| void onAction() { | |||
| const char *path = guiOpenDialog(filters, NULL); | |||
| char *path = osdialog_file(OSDIALOG_OPEN, "./patches", NULL, NULL); | |||
| if (path) { | |||
| gRackWidget->loadPatch(path); | |||
| free(path); | |||
| } | |||
| } | |||
| }; | |||
| @@ -17,10 +17,6 @@ | |||
| #define NANOSVG_IMPLEMENTATION | |||
| #include "../ext/nanosvg/src/nanosvg.h" | |||
| extern "C" { | |||
| #include "../ext/noc/noc_file_dialog.h" | |||
| } | |||
| namespace rack { | |||
| @@ -284,14 +280,6 @@ void guiCursorUnlock() { | |||
| glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); | |||
| } | |||
| const char *guiSaveDialog(const char *filters, const char *filename) { | |||
| return noc_file_dialog_open(NOC_FILE_DIALOG_SAVE, filters, NULL, filename); | |||
| } | |||
| const char *guiOpenDialog(const char *filters, const char *filename) { | |||
| return noc_file_dialog_open(NOC_FILE_DIALOG_OPEN, filters, NULL, filename); | |||
| } | |||
| //////////////////// | |||
| // resources | |||