#+TITLE: sdp (project) makefile #+AUTHOR: Ralph Amissah #+EMAIL: ralph.amissah@gmail.com #+STARTUP: indent content #+LANGUAGE: en #+OPTIONS: H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t #+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc #+OPTIONS: author:nil email:nil creator:nil timestamp:nil #+PROPERTY: header-args :padline no :exports code :noweb yes #+EXPORT_SELECT_TAGS: export #+EXPORT_EXCLUDE_TAGS: noexport #+FILETAGS: :sdp:rel:makefile: #+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n) [[./org/sdp.org][sdp.org]] [[./org/][org/]] * sdp makefile :makefile: ** TODO settings [+2] :settings: *** alternative D compilers (dmd/ldc2/gdc) [+1] :compiler: **** [#A] dmd :dmd: #+BEGIN_SRC makefile :tangle makefile DMD=dmd DMD_FLAGS=-de -w -J./views -I./src/sdp DMD_FLAGS_RELEASE=-O -release DMD_FLAG_BINOF=-of #+END_SRC **** [#A] ldc2 :ldc: #+BEGIN_SRC makefile :tangle makefile LDC=ldc2 LDC_FLAGS=-w -J=views -I=src/sdp LDC_FLAGS_RELEASE=-O4 -release LDC_FLAG_BINOF=-of= #+END_SRC **** TODO gdc :gdc: #+BEGIN_SRC makefile :tangle makefile GDC=gdc #GDC=gdc-5 GDC_FLAGS= GDC_FLAGS_RELEASE=-march=native -O3 -pipe -frelease GDC_FLAG_BINOF=-o #+END_SRC *** build tools (dub/rdmd) [+1] :build:tool: **** rdmd :rdmd: #+BEGIN_SRC makefile :tangle makefile RDMD=rdmd RDMD_FLAGS=--build-only --compiler= #+END_SRC **** [#A] dub :dub: #+BEGIN_SRC makefile :tangle makefile DUB=dub DUB_FLAGS=-v --force --compiler= #+END_SRC *** TODO [#A] set/select: ~D compiler~ & ~debug flags~ [+1] [2/2] :select: - [X] Set D_COMPILER (one of DMD LDC or GDC) - [X] Set debug flags (using DMD standard flag -debug=) **** TODO SET compiler: "SET_D_COMPILER=": :compiler:select: [[http://wiki.dlang.org/Compilers][D Compilers wiki]] [[http://dlang.org/download.html][D Compilers download]] Set D_COMPILER one of DMD, LDC or GDC e.g.: SET_D_COMPILER=DMD #+BEGIN_SRC makefile :tangle makefile # SET_D_COMPILER=(one of: DMD LDC or GDC): SET_D_COMPILER=LDC #+END_SRC **** TODO SET debug flags: "SET_DC_FLAGS_DEBUG_EXTRA=-debug=": :compiler:flags:debug: Set debug flags using DMD standard flag -debug= e.g.: SET_DC_FLAGS_DEBUG_EXTRA=-debug=headings -debug=bookindex SET_DC_FLAGS_DEBUG_EXTRA=-debug=headings -debug=footnotes -debug=endnotes SET_DC_FLAGS_DEBUG_EXTRA=-debug=headings -debug=biblio #+BEGIN_SRC makefile :tangle makefile SET_DC_FLAGS_DEBUG_EXTRA=-debug=dumpdoc #+END_SRC ***** debug flags Set debug flags using DMD standard flag -debug= e.g.: SET_DC_FLAGS_DEBUG_EXTRA=-debug=dumpdoc SET_DC_FLAGS_DEBUG_EXTRA=-debug=headings -debug=bookindex SET_DC_FLAGS_DEBUG_EXTRA=-debug=headings -debug=biblio SET_DC_FLAGS_DEBUG_EXTRA=-debug=code biblio biblio_sorted bibliosorted block bookindex bookindexmatch bookindexraw check checkdoc code comment dumpdoc write out document contents, with object type and ocn endnotes endnotes_build footnotes footnotesdone group header header_and_content header1 headerjson headermakejson headermetadatajson heading headings headingsfound insert munge node objectrelated1 objectrelated2 objects ocnoff para parabullet parabulletindent paraindent paraindenthang parent poem quote raw sdlang source srclines structattrib summary table *** D compiler settings [+1] :settings:compiler: **** compiler settings #+BEGIN_SRC makefile :tangle makefile DC=$($(SET_D_COMPILER)) DC_FLAGS=$($(shell echo $(SET_D_COMPILER)_FLAGS)) DC_FLAGS_RELEASE=$($(shell echo $(SET_D_COMPILER)_FLAGS_RELEASE)) DC_FLAG_BINOF=$($(shell echo $(SET_D_COMPILER)_FLAG_BINOF)) DC_FLAGS_DEBUG_DEFAULT_SET=-unittest -debug=checkdoc -debug=summary DC_FLAGS_DEBUG_SET=\ $(shell echo $(DC_FLAGS_DEBUG_DEFAULT_SET) $(SET_DC_FLAGS_DEBUG_EXTRA)) #+END_SRC **** compiler conditional settings (depending on selected D compiler) #+BEGIN_SRC makefile :tangle makefile ifeq ($(DC), $(DMD)) DC_FLAGS_DEBUG :=$(shell echo $(DC_FLAGS_DEBUG_SET)) endif ifeq ($(DC) ,$(LDC)) DC_FLAGS_DEBUG :=$(shell echo $(DC_FLAGS_DEBUG_SET)| sed -e "s/-debug=/-d-debug=/g") endif ifeq ($(DC), $(GDC)) DC_FLAGS_DEBUG :=$(shell echo $(DC_FLAGS_DEBUG_SET)| sed -e "s/-debug/-fdebug/g") endif DUB_FLAGS_DEBUG :=$(shell echo $(DC_FLAGS_DEBUG_SET)| sed -e "s/-debug/--debug/g"| sed -e "s/-unittest//g") #+END_SRC *** Project Details :project:sdp: #+BEGIN_SRC makefile :tangle makefile PRG_NAME=sdp PRG_SRC=$(PRG_NAME).d PRG_SRCDIR=./src PRG_BIN=$(PRG_NAME) PRG_BINDIR=./bin #+END_SRC *** Emacs Org settings :settings:emacs:org:tangle: #+BEGIN_SRC makefile :tangle makefile # ORG ORG_VERSION=20160530 EMACSLISP=/usr/share/emacs/site-lisp EMACSLISP_ORG=~/.emacs.d/elpa/org-$($(shell echo $(ORG_VERSION))) EMACSLISP_ORG_CONTRIB=~/.emacs.d/elpa/org-plus-contrib-$($(shell echo $(ORG_VERSION))) ORGFILELIST=$(shell echo `ls -1 maker.org org/*.org`) ORGFILES="" ORGDIR=$(shell echo `pwd`) #+END_SRC ** "make" commands [+2] :make:commands: - build commands - build - debug - release - init, clean, distclean etc. - init - clean - expunge - distclean - distclean_and_init - org babel tangle - tangle - git snapshot - gitsnapshot *** build commands [+1] :build:compile: **** build rebuild :build:rebuild: ***** compilers #+BEGIN_SRC makefile :tangle makefile all: tangle build build: $(PRG_SRCDIR)/$(PRG_SRC) $(DC) $(DC_FLAGS) \ $(DC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_SRC) rebuild: $(PRG_SRCDIR)/$(PRG_SRC) $(PRG_BINDIR)/$(PRG_BIN).o clean build makefile_new: make -k tangle_maker #+END_SRC ***** dub build rebuild :dub: #+BEGIN_SRC makefile :tangle makefile dub: $(PRG_SRCDIR)/$(PRG_SRC) $(DUB) $(DUB_FLAGS)$(DC) debug_dub: $(PRG_SRCDIR)/$(PRG_SRC) $(DUB) $(DUB_FLAGS)$(DC) $(DUB_FLAGS_DEBUG) # dmd dub_dmd_release: expunge skel tangle $(DUB) $(DUB_FLAGS)dmd --config=sdp-release dub_dmd_release_test: tangle $(DUB) $(DUB_FLAGS)dmd --config=sdp-dmd dub_dmd_debug: tangle $(DUB) $(DUB_FLAGS)dmd --config=sdp-debug dub_dmd_debug_clean: tangle $(DUB) $(DUB_FLAGS)dmd --config=sdp-debug-clean dub_dmd_tmp: tangle $(DUB) $(DUB_FLAGS)dmd --config=sdp-tmp dub_dmd_debug_src: $(DUB) $(DUB_FLAGS)dmd --config=sdp-debug # ldc2 dub_ldc_release: expunge skel tangle $(DUB) $(DUB_FLAGS)ldc2 --config=sdp-release dub_ldc_release_test: tangle $(DUB) $(DUB_FLAGS)ldc2 --config=sdp-ldc dub_ldc_debug: tangle $(DUB) $(DUB_FLAGS)ldc2 --config=sdp-debug dub_ldc_debug_clean: tangle $(DUB) $(DUB_FLAGS)ldc2 --config=sdp-debug-clean dub_ldc_tmp: tangle $(DUB) $(DUB_FLAGS)ldc2 --config=sdp-tmp dub_ldc_debug_src: $(DUB) $(DUB_FLAGS)ldc2 --config=sdp-debug # test releases dub_release_test_dmd: tangle dub_dmd_release_test dub_release_test_ldc: tangle dub_ldc_release_test #+END_SRC ***** rdmd build rebuild :rdmd: #+BEGIN_SRC makefile :tangle makefile rdmd: $(PRG_SRCDIR)/$(PRG_SRC) $(RDMD) $(RDMD_FLAGS)$(DC) $(DC_FLAGS) \ $(DC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_NAME)/$(PRG_SRC) #+END_SRC **** debug :debug: ***** debug #+BEGIN_SRC makefile :tangle makefile debug: $(PRG_SRCDIR)/$(PRG_SRC) $(DC) $(DC_FLAGS) $(DC_FLAGS_DEBUG) \ $(DC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_SRC) debug_dmd: $(PRG_SRCDIR)/$(PRG_SRC) $(DMD) $(DMD_FLAGS) $(DMD_FLAGS_DEBUG) \ $(DMD_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_SRC) debug_ldc: $(PRG_SRCDIR)/$(PRG_SRC) $(LDC) $(LDC_FLAGS) $(LDC_FLAGS_DEBUG) \ $(LDC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_SRC) debug_gdc: $(PRG_SRCDIR)/$(PRG_SRC) $(GDC) $(GDC_FLAGS) $(GDC_FLAGS_DEBUG) \ $(GDC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_SRC) #+END_SRC ***** debug rdmd #+BEGIN_SRC makefile :tangle makefile debug_rdmd: $(PRG_SRCDIR)/$(PRG_SRC) $(RDMD) $(RDMD_FLAGS)$(DC) $(DC_FLAGS) $(DC_FLAGS_DEBUG) \ $(DC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_NAME)/$(PRG_SRC) debug_rdmd_dmd: $(PRG_SRCDIR)/$(PRG_SRC) $(RDMD) $(RDMD_FLAGS)$(DMD) $(DC_FLAGS) $(DC_FLAGS_DEBUG) \ $(DC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_NAME)/$(PRG_SRC) debug_rdmd_ldc: $(PRG_SRCDIR)/$(PRG_SRC) $(RDMD) $(RDMD_FLAGS)$(LDC) $(DC_FLAGS) $(LDC_FLAGS_DEBUG) \ $(DC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_NAME)/$(PRG_SRC) debug_rdmd_gdc: $(PRG_SRCDIR)/$(PRG_SRC) $(RDMD) $(RDMD_FLAGS)$(GDC) $(DC_FLAGS) $(GDC_FLAGS_DEBUG) \ $(DC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_NAME)/$(PRG_SRC) #+END_SRC **** release :release: ***** release #+BEGIN_SRC makefile :tangle makefile release: distclean tangle $(PRG_SRCDIR)/$(PRG_SRC) $(DC) $(DC_FLAGS) $(DC_FLAGS_RELEASE) \ $(DC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_SRC) #+END_SRC ***** release rdmd #+BEGIN_SRC makefile :tangle makefile release_rdmd: distclean tangle $(PRG_SRCDIR)/$(PRG_SRC) $(RDMD) $(RDMD_FLAGS)$(DC) $(DC_FLAGS) $(DC_FLAGS_RELEASE) \ $(DC_FLAG_BINOF)$(PRG_BINDIR)/$(PRG_BIN) \ $(PRG_SRCDIR)/$(PRG_SRC) #+END_SRC *** init clean distclean etc. :clean: #+BEGIN_SRC makefile :tangle makefile skel: mkdir -p $(PRG_SRCDIR)/$(PRG_NAME); \ mkdir -p $(PRG_BINDIR); init: skel clean: rm $(PRG_BINDIR)/* expunge: rm -f $(PRG_SRCDIR)/*; \ rm -rf $(PRG_SRCDIR)/$(PRG_NAME); \ rm -rf $(PRG_BINDIR); distclean: expunge distclean_and_init: expunge mkdir -p $(PRG_SRCDIR)/$(PRG_NAME); \ mkdir -p $(PRG_BINDIR); #+END_SRC *** Org Babel Tangle batch process command :tangle: **** tangle: org babel tangle *.org #+BEGIN_SRC makefile :tangle makefile tangle: skel for f in $(ORGFILELIST); do \ ORGFILES="$$ORGFILES \"$$f\""; \ done; \ emacs --batch -Q -q \ --eval "(progn \ (add-to-list 'load-path \ (expand-file-name \"$(EMACSLISP)\")) \ (add-to-list 'load-path \ (expand-file-name \"$(EMACSLISP_ORG)\" t)) \ (add-to-list 'load-path \ (expand-file-name \"$(EMACSLISP_ORG_CONTRIB)\" t)) \ (require 'org)(require 'ob)(require 'ob-tangle) \ (mapc (lambda (file) \ (find-file (expand-file-name file \"$(ORGDIR)\")) \ (setq-local org-src-preserve-indentation t) \ (org-babel-tangle) \ (kill-buffer)) '($$ORGFILES)))" 2>&1 #+END_SRC **** tangle maker: org babel tangle maker.org, makefile new #+BEGIN_SRC makefile :tangle makefile tangle_maker: for f in $(ORGFILELIST); do \ ORGFILES="\"maker.org\""; \ done; \ emacs --batch -Q -q \ --eval "(progn \ (add-to-list 'load-path \ (expand-file-name \"$(EMACSLISP)\")) \ (add-to-list 'load-path \ (expand-file-name \"$(EMACSLISP_ORG)\" t)) \ (add-to-list 'load-path \ (expand-file-name \"$(EMACSLISP_ORG_CONTRIB)\" t)) \ (require 'org)(require 'ob)(require 'ob-tangle) \ (mapc (lambda (file) \ (find-file (expand-file-name file \".\")) \ (setq-local org-src-preserve-indentation t) \ (org-babel-tangle) \ (kill-buffer)) '($$ORGFILES)))" 2>&1 #+END_SRC *** Git snapshot #+BEGIN_SRC makefile :tangle makefile gitsnapshot: distclean tangle git commit -a #+END_SRC ** phony :phony: #+BEGIN_SRC makefile :tangle makefile .PHONY : all build rebuild debug release \ clean distclean init \ tangle gitsnapshot #+END_SRC * conf misc ** dub :dub:description: Every DUB package should contain a [[http://code.dlang.org/package-format?lang=json][dub.json]] (or [[http://code.dlang.org/package-format?lang=sdl][dub.sdl]]) *** dub.sdl :sdl: #+BEGIN_SRC sh :tangle dub.sdl name "sdp" description "sisu document parser." homepage "http://sisudoc.org" authors "Ralph Amissah" copyright "©2016 Ralph Amissah" license "AGPL-3+" targetPath "./bin" sourcePath "./src" stringImportPaths "./views" buildRequirements "disallowDeprecations" "allowWarnings" configuration "sdp-release" { name "release" targetType "executable" platforms "posix" targetName "sdp" buildOptions "releaseMode" "optimize" "inline" postGenerateCommands "/usr/bin/notify-send -t 0 'D release executable ready' 'sdp'" } configuration "sdp-dmd" { name "dmd" targetType "executable" platforms "posix" #compiler "dmd" targetName "sdp-dmd" buildOptions "releaseMode" "optimize" "inline" postGenerateCommands "/usr/bin/notify-send -t 0 'D dmd compiled test release executable ready' 'sdp-dmd'" } configuration "sdp-ldc" { name "ldc" targetType "executable" platforms "posix" #compiler "ldc2" targetName "sdp-ldc" buildOptions "releaseMode" "optimize" "inline" postGenerateCommands "/usr/bin/notify-send -t 0 'D ldc2 compiled test release executable ready' 'sdp-ldc'" } configuration "sdp-debug" { name "debuging" targetType "executable" platforms "posix" targetName "sdp-debug" debugVersions "checkdoc" debugVersions "summary" debugVersions "dumpdoc" buildOptions "debugMode" "debugInfo" "optimize" postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-debug'" } configuration "sdp-tmp" { name "tmp" targetType "executable" platforms "posix" targetName "sdp-tmp" debugVersions "tmp" debugVersions "crap" debugVersions "header" debugVersions "header1" buildOptions "debugMode" "debugInfo" "optimize" postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-tmp'" } configuration "sdp-debug-clean" { name "debug-clean" targetType "executable" platforms "posix" targetName "sdp-debug-clean" buildOptions "debugMode" "debugInfo" "optimize" postGenerateCommands "/usr/bin/notify-send -t 0 'D (debug) executable ready' 'sdp-debug-clean'" } #+END_SRC dflags platform="dmd" "-v --force -de -w -J./views -I./src/sdp -of./bin/sdp" dflags platform="dmd" "-O -release" #buildOptions "-O -release" *** +dub.json+ :json: **** +sdp+ #+BEGIN_SRC json :tangle no #+BEGIN_SRC json :tangle dub.json { "name" : "sdp", "targetType" : "executable", "targetName" : "sdp", "targetPath" : "bin", "description" : "sisu document parser.", "authors" : ["Ralph Amissah"], "homepage" : "http://sisudoc.org", "license" : "AGPL-3+", "add-path" : "./src/sdp", "dependencies": { } } #+END_SRC **** +sdlang+ :sdlang: #+BEGIN_SRC json :tangle ./src/sdlang/dub.json { "name": "sdlang-d", "description": "An SDL (Simple Declarative Language) library for D.", "homepage": "http://github.com/Abscissa/SDLang-D", "authors": ["Nick Sabalausky"], "license": "zlib/libpng", "copyright": "©2012-2015 Nick Sabalausky", "sourcePaths": ["."], "importPaths": ["."], "buildRequirements": ["allowWarnings"], "dependencies": { "libinputvisitor": "~>1.2.0" }, "subPackages": [ "./libinputvisitor" ], "configurations": [ { "name": "test", "targetType": "executable", "versions": ["SDLang_TestApp"], "targetPath": "../../bin/", "targetName": "sdlang" }, { "name": "library", "targetType": "library" }, { "name": "unittest", "targetType": "executable", "targetPath": "../../bin/", "targetName": "sdlang-unittest", "versions": ["sdlangUnittest", "sdlangTrace"] } ] } #+END_SRC **** +libinputvisitor+ :libinputvisitor: #+BEGIN_SRC json :tangle ./src/sdlang/libinputvisitor/dub.json { "name": "libinputvisitor", "description": "Write D input range generators in a straightforward coroutine style", "authors": ["Nick Sabalausky"], "homepage": "https://github.com/abscissa/libInputVisitor", "license": "WTFPL", "sourcePaths": ["."], "importPaths": ["."], "excludedSourceFiles": ["libInputVisitorExample.d"] } #+END_SRC ** .gitignore :gitignore: #+BEGIN_SRC sh :tangle .gitignore # git ls-files --others --exclude-from=.git/info/exclude #./.dub/** * !.gitignore !makefile !version.txt !dub.json !dub.sdl .dub/** !tangle !*.org !*.d !*.txt !org !src !views !**/ **/.#* #!*/ #*~ #\#* #*.\#* #+END_SRC ** sh script to batch process emacs org babel tangle :shell_script:tangle: [[http://orgmode.org/manual/Batch-execution.html]] creates a shell batch script called "tangle", that will tangle (emacs org babel tangle) org files in ./org/ to create .d source files in ./src/sdp/ (similar functionality is contained within the "makefile" created by this "maker.org" file make tangle) #+BEGIN_SRC sh :tangle tangle :tangle-mode (identity #o755) :shebang #!/bin/sh # -*- mode: shell-script -*- # tangle files with org-mode DIR=`pwd` ORGFILES="" EMACSLISP=/usr/share/emacs/site-lisp ORG_VERSION=20160530 EMACSLISP_ORG=~/.emacs.d/elpa/org-$($(shell echo $(ORG_VERSION))) EMACSLISP_ORG_CONTRIB=~/.emacs.d/elpa/org-plus-contrib-$($(shell echo $(ORG_VERSION))) # wrap each argument in the code required to call tangle on it for i in $@; do ORGFILES="$ORGFILES \"$i\"" done emacs --batch -Q -q \ --eval "(progn (add-to-list 'load-path (expand-file-name \"$EMACSLISP\")) (add-to-list 'load-path (expand-file-name \"$EMACSLISP_ORG\" t)) (add-to-list 'load-path (expand-file-name \"$EMACSLISP_ORG_CONTRIB\" t)) (require 'org)(require 'ob)(require 'ob-tangle) (mapc (lambda (file) (find-file (expand-file-name file \"$DIR\")) (setq-local org-src-preserve-indentation t) (org-babel-tangle) (kill-buffer)) '($ORGFILES)))" 2>&1 #|grep tangled #+END_SRC * dub zfunc :zfunc: ** ,dubdmd :dmd: #+BEGIN_SRC sh :tangle no time dub --compiler=dmd -v --force #+END_SRC ** ,dubldc :ldc: #+BEGIN_SRC sh :tangle no time dub --compiler=ldc2 -v --force #+END_SRC * D build notes :notes: ** compilers :compiler: *** [#A] dmd :dmd: #+BEGIN_SRC sh dmd -de -w -J./views -I./src/sdp -unittest -debug=checkdoc -debug=summary -debug=dumpdoc -of./bin/sdp ./src/sdp.d dmd -de -w -J./views -I./src/sdp -of./bin/sdp ./src/sdp.d dmd -de -w -J./views -I./src/sdp -O -release -of./bin/sdp ./src/sdp.d #+END_SRC *** [#A] ldc2 :ldc2: #+BEGIN_SRC sh ldc2 -de -w -J./views -I./src/sdp -unittest -d-debug=checkdoc -d-debug=summary -d-debug=dumpdoc -of=./bin/sdp ./src/sdp.d ldc2 -de -w -J./views -I./src/sdp -of=./bin/sdp ./src/sdp.d ldc2 -de -w -J./views -I./src/sdp -O4 -release -of=./bin/sdp ./src/sdp.d #+END_SRC *** TODO gdc :gdc: not done #+BEGIN_SRC sh #+END_SRC **** +note+ "nice how you can get 2x speedup without a single line of asm just by using ldc", p0nce "gdc might be worth a shot if your code is compatible", profan re: dmd "one can easily get 2x (and even more) speedup by simply switching to gdc -O2", ketmar ** build tools :build:tool: *** [#B] rdmd :rdmd: flags similar to dmd #+BEGIN_SRC sh rdmd -de -w -J./views -I./src/sdp -unittest -debug=checkdoc -debug=summary -debug=dumpdoc -of./bin/sdp ./src/sdp.d rdmd -de -w -J./views -I./src/sdp -of./bin/sdp ./src/sdp.d rdmd -de -w -J./views -I./src/sdp -O -release -of./bin/sdp ./src/sdp.d #dmd rdmd -de -w -J./views -I./src/sdp -unittest -debug=checkdoc -debug=summary -debug=dumpdoc --compiler=ldc2 -of./bin/sdp ./src/sdp.d #ldc rdmd -de -w -J./views -I./src/sdp -unittest -d-debug=checkdoc -d-debug=summary -d-debug=dumpdoc --compiler=ldc2 -of./bin/sdp ./src/sdp.d #+END_SRC *** [#A] dub :dub: https://github.com/dlang/dub/ http://code.dlang.org/getting_started http://code.dlang.org/docs/commandline Every DUB package should contain a [[http://code.dlang.org/package-format?lang=json][dub.json]] or [[http://code.dlang.org/package-format?lang=sdl][dub.sdl]] #+BEGIN_SRC sh --compiler=dmd --compiler=ldc2 --compiler=dmd -v --force --compiler=ldc2 -v --force #+END_SRC #+BEGIN_SRC sh dub -v --force --debug=checkdoc --debug=summary --debug=dumpdoc dub -v --force --build=release dub -v --combined --build-mode allAtOnce --build release # --annotate dub build sdp -v --combined --build-mode allAtOnce dub describe dub build sdp -v --force --debug=checkdoc --debug=dumpdoc dub -v --force --build=release dub -v --force --config=sdp-debug dub -v --force --config=sdp-release dub -v --force --config=sdp-release --build=release dub --compiler=dmd --force -v --config=sdp-debug dub --compiler=dmd --force -v --config=sdp-release # dmd ,dubdmd --config=sdp-debug-clean # time ~sdp3/bin/sdp-debug-clean -v --html --no-assert en/autonomy_markup0.sst # ldc # flags ,dubldc --config=sdp-release # sdp # time ~sdp3/bin/sdp -v --html --no-assert en/autonomy_markup0.sst ,dubldc --config=sdp-debug # sdp-debug # time ~sdp3/bin/sdp-debug -v --html --no-assert en/autonomy_markup0.sst ,dubldc --config=sdp-tmp # sdp-tmp # time ~sdp3/bin/sdp-tmp -v --html --no-assert en/autonomy_markup0.sst ,dubldc --config=sdp-debug-clean # sdp-debug-clean # time ~sdp3/bin/sdp-debug-clean -v --html --no-assert en/autonomy_markup0.sst #+END_SRC ** make (emacs) #+BEGIN_SRC sh make -k dub_dmd_release make -k dub_dmd_debug make -k dub_dmd_debug_clean make -k dub_dmd_tmp make -k dub_ldc_release make -k dub_ldc_debug make -k dub_ldc_debug_clean make -k dub_ldc_tmp #+END_SRC