From 679783dbd21c13fa032279cd2a2e0c818c16c83b Mon Sep 17 00:00:00 2001 From: Corentin Le Molgat Date: Mon, 29 Oct 2018 17:46:20 +0100 Subject: [PATCH] Travis-CI: build with -j4 --- .travis.yml | 47 ++++------ .travis/install.sh | 107 +++++++++------------- .travis/script.sh | 161 +++++++++++++++------------------- makefiles/Makefile.cpp.mk | 35 ++++---- makefiles/Makefile.dotnet.mk | 6 +- tools/Makefile.cc.java.dotnet | 11 +-- 6 files changed, 150 insertions(+), 217 deletions(-) diff --git a/.travis.yml b/.travis.yml index 011be9ffb73..45e04d3dc14 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,89 +1,74 @@ sudo: required -language: generic +language: cpp matrix: include: # Makefile builder - os: linux dist: trusty - language: cpp compiler: gcc - env: BUILDER=make DISTRO=native LANGUAGE=cc + env: BUILDER=make LANGUAGE=cc - os: linux dist: trusty - language: cpp compiler: gcc - env: BUILDER=make DISTRO=native LANGUAGE=python2 + env: BUILDER=make LANGUAGE=python2 - os: linux dist: trusty - language: cpp compiler: gcc - env: BUILDER=make DISTRO=native LANGUAGE=python3 + env: BUILDER=make LANGUAGE=python3 - os: linux dist: trusty - language: cpp compiler: gcc - env: BUILDER=make DISTRO=native LANGUAGE=java + env: BUILDER=make LANGUAGE=java - os: linux dist: trusty - language: cpp compiler: gcc - env: BUILDER=make DISTRO=native LANGUAGE=dotnet + env: BUILDER=make LANGUAGE=dotnet - os: osx osx_image: xcode9.4 - language: cpp compiler: clang - env: BUILDER=make DISTRO=native LANGUAGE=cc + env: BUILDER=make LANGUAGE=cc - os: osx osx_image: xcode9.4 - language: cpp compiler: clang - env: BUILDER=make DISTRO=native LANGUAGE=python2 + env: BUILDER=make LANGUAGE=python2 - os: osx osx_image: xcode9.4 - language: cpp compiler: clang - env: BUILDER=make DISTRO=native LANGUAGE=python3 + env: BUILDER=make LANGUAGE=python3 - os: osx osx_image: xcode9.4 - language: cpp compiler: clang - env: BUILDER=make DISTRO=native LANGUAGE=java + env: BUILDER=make LANGUAGE=java - os: osx osx_image: xcode9.4 - language: cpp compiler: clang - env: BUILDER=make DISTRO=native LANGUAGE=dotnet + env: BUILDER=make LANGUAGE=dotnet # CMake Build Generator - os: linux dist: trusty - language: cpp compiler: gcc - env: BUILDER=cmake DISTRO=native + env: BUILDER=cmake - os: linux dist: trusty - language: cpp compiler: clang - env: BUILDER=cmake DISTRO=native + env: BUILDER=cmake - os: osx osx_image: xcode9.4 - language: cpp compiler: gcc - env: BUILDER=cmake DISTRO=native + env: BUILDER=cmake - os: osx osx_image: xcode9.4 - language: cpp compiler: clang - env: BUILDER=cmake DISTRO=native + env: BUILDER=cmake # Jobs too long allow_failures: - os: osx osx_image: xcode9.4 - language: cpp compiler: clang - env: BUILDER=make DISTRO=native LANGUAGE=dotnet + env: BUILDER=make LANGUAGE=dotnet install: - ./.travis/install.sh diff --git a/.travis/install.sh b/.travis/install.sh index 83613570629..f86015b9f4a 100755 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -40,56 +40,40 @@ function installdotnetsdk(){ ################ if [ "${BUILDER}" == make ]; then if [ "${TRAVIS_OS_NAME}" == linux ]; then - if [ "${DISTRO}" == native ]; then - sudo apt-get -qq update - sudo apt-get -yqq install autoconf libtool zlib1g-dev gawk curl lsb-release - if [ "${LANGUAGE}" != cc ]; then - installswig - fi - if [ "${LANGUAGE}" == python2 ]; then - pyenv global system 2.7; - python2.7 -m pip install -q virtualenv wheel six; - elif [ "${LANGUAGE}" == python3 ]; then - pyenv global system 3.6; - python3.6 -m pip install -q virtualenv wheel six; - elif [ "${LANGUAGE}" == dotnet ]; then - #installmono - sudo apt-get -yqq install fsharp - installdotnetsdk - fi - else - # Linux Docker Makefile build: - echo "NOT SUPPORTED" - exit 42 + sudo apt-get -qq update + sudo apt-get -yqq install autoconf libtool zlib1g-dev gawk curl lsb-release + if [ "${LANGUAGE}" != cc ]; then + installswig + fi + if [ "${LANGUAGE}" == python2 ]; then + pyenv global system 2.7 + python2.7 -m pip install -q virtualenv wheel six; + elif [ "${LANGUAGE}" == python3 ]; then + pyenv global system 3.6 + python3.6 -m pip install -q virtualenv wheel six + elif [ "${LANGUAGE}" == dotnet ]; then + installdotnetsdk fi elif [ "${TRAVIS_OS_NAME}" == osx ]; then - if [ "${DISTRO}" == native ]; then - brew update; - brew install gcc || brew link --overwrite gcc; - brew install make --with-default-names; - if [ "${LANGUAGE}" != cc ]; then - brew install swig; - fi - if [ "${LANGUAGE}" == python2 ]; then - brew outdated | grep -q python@2 && brew upgrade python@2; - python2 -m pip install -q virtualenv wheel six; - elif [ "${LANGUAGE}" == python3 ]; then - brew upgrade python; - python3 -m pip install -q virtualenv wheel six; - elif [ "${LANGUAGE}" == java ]; then - brew tap caskroom/versions; - brew cask install java8; - elif [ "${LANGUAGE}" == dotnet ]; then - #brew install mono; - # Installer changes path but won't be picked up in current terminal session - # Need to explicitly add location (see Makefile.fsharp.mk) - brew tap caskroom/cask - brew cask install dotnet-sdk; - fi - else - # MacOS Docker Makefile build: - echo "NOT SUPPORTED" - exit 42 + brew update + # see https://github.com/travis-ci/travis-ci/issues/10275 + brew install gcc || brew link --overwrite gcc + brew install make --with-default-names + if [ "${LANGUAGE}" != cc ]; then + brew install swig + fi + if [ "${LANGUAGE}" == python2 ]; then + brew outdated | grep -q python@2 && brew upgrade python@2 + python2 -m pip install -q virtualenv wheel six + elif [ "${LANGUAGE}" == python3 ]; then + brew upgrade python + python3 -m pip install -q virtualenv wheel six + elif [ "${LANGUAGE}" == java ]; then + brew tap caskroom/versions + brew cask install java8 + elif [ "${LANGUAGE}" == dotnet ]; then + brew tap caskroom/cask + brew cask install dotnet-sdk fi fi fi @@ -99,25 +83,14 @@ fi ############# if [ "${BUILDER}" == cmake ]; then if [ "${TRAVIS_OS_NAME}" == linux ]; then - if [ "${DISTRO}" == native ]; then - installswig - pyenv global system 3.6; - python3.6 -m pip install -q virtualenv wheel six; - else - # Linux Docker CMake build: - echo "NOT SUPPORTED" - exit 42 - fi + installswig + pyenv global system 3.6 + python3.6 -m pip install -q virtualenv wheel six elif [ "${TRAVIS_OS_NAME}" == osx ]; then - if [ "${DISTRO}" == native ]; then - brew update; - brew install gcc || brew link --overwrite gcc; - brew install swig; - brew upgrade python; - else - # MacOS Docker CMake build: - echo "NOT SUPPORTED" - exit 42 - fi + brew update + # see https://github.com/travis-ci/travis-ci/issues/10275 + brew install gcc || brew link --overwrite gcc + brew install swig + brew upgrade python fi fi diff --git a/.travis/script.sh b/.travis/script.sh index 6af3827b36c..58a537808da 100755 --- a/.travis/script.sh +++ b/.travis/script.sh @@ -24,7 +24,6 @@ function checkenv() { elif [ "${LANGUAGE}" == java ]; then java -version elif [ "${LANGUAGE}" == dotnet ]; then - #mono --version dotnet --info fi } @@ -33,100 +32,80 @@ function checkenv() { ## MAKEFILE ## ################ if [ "${BUILDER}" == make ];then - if [ "${TRAVIS_OS_NAME}" == linux ];then - if [ "${DISTRO}" == native ];then - if [ "${LANGUAGE}" != cc ]; then - export PATH="${HOME}"/swig/bin:"${PATH}" - fi - checkenv - if [ "${LANGUAGE}" == cc ]; then - make detect - elif [ "${LANGUAGE}" == python2 ]; then - make detect UNIX_PYTHON_VER=2.7 - elif [ "${LANGUAGE}" == python3 ]; then - make detect UNIX_PYTHON_VER=3.6 - elif [ "${LANGUAGE}" == java ]; then - make detect JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 - elif [ "${LANGUAGE}" == dotnet ] ; then - make detect - fi - cat Makefile.local - make third_party - if [ "${LANGUAGE}" == python2 ] || [ "${LANGUAGE}" == python3 ]; then - make python - make test_python - else - make "${LANGUAGE}" - make test_"${LANGUAGE}" - fi - if [ "${LANGUAGE}" == cc ]; then - make test_fz - fi - else - # Linux Docker Makefile build: - echo "NOT SUPPORTED" - fi - elif [ "${TRAVIS_OS_NAME}" == osx ];then - if [ "${DISTRO}" == native ];then - if [ "${LANGUAGE}" == dotnet ]; then - # Installer changes path but won't be picked up in current terminal session - # Need to explicitly add location - export PATH=/usr/local/share/dotnet:"${PATH}" - fi - checkenv - if [ "${LANGUAGE}" == cc ]; then - make detect - elif [ "${LANGUAGE}" == python2 ]; then - make detect UNIX_PYTHON_VER=2.7 - elif [ "${LANGUAGE}" == python3 ]; then - make detect UNIX_PYTHON_VER=3.7 - elif [ "${LANGUAGE}" == java ] || [ "${LANGUAGE}" == dotnet ] ; then - make detect - fi - cat Makefile.local - make third_party - if [ "${LANGUAGE}" == python2 ] || [ "${LANGUAGE}" == python3 ]; then - make python - make test_python - else - make "${LANGUAGE}" - make test_"${LANGUAGE}" - fi - if [ "${LANGUAGE}" == cc ]; then - make test_fz - fi - else - # MacOS Docker Makefile build: - echo "NOT SUPPORTED" - fi - fi + if [ "${TRAVIS_OS_NAME}" == linux ];then + if [ "${LANGUAGE}" != cc ]; then + export PATH="${HOME}"/swig/bin:"${PATH}" + fi + checkenv + if [ "${LANGUAGE}" == cc ]; then + make detect + elif [ "${LANGUAGE}" == python2 ]; then + make detect UNIX_PYTHON_VER=2.7 + elif [ "${LANGUAGE}" == python3 ]; then + make detect UNIX_PYTHON_VER=3.6 + elif [ "${LANGUAGE}" == java ]; then + make detect JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 + elif [ "${LANGUAGE}" == dotnet ] ; then + make detect + fi + cat Makefile.local + make third_party --jobs=4 + if [ "${LANGUAGE}" == python2 ] || [ "${LANGUAGE}" == python3 ]; then + make python --jobs=4 + make test_python --jobs=4 + else + make "${LANGUAGE}" --jobs=4 + make test_"${LANGUAGE}" --jobs=4 + fi + if [ "${LANGUAGE}" == cc ]; then + make test_fz --jobs=2 + fi + elif [ "${TRAVIS_OS_NAME}" == osx ];then + if [ "${LANGUAGE}" == dotnet ]; then + # Installer changes path but won't be picked up in current terminal session + # Need to explicitly add location + export PATH=/usr/local/share/dotnet:"${PATH}" + fi + checkenv + if [ "${LANGUAGE}" == cc ]; then + make detect + elif [ "${LANGUAGE}" == python2 ]; then + make detect UNIX_PYTHON_VER=2.7 + elif [ "${LANGUAGE}" == python3 ]; then + make detect UNIX_PYTHON_VER=3.7 + elif [ "${LANGUAGE}" == java ] || [ "${LANGUAGE}" == dotnet ] ; then + make detect + fi + cat Makefile.local + make third_party --jobs=4 + if [ "${LANGUAGE}" == python2 ] || [ "${LANGUAGE}" == python3 ]; then + make python --jobs=4 + make test_python --jobs=4 + else + make "${LANGUAGE}" --jobs=4 + make test_"${LANGUAGE}" --jobs=4 + fi + if [ "${LANGUAGE}" == cc ]; then + make test_fz --jobs=2 + fi + fi fi ############# ## CMAKE ## ############# if [ "${BUILDER}" == cmake ];then - if [ "${TRAVIS_OS_NAME}" == linux ];then - if [ "${DISTRO}" == native ];then - export PATH="${HOME}"/swig/bin:"${PATH}" - pyenv global system 3.6 - checkenv - cmake -H. -Bbuild - cmake --build build --target all - cmake --build build --target test -- CTEST_OUTPUT_ON_FAILURE=1 - else - # Linux Docker CMake build: - echo "NOT SUPPORTED" - fi - elif [ "${TRAVIS_OS_NAME}" == osx ];then - if [ "${DISTRO}" == native ];then - checkenv - cmake -H. -Bbuild - cmake --build build --target all - cmake --build build --target test -- CTEST_OUTPUT_ON_FAILURE=1 - else - # MacOS Docker CMake build: - echo "NOT SUPPORTED" - fi - fi + if [ "${TRAVIS_OS_NAME}" == linux ];then + export PATH="${HOME}"/swig/bin:"${PATH}" + pyenv global system 3.6 + checkenv + cmake -H. -Bbuild + cmake --build build --target all -- --jobs=4 + cmake --build build --target test -- CTEST_OUTPUT_ON_FAILURE=1 + elif [ "${TRAVIS_OS_NAME}" == osx ];then + checkenv + cmake -H. -Bbuild + cmake --build build --target all -- --jobs=4 + cmake --build build --target test -- CTEST_OUTPUT_ON_FAILURE=1 + fi fi diff --git a/makefiles/Makefile.cpp.mk b/makefiles/Makefile.cpp.mk index 1ac0b99af6a..ea01093626c 100755 --- a/makefiles/Makefile.cpp.mk +++ b/makefiles/Makefile.cpp.mk @@ -296,18 +296,6 @@ endif ################################## ## CPP Tests/Examples/Samples ## ################################## -$(OBJ_DIR)/%.$O: $(TEST_DIR)/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR) - $(CCC) $(CFLAGS) -c $(TEST_PATH)$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O - -$(OBJ_DIR)/%.$O: $(CC_EX_DIR)/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR) - $(CCC) $(CFLAGS) -c $(CC_EX_PATH)$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O - -$(OBJ_DIR)/%.$O: ortools/sat/samples/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR) - $(CCC) $(CFLAGS) -c ortools$Ssat$Ssamples$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O - -$(BIN_DIR)/%$E: $(OBJ_DIR)/%.$O $(OR_TOOLS_LIBS) | $(BIN_DIR) - $(CCC) $(CFLAGS) $(OBJ_DIR)$S$*.$O $(OR_TOOLS_LNK) $(OR_TOOLS_LDFLAGS) $(EXE_OUT)$(BIN_DIR)$S$*$E - # Specific libraries for examples # CVRP(TW) common library CVRPTW_LIBS = $(LIB_DIR)/$(LIB_PREFIX)cvrptw_lib.$L @@ -329,7 +317,7 @@ $(CVRPTW_OBJS): \ | $(OBJ_DIR) $(CCC) $(CFLAGS) -c $(CC_EX_PATH)$Scvrptw_lib.cc $(OBJ_OUT)$(OBJ_DIR)$Scvrptw_lib.$O -$(CVRPTW_LIBS): $(OR_TOOLS_LIBS) $(CVRPTW_OBJS) | $(LIB_DIR) +$(CVRPTW_LIBS): $(CVRPTW_OBJS) $(OR_TOOLS_LIBS) | $(LIB_DIR) $(LINK_CMD) \ $(CVRPTW_LDFLAGS) \ $(LD_OUT)$(LIB_DIR)$S$(LIB_PREFIX)cvrptw_lib.$L \ @@ -368,10 +356,10 @@ $(DIMACS_LIBS): $(OR_TOOLS_LIBS) $(DIMACS_OBJS) | $(LIB_DIR) $(OR_TOOLS_LDFLAGS) # DIMACS examples -$(OBJ_DIR)/dimacs_assignment.$O: $(CC_EX_DIR)/dimacs_assignment.cc $(DIMACS_DEPS) | $(OBJ_DIR) +$(OBJ_DIR)/dimacs_assignment.$O: $(CC_EX_DIR)/dimacs_assignment.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR) $(CCC) $(CFLAGS) -c $(CC_EX_PATH)$Sdimacs_assignment.cc $(OBJ_OUT)$(OBJ_DIR)$Sdimacs_assignment.$O -$(BIN_DIR)/dimacs_assignment$E: $(DIMACS_LIBS) $(OR_TOOLS_LIBS) $(OBJ_DIR)/dimacs_assignment.$O | $(BIN_DIR) +$(BIN_DIR)/dimacs_assignment$E: $(OBJ_DIR)/dimacs_assignment.$O $(DIMACS_LIBS) | $(BIN_DIR) $(CCC) $(CFLAGS) $(OBJ_DIR)$Sdimacs_assignment.$O $(DIMACS_LNK) $(OR_TOOLS_LDFLAGS) $(EXE_OUT)$(BIN_DIR)$Sdimacs_assignment$E # Frequency Assignment Problem (FAP) challenge problem format library @@ -403,12 +391,25 @@ $(FAP_LIBS): $(OR_TOOLS_LIBS) $(FAP_OBJS) | $(LIB_DIR) $(OR_TOOLS_LDFLAGS) # FAP examples -$(OBJ_DIR)/frequency_assignment_problem.$O: $(CC_EX_DIR)/frequency_assignment_problem.cc $(FAP_DEPS) | $(OBJ_DIR) +$(OBJ_DIR)/frequency_assignment_problem.$O: $(CC_EX_DIR)/frequency_assignment_problem.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR) $(CCC) $(CFLAGS) -c $(CC_EX_PATH)$Sfrequency_assignment_problem.cc $(OBJ_OUT)$(OBJ_DIR)$Sfrequency_assignment_problem.$O -$(BIN_DIR)/frequency_assignment_problem$E: $(FAP_LIBS) $(OR_TOOLS_LIBS) $(OBJ_DIR)/frequency_assignment_problem.$O | $(BIN_DIR) +$(BIN_DIR)/frequency_assignment_problem$E: $(OBJ_DIR)/frequency_assignment_problem.$O $(FAP_LIBS) | $(BIN_DIR) $(CCC) $(CFLAGS) $(OBJ_DIR)/frequency_assignment_problem.$O $(FAP_LNK) $(OR_TOOLS_LDFLAGS) $(EXE_OUT)$(BIN_DIR)$Sfrequency_assignment_problem$E +# Generic Command +$(OBJ_DIR)/%.$O: $(TEST_DIR)/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR) + $(CCC) $(CFLAGS) -c $(TEST_PATH)$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O + +$(OBJ_DIR)/%.$O: $(CC_EX_DIR)/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR) + $(CCC) $(CFLAGS) -c $(CC_EX_PATH)$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O + +$(OBJ_DIR)/%.$O: ortools/sat/samples/%.cc $(OR_TOOLS_LIBS) | $(OBJ_DIR) + $(CCC) $(CFLAGS) -c ortools$Ssat$Ssamples$S$*.cc $(OBJ_OUT)$(OBJ_DIR)$S$*.$O + +$(BIN_DIR)/%$E: $(OBJ_DIR)/%.$O $(OR_TOOLS_LIBS) | $(BIN_DIR) + $(CCC) $(CFLAGS) $(OBJ_DIR)$S$*.$O $(OR_TOOLS_LNK) $(OR_TOOLS_LDFLAGS) $(EXE_OUT)$(BIN_DIR)$S$*$E + rcc_%: $(BIN_DIR)/%$E FORCE $(BIN_DIR)$S$*$E $(ARGS) diff --git a/makefiles/Makefile.dotnet.mk b/makefiles/Makefile.dotnet.mk index dd21d1c7978..6f65cc69b3b 100644 --- a/makefiles/Makefile.dotnet.mk +++ b/makefiles/Makefile.dotnet.mk @@ -414,8 +414,7 @@ build: $(SOURCE) $(SOURCE)proj $(DOTNET_ORTOOLS_NUPKG) .PHONY: run # Run a .Net C# program. run: build - "$(DOTNET_BIN)" --no-build \ - --project $(SOURCE_PATH)proj -- $(ARGS) + "$(DOTNET_BIN)" run --no-build --project $(SOURCE_PATH)proj -- $(ARGS) endif # .Net F# @@ -430,8 +429,7 @@ build: $(SOURCE) $(SOURCE)proj $(DOTNET_ORTOOLS_FSHARP_NUPKG) .PHONY: run # Run a .Net F# program. run: build - "$(DOTNET_BIN)" --no-build \ - --project $(SOURCE_PATH)proj -- $(ARGS) + "$(DOTNET_BIN)" run --no-build --project $(SOURCE_PATH)proj -- $(ARGS) endif ############################# diff --git a/tools/Makefile.cc.java.dotnet b/tools/Makefile.cc.java.dotnet index ad41b9d9880..2b636ee2dbf 100644 --- a/tools/Makefile.cc.java.dotnet +++ b/tools/Makefile.cc.java.dotnet @@ -202,7 +202,7 @@ endif SOURCE_SUFFIX = $(suffix $(SOURCE)) # will contain “/any/path/foo.cc” on unix and “\\any\\path\\foo.cc” on windows SOURCE_PATH = $(subst /,$S,$(SOURCE)) -SOURCE_NAME= $(basename $(notdir $(SOURCE))) +SOURCE_NAME = $(basename $(notdir $(SOURCE))) ifeq ($(SOURCE),) # Those rules will be used if SOURCE is empty .PHONY: build run build run: @@ -450,8 +450,7 @@ test_java: detect_java ################### ifeq ($(SOURCE_SUFFIX),.java) # Those rules will be used if SOURCE contain a .java file $(CLASS_DIR)/$(SOURCE_NAME): $(SOURCE) | $(CLASS_DIR) - -$(DELREC) $(CLASS_DIR)$S$(SOURCE_NAME) - -$(MKDIR_P) $(CLASS_DIR)$S$(SOURCE_NAME) + -$(MKDIR) $(CLASS_DIR)$S$(SOURCE_NAME) "$(JAVAC_BIN)" -d $(CLASS_DIR)$S$(SOURCE_NAME) \ -cp $(LIB_DIR)$Scom.google.ortools.jar$(CPSEP)$(LIB_DIR)$Sprotobuf.jar \ $(SOURCE_PATH) @@ -668,8 +667,7 @@ build: $(SOURCE) $(SOURCE)proj .PHONY: run # Run a .Net C# program. run: build - "$(DOTNET_BIN)" --no-build \ - --project $(SOURCE_PATH)proj -- $(ARGS) + "$(DOTNET_BIN)" run --no-build --project $(SOURCE_PATH)proj -- $(ARGS) endif # ifeq ($(SOURCE_SUFFIX),.cs) # .Net F# @@ -684,8 +682,7 @@ build: $(SOURCE) $(SOURCE)proj .PHONY: run # Run a .Net F# program. run: build - "$(DOTNET_BIN)" --no-build \ - --project $(SOURCE_PATH)proj -- $(ARGS) + "$(DOTNET_BIN)" run --no-build --project $(SOURCE_PATH)proj -- $(ARGS) endif # ifeq ($(SOURCE_SUFFIX),.fs) endif # ifndef DOTNET_BIN