SIGN IN SIGN UP
google / or-tools UNCLAIMED

Google's Operations Research tools:

0 0 61 C++
# Copyright 2010-2025 Google LLC
2022-06-20 18:27:09 +02:00
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ---------- Java support ----------
.PHONY: help_java # Generate list of Java targets with descriptions.
help_java:
@echo Use one of the following Java targets:
ifeq ($(PLATFORM),WIN64)
@$(GREP) "^.PHONY: .* #" $(CURDIR)/makefiles/Makefile.java.mk | $(SED) "s/\.PHONY: \(.*\) # \(.*\)/\1\t\2/"
@echo off & echo(
else
@$(GREP) "^.PHONY: .* #" $(CURDIR)/makefiles/Makefile.java.mk | $(SED) "s/\.PHONY: \(.*\) # \(.*\)/\1\t\2/" | expand -t24
@echo
endif
2022-04-08 11:33:18 +02:00
# Main targets.
.PHONY: detect_java # Show variables used to build Java OR-Tools.
.PHONY: java_runtime # Build Java OR-Tools runtime.
.PHONY: java # Build Java OR-Tools.
.PHONY: check_java # Quick check only running Java OR-Tools samples.
.PHONY: test_java # Test Java OR-Tools using various examples.
.PHONY: archive_java # Generate OR-Tools's maven archive.
.PHONY: clean_java # Clean Java output from previous build.
ifeq ($(HAS_JAVA),OFF)
java_runtime: java
java:
@echo JAVA_HOME = $(JAVA_HOME)
@echo JAVAC_BIN = $(JAVAC_BIN)
@echo JAR_BIN = $(JAR_BIN)
@echo JAVA_BIN = $(JAVA_BIN)
@echo MVN_BIN = $(MVN_BIN)
$(warning Either JAVA support was turned off, or the makefile cannot\
find 'java' or 'maven' command which is needed for build. \
Please make sure it is installed and in system path. \
Or turn java support ON.)
check_java: java
test_java: java
package_java: java
else # HAS_JAVA=ON
JAVA_BUILD_PATH := $(BUILD_DIR)$Sjava
TEMP_JAVA_DIR := temp_java
2020-09-07 17:21:35 +02:00
JAVA_ORTOOLS_PACKAGE := com.google.ortools
2020-09-02 22:32:13 +02:00
# OR Tools unique library.
java:
$(MAKE) third_party BUILD_JAVA=ON
2022-03-30 09:35:51 +02:00
cmake --build $(BUILD_DIR) --target install --config $(BUILD_TYPE) -j $(JOBS) -v
2020-09-07 17:21:35 +02:00
# Detect RuntimeIDentifier
ifeq ($(OS),Windows)
JAVA_NATIVE_IDENTIFIER := win32-x86-64
2020-09-07 17:21:35 +02:00
else
ifeq ($(OS),Linux)
ifeq ($(CPU),aarch64)
JAVA_NATIVE_IDENTIFIER := linux-aarch64
else
JAVA_NATIVE_IDENTIFIER := linux-x86-64
endif
2020-09-07 17:21:35 +02:00
else
ifeq ($(OS),Darwin)
ifeq ($(CPU),arm64)
JAVA_NATIVE_IDENTIFIER := darwin-aarch64
else
JAVA_NATIVE_IDENTIFIER := darwin-x86-64
endif
2020-09-07 17:21:35 +02:00
else
$(error OS unknown !)
endif
endif
endif
# All libraries and dependencies
JAVA_ORTOOLS_NATIVE_PROJECT := ortools-$(JAVA_NATIVE_IDENTIFIER)
JAVA_ORTOOLS_PROJECT := ortools-java
JAVA_NATIVE_PATH := $(TEMP_JAVA_DIR)$S$(JAVA_ORTOOLS_NATIVE_PROJECT)$Ssrc$Smain
JAVA_PATH := $(TEMP_JAVA_DIR)$S$(JAVA_ORTOOLS_PROJECT)$Ssrc$Smain
$(TEMP_JAVA_DIR):
$(MKDIR) $(TEMP_JAVA_DIR)
2020-09-07 17:21:35 +02:00
2022-04-08 11:33:18 +02:00
.PHONY: package_java
2022-03-30 09:35:51 +02:00
package_java: java
2022-02-21 16:44:53 +01:00
-$(DEL) *.jar
2022-03-30 09:35:51 +02:00
$(COPY) $(JAVA_BUILD_PATH)$Sortools-java$Starget$S*.jar .
$(COPY) $(JAVA_BUILD_PATH)$Sortools-$(JAVA_NATIVE_IDENTIFIER)$Starget$S*.jar .
###################
## Java SOURCE ##
###################
ifeq ($(SOURCE_SUFFIX),.java) # Those rules will be used if SOURCE contain a .java file
SOURCE_PROJECT_DIR := $(SOURCE)
SOURCE_PROJECT_DIR := $(subst /$(SOURCE_NAME).java,, $(SOURCE_PROJECT_DIR))
SOURCE_PROJECT_PATH = $(subst /,$S,$(SOURCE_PROJECT_DIR))
.PHONY: build # Build a Java program.
build: $(SOURCE) #$(SOURCE_PROJECT_DIR)/pom.xml java
$(warning This is not supported.\
Prefer to place your java file in a samples/ or examples/ java directory\
and call "make rjava_$(SOURCE_NAME)" target instead.)
# cd $(SOURCE_PROJECT_PATH) && "$(MVN_BIN)" compile -b $(ARGS)
# cd $(SOURCE_PROJECT_PATH) && "$(MVN_BIN)" pack -c Release
.PHONY: run # Run a Java program.
run: build
endif
2022-02-21 16:38:34 +01:00
2022-03-30 09:35:51 +02:00
###################################
## Java Samples/Examples/Tests ##
###################################
JAVA_SRC_DIR := src/main/java/com/google/ortools
JAVA_SRC_PATH := $(subst /,$S,$(JAVA_SRC_DIR))
JAVA_TEST_DIR := src/test/java/com/google/ortools
JAVA_TEST_PATH := $(subst /,$S,$(JAVA_TEST_DIR))
2022-03-30 09:35:51 +02:00
# Samples
define java-sample-target =
2022-03-30 09:35:51 +02:00
$(TEMP_JAVA_DIR)/$1: | $(TEMP_JAVA_DIR)
-$(MKDIR) $(TEMP_JAVA_DIR)$S$1
$(TEMP_JAVA_DIR)/$1/%: \
$(SRC_DIR)/ortools/$1/samples/%.java \
| $(TEMP_JAVA_DIR)/$1
-$(MKDIR) $(TEMP_JAVA_DIR)$S$1$S$$*
$(TEMP_JAVA_DIR)/$1/%/pom.xml: \
2022-09-28 15:50:07 +02:00
$(SRC_DIR)/ortools/$1/samples/%.java \
2022-03-30 09:35:51 +02:00
${SRC_DIR}/ortools/java/pom-sample.xml.in \
| $(TEMP_JAVA_DIR)/$1/%
$(SED) -e "s/@JAVA_PACKAGE@/$(JAVA_ORTOOLS_PACKAGE)/" \
ortools$Sjava$Spom-sample.xml.in \
> $(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@JAVA_SAMPLE_PROJECT@/$$*/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@JAVA_MAIN_CLASS@/com.google.ortools.$2.samples.$$*/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@PROJECT_VERSION_MAJOR@/$(OR_TOOLS_MAJOR)/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@PROJECT_VERSION_MINOR@/$(OR_TOOLS_MINOR)/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@PROJECT_VERSION_PATCH@/$(OR_TOOLS_PATCH)/' \
2022-03-30 09:35:51 +02:00
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@JAVA_PROJECT@/$(JAVA_ORTOOLS_PROJECT)/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(TEMP_JAVA_DIR)/$1/%/$(JAVA_SRC_DIR)/%.java: \
$(SRC_DIR)/ortools/$1/samples/%.java \
| $(TEMP_JAVA_DIR)/$1/%
$(MKDIR_P) $(TEMP_JAVA_DIR)$S$1$S$$*$S$(JAVA_SRC_PATH)
$(COPY) $(SRC_DIR)$Sortools$S$1$Ssamples$S$$*.java \
$(TEMP_JAVA_DIR)$S$1$S$$*$S$(JAVA_SRC_PATH)
rjava_%: \
2022-03-30 09:35:51 +02:00
java \
2022-10-19 17:51:20 +02:00
$(SRC_DIR)/ortools/$1/samples/%.java \
2022-03-30 09:35:51 +02:00
$(TEMP_JAVA_DIR)/$1/%/pom.xml \
$(TEMP_JAVA_DIR)/$1/%/$(JAVA_SRC_DIR)/%.java \
FORCE
2022-03-30 09:35:51 +02:00
cd $(TEMP_JAVA_DIR)$S$1$S$$* && "$(MVN_BIN)" compile -B
cd $(TEMP_JAVA_DIR)$S$1$S$$* && "$(MVN_BIN)" exec:java $(ARGS)
endef
JAVA_SAMPLES := init algorithms graph constraint_solver linear_solver routing sat util
$(foreach sample,$(JAVA_SAMPLES),$(eval $(call java-sample-target,$(sample),$(subst _,,$(sample)))))
2022-03-30 09:35:51 +02:00
# Examples
define java-example-target =
2022-03-30 09:35:51 +02:00
$(TEMP_JAVA_DIR)/$1: | $(TEMP_JAVA_DIR)
-$(MKDIR) $(TEMP_JAVA_DIR)$S$1
$(TEMP_JAVA_DIR)/$1/%: \
$(SRC_DIR)/examples/$1/%.java \
| $(TEMP_JAVA_DIR)/$1
-$(MKDIR) $(TEMP_JAVA_DIR)$S$1$S$$*
$(TEMP_JAVA_DIR)/$1/%/pom.xml: \
2022-09-28 15:50:07 +02:00
$(SRC_DIR)/examples/$1/%.java \
2022-03-30 09:35:51 +02:00
${SRC_DIR}/ortools/java/pom-sample.xml.in \
| $(TEMP_JAVA_DIR)/$1/%
$(SED) -e "s/@JAVA_PACKAGE@/$(JAVA_ORTOOLS_PACKAGE)/" \
ortools$Sjava$Spom-sample.xml.in \
> $(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@JAVA_SAMPLE_PROJECT@/$$*/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@JAVA_MAIN_CLASS@/com.google.ortools.$1.$$*/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@PROJECT_VERSION_MAJOR@/$(OR_TOOLS_MAJOR)/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@PROJECT_VERSION_MINOR@/$(OR_TOOLS_MINOR)/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@PROJECT_VERSION_PATCH@/$(OR_TOOLS_PATCH)/' \
2022-03-30 09:35:51 +02:00
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@JAVA_PROJECT@/$(JAVA_ORTOOLS_PROJECT)/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(TEMP_JAVA_DIR)/$1/%/$(JAVA_SRC_DIR)/%.java: \
$(SRC_DIR)/examples/$1/%.java \
| $(TEMP_JAVA_DIR)/$1/%
$(MKDIR_P) $(TEMP_JAVA_DIR)$S$1$S$$*$S$(JAVA_SRC_PATH)
$(COPY) $(SRC_DIR)$Sexamples$S$1$S$$*.java \
$(TEMP_JAVA_DIR)$S$1$S$$*$S$(JAVA_SRC_PATH)
rjava_%: \
2021-04-19 15:05:13 +02:00
java \
2022-10-19 17:51:20 +02:00
$(SRC_DIR)/examples/$1/%.java \
2022-03-30 09:35:51 +02:00
$(TEMP_JAVA_DIR)/$1/%/pom.xml \
$(TEMP_JAVA_DIR)/$1/%/$(JAVA_SRC_DIR)/%.java \
FORCE
2022-03-30 09:35:51 +02:00
cd $(TEMP_JAVA_DIR)$S$1$S$$* && "$(MVN_BIN)" compile -B
cd $(TEMP_JAVA_DIR)$S$1$S$$* && "$(MVN_BIN)" exec:java $(ARGS)
endef
2022-03-30 09:35:51 +02:00
JAVA_EXAMPLES := contrib java
$(foreach example,$(JAVA_EXAMPLES),$(eval $(call java-example-target,$(example))))
2022-03-30 09:35:51 +02:00
# Tests
2022-09-28 15:50:07 +02:00
define java-test-target =
$(TEMP_JAVA_DIR)/$1/%: \
$(SRC_DIR)/ortools/$1/java/%.java \
| $(TEMP_JAVA_DIR)/$1
-$(MKDIR) $(TEMP_JAVA_DIR)$S$1$S$$*
2020-09-14 23:49:23 +02:00
2022-09-28 15:50:07 +02:00
$(TEMP_JAVA_DIR)/$1/%/pom.xml: \
$(SRC_DIR)/ortools/$1/java/%.java \
2020-09-14 23:49:23 +02:00
${SRC_DIR}/ortools/java/pom-test.xml.in \
2022-09-28 15:50:07 +02:00
| $(TEMP_JAVA_DIR)/$1/%
2020-09-14 23:49:23 +02:00
$(SED) -e "s/@JAVA_PACKAGE@/$(JAVA_ORTOOLS_PACKAGE)/" \
ortools$Sjava$Spom-test.xml.in \
2022-09-28 15:50:07 +02:00
> $(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@JAVA_TEST_PROJECT@/$$*/' \
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
2020-09-14 23:49:23 +02:00
$(SED) -i -e 's/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/' \
2022-09-28 15:50:07 +02:00
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
2020-10-02 08:48:40 +02:00
$(SED) -i -e 's/@PROJECT_VERSION_MAJOR@/$(OR_TOOLS_MAJOR)/' \
2022-09-28 15:50:07 +02:00
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
2020-10-02 08:48:40 +02:00
$(SED) -i -e 's/@PROJECT_VERSION_MINOR@/$(OR_TOOLS_MINOR)/' \
2022-09-28 15:50:07 +02:00
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
$(SED) -i -e 's/@PROJECT_VERSION_PATCH@/$(OR_TOOLS_PATCH)/' \
2022-09-28 15:50:07 +02:00
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
2020-09-14 23:49:23 +02:00
$(SED) -i -e 's/@JAVA_PROJECT@/$(JAVA_ORTOOLS_PROJECT)/' \
2022-09-28 15:50:07 +02:00
$(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml
2020-09-14 23:49:23 +02:00
2022-09-28 15:50:07 +02:00
$(TEMP_JAVA_DIR)/$1/%/$(JAVA_TEST_DIR)/%.java: \
$(SRC_DIR)/ortools/$1/java/%.java \
| $(TEMP_JAVA_DIR)/$1/%
$(MKDIR_P) $(TEMP_JAVA_DIR)$S$1$S$$*$S$(JAVA_TEST_PATH)
$(COPY) $(SRC_DIR)$Sortools$S$1$Sjava$S$$*.java \
$(TEMP_JAVA_DIR)$S$1$S$$*$S$(JAVA_TEST_PATH)
2020-09-14 23:49:23 +02:00
rjava_%: \
2021-04-19 15:05:13 +02:00
java \
2022-10-19 17:51:20 +02:00
$(SRC_DIR)/ortools/$1/java/%.java \
2022-09-28 15:50:07 +02:00
$(TEMP_JAVA_DIR)/$1/%/pom.xml \
$(TEMP_JAVA_DIR)/$1/%/$(JAVA_TEST_DIR)/%.java \
2020-09-14 23:49:23 +02:00
FORCE
2022-09-28 15:50:07 +02:00
cd $(TEMP_JAVA_DIR)$S$1$S$$* && "$(MVN_BIN)" compile -B
cd $(TEMP_JAVA_DIR)$S$1$S$$* && "$(MVN_BIN)" test $(ARGS)
endef
JAVA_TESTS := init algorithms graph constraint_solver linear_solver routing sat util
2022-09-28 15:50:07 +02:00
$(foreach test,$(JAVA_TESTS),$(eval $(call java-test-target,$(test))))
2020-09-14 23:49:23 +02:00
2022-03-30 09:35:51 +02:00
####################
## Test targets ##
####################
2020-09-14 23:49:23 +02:00
.PHONY: test_java_algorithms_samples # Build and Run all Java Algorithms Samples (located in ortools/algorithms/samples)
test_java_algorithms_samples: \
rjava_Knapsack
.PHONY: test_java_constraint_solver_samples # Build and Run all Java CP Samples (located in ortools/constraint_solver/samples)
test_java_constraint_solver_samples: \
rjava_SimpleCpProgram \
rjava_SimpleRoutingProgram \
rjava_Tsp \
rjava_TspCities \
rjava_TspCircuitBoard \
rjava_TspDistanceMatrix \
rjava_Vrp \
2021-03-26 12:10:57 +01:00
rjava_VrpBreaks \
2020-09-14 23:49:23 +02:00
rjava_VrpCapacity \
rjava_VrpDropNodes \
rjava_VrpGlobalSpan \
rjava_VrpInitialRoutes \
rjava_VrpPickupDelivery \
rjava_VrpPickupDeliveryFifo \
rjava_VrpPickupDeliveryLifo \
rjava_VrpResources \
rjava_VrpSolutionCallback \
2020-09-14 23:49:23 +02:00
rjava_VrpStartsEnds \
rjava_VrpTimeWindows \
rjava_VrpWithTimeLimit
.PHONY: test_java_graph_samples # Build and Run all Java Graph Samples (located in ortools/graph/samples)
test_java_graph_samples: \
2021-12-22 11:05:53 +01:00
rjava_AssignmentLinearSumAssignment \
rjava_AssignmentMinFlow \
rjava_BalanceMinFlow \
rjava_SimpleMaxFlowProgram \
rjava_SimpleMinCostFlowProgram
2020-09-14 23:49:23 +02:00
.PHONY: test_java_linear_solver_samples # Build and Run all Java LP Samples (located in ortools/linear_solver/samples)
test_java_linear_solver_samples: \
rjava_AssignmentMip \
2020-12-07 14:57:42 +01:00
rjava_BasicExample \
2020-09-14 23:49:23 +02:00
rjava_BinPackingMip \
rjava_LinearProgrammingExample \
rjava_MipVarArray \
rjava_MultipleKnapsackMip \
rjava_SimpleLpProgram \
rjava_SimpleMipProgram \
rjava_StiglerDiet
2020-09-14 23:49:23 +02:00
2022-04-03 23:22:02 +02:00
.PHONY: test_java_model_builder_samples # Build and Run all Java MB Samples (located in ortools/model_builder/samples)
test_java_model_builder_samples: \
rjava_SimpleLpProgramMb \
rjava_SimpleMipProgramMb
2020-09-14 23:49:23 +02:00
.PHONY: test_java_sat_samples # Build and Run all Java SAT Samples (located in ortools/sat/samples)
test_java_sat_samples: \
2022-10-17 16:11:22 +02:00
rjava_AssignmentGroupsSat \
2020-09-14 23:49:23 +02:00
rjava_AssignmentSat \
2022-10-17 16:11:22 +02:00
rjava_AssignmentTaskSizesSat \
rjava_AssignmentTeamsSat \
2021-02-04 14:21:52 +01:00
rjava_AssumptionsSampleSat \
2020-09-14 23:49:23 +02:00
rjava_BinPackingProblemSat \
rjava_BoolOrSampleSat \
rjava_ChannelingSampleSat \
rjava_CpIsFunSat \
2022-10-17 16:11:22 +02:00
rjava_CpSatExample \
2020-09-14 23:49:23 +02:00
rjava_EarlinessTardinessCostSampleSat \
rjava_IntervalSampleSat \
rjava_LiteralSampleSat \
2022-10-17 16:11:22 +02:00
rjava_MinimalJobshopSat \
rjava_MultipleKnapsackSat \
rjava_NQueensSat \
2020-09-14 23:49:23 +02:00
rjava_NoOverlapSampleSat \
2022-10-17 16:11:22 +02:00
rjava_NonLinearSat \
rjava_NursesSat \
2020-09-14 23:49:23 +02:00
rjava_OptionalIntervalSampleSat \
rjava_RabbitsAndPheasantsSat \
rjava_RankingSampleSat \
rjava_ReifiedSampleSat \
2022-10-17 16:11:22 +02:00
rjava_ScheduleRequestsSat \
2020-09-14 23:49:23 +02:00
rjava_SearchForAllSolutionsSampleSat \
rjava_SimpleSatProgram \
2022-10-17 16:11:22 +02:00
rjava_SolutionHintingSampleSat \
2020-09-14 23:49:23 +02:00
rjava_SolveAndPrintIntermediateSolutionsSampleSat \
rjava_SolveWithTimeLimitSampleSat \
rjava_StepFunctionSampleSat \
rjava_StopAfterNSolutionsSampleSat
.PHONY: check_java
check_java: \
2020-09-14 23:49:23 +02:00
test_java_algorithms_samples \
test_java_constraint_solver_samples \
test_java_graph_samples \
test_java_linear_solver_samples \
2022-04-03 23:22:02 +02:00
test_java_model_builder_samples \
2020-09-14 23:49:23 +02:00
test_java_sat_samples \
rjava_LinearProgramming \
rjava_IntegerProgramming
2026-01-07 16:14:45 +01:00
.PHONY: test_java_tests # Build and Run all Java Tests (located in ortools/*/java)
2020-09-14 23:49:23 +02:00
test_java_tests: \
2022-09-28 15:50:07 +02:00
rjava_InitTest \
2021-08-31 11:58:46 +02:00
rjava_KnapsackSolverTest \
rjava_FlowTest \
2020-09-14 23:49:23 +02:00
rjava_LinearSolverTest \
2022-09-28 15:50:07 +02:00
rjava_ModelBuilderTest \
2020-09-14 23:49:23 +02:00
rjava_ConstraintSolverTest \
rjava_RoutingSolverTest \
2021-08-31 11:58:46 +02:00
rjava_CpModelTest \
rjava_CpSolverTest \
2023-02-07 19:44:39 +01:00
rjava_LinearExprTest
2020-09-14 23:49:23 +02:00
.PHONY: test_java_contrib # Build and Run all Java Contrib (located in examples/contrib)
test_java_contrib: \
rjava_AllDifferentExcept0 \
rjava_AllInterval \
rjava_Circuit \
rjava_CoinsGridMIP \
rjava_ColoringMIP \
rjava_CoveringOpl \
rjava_Crossword \
rjava_DeBruijn \
rjava_Diet \
rjava_DietMIP \
rjava_DivisibleBy9Through1 \
rjava_GolombRuler \
rjava_KnapsackMIP \
rjava_LeastDiff \
rjava_MagicSquare \
rjava_Map2 \
rjava_Map \
rjava_Minesweeper \
rjava_MultiThreadTest \
rjava_NQueens2 \
rjava_NQueens \
rjava_Partition \
rjava_QuasigroupCompletion \
rjava_SendMoreMoney2 \
rjava_SendMoreMoney \
rjava_SendMostMoney \
rjava_Seseman \
rjava_SetCovering2 \
rjava_SetCovering3 \
rjava_SetCovering4 \
rjava_SetCoveringDeployment \
rjava_SetCovering \
rjava_SimpleRoutingTest \
rjava_StableMarriage \
rjava_StiglerMIP \
rjava_Strimko2 \
rjava_Sudoku \
rjava_SurvoPuzzle \
rjava_ToNum \
rjava_WhoKilledAgatha \
rjava_Xkcd \
rjava_YoungTableaux
2022-10-05 12:46:43 +02:00
.PHONY: test_java_java # Build and Run all Java Examples (located in examples/java)
2020-09-14 23:49:23 +02:00
test_java_java: \
rjava_CapacitatedVehicleRoutingProblemWithTimeWindows \
rjava_FlowExample \
rjava_IntegerProgramming \
rjava_LinearAssignmentAPI \
rjava_LinearProgramming \
rjava_RabbitsPheasants \
rjava_RandomTsp
.PHONY: test_java
test_java: \
check_java \
2020-09-14 23:49:23 +02:00
test_java_tests \
test_java_contrib \
test_java_java
###############
## Archive ##
###############
archive_java: $(INSTALL_JAVA_NAME)$(ARCHIVE_EXT)
$(INSTALL_JAVA_NAME):
$(MKDIR) $(INSTALL_JAVA_NAME)
$(INSTALL_JAVA_NAME)/examples: | $(INSTALL_JAVA_NAME)
$(MKDIR) $(INSTALL_JAVA_NAME)$Sexamples
define java-sample-archive =
$(INSTALL_JAVA_NAME)/examples/%/pom.xml: \
$(TEMP_JAVA_DIR)/$1/%/pom.xml \
$(SRC_DIR)/ortools/$1/samples/%.java \
| $(INSTALL_JAVA_NAME)/examples
-$(MKDIR_P) $(INSTALL_JAVA_NAME)$Sexamples$S$$*$S$(JAVA_SRC_PATH)
$(COPY) $(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml $(INSTALL_JAVA_NAME)$Sexamples$S$$*
$(COPY) $(SRC_DIR)$Sortools$S$1$Ssamples$S$$*.java $(INSTALL_JAVA_NAME)$Sexamples$S$$*$S$(JAVA_SRC_PATH)
endef
$(foreach sample,$(JAVA_SAMPLES),$(eval $(call java-sample-archive,$(sample))))
define java-example-archive =
$(INSTALL_JAVA_NAME)/examples/%/pom.xml: \
$(TEMP_JAVA_DIR)/$1/%/pom.xml \
$(SRC_DIR)/examples/$1/%.java \
| $(INSTALL_JAVA_NAME)/examples
-$(MKDIR_P) $(INSTALL_JAVA_NAME)$Sexamples$S$$*$S$(JAVA_SRC_PATH)
$(COPY) $(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml $(INSTALL_JAVA_NAME)$Sexamples$S$$*
$(COPY) $(SRC_DIR)$Sexamples$S$1$S$$*.java $(INSTALL_JAVA_NAME)$Sexamples$S$$*$S$(JAVA_SRC_PATH)
endef
$(foreach example,$(JAVA_EXAMPLES),$(eval $(call java-example-archive,$(example))))
SAMPLE_JAVA_FILES = \
$(addsuffix /pom.xml,$(addprefix $(INSTALL_JAVA_NAME)/examples/,$(basename $(notdir $(wildcard ortools/*/samples/*.java)))))
EXAMPLE_JAVA_FILES = \
$(addsuffix /pom.xml,$(addprefix $(INSTALL_JAVA_NAME)/examples/,$(basename $(notdir $(wildcard examples/contrib/*.java))))) \
$(addsuffix /pom.xml,$(addprefix $(INSTALL_JAVA_NAME)/examples/,$(basename $(notdir $(wildcard examples/java/*.java)))))
$(INSTALL_JAVA_NAME)$(ARCHIVE_EXT): java \
$(SAMPLE_JAVA_FILES) \
$(EXAMPLE_JAVA_FILES) \
2022-04-25 15:36:48 +02:00
LICENSE tools/README.java.md tools/Makefile.java.mk
$(COPY) $(JAVA_BUILD_PATH)$Sortools-java$Starget$S*.jar $(INSTALL_JAVA_NAME)$S
$(COPY) $(JAVA_BUILD_PATH)$Sortools-$(JAVA_NATIVE_IDENTIFIER)$Starget$S*.jar $(INSTALL_JAVA_NAME)$S
$(COPY) LICENSE $(INSTALL_JAVA_NAME)$SLICENSE
$(COPY) tools$SREADME.java.md $(INSTALL_JAVA_NAME)$SREADME.md
2022-04-25 15:36:48 +02:00
$(COPY) tools$SMakefile.java.mk $(INSTALL_JAVA_NAME)$SMakefile
$(SED) -i -e 's/@PROJECT_VERSION@/$(OR_TOOLS_VERSION)/' $(INSTALL_JAVA_NAME)$SMakefile
ifeq ($(PLATFORM),WIN64)
$(MKDIR) $(INSTALL_JAVA_NAME)$Sbin
$(COPY) $(WHICH) $(INSTALL_JAVA_NAME)$Sbin$S
$(COPY) $(TOUCH) $(INSTALL_JAVA_NAME)$Sbin$S
$(ZIP) -r $(INSTALL_JAVA_NAME)$(ARCHIVE_EXT) $(INSTALL_JAVA_NAME)
else
$(TAR) --no-same-owner -czvf $(INSTALL_JAVA_NAME)$(ARCHIVE_EXT) $(INSTALL_JAVA_NAME)
endif
# Test archive
TEMP_JAVA_TEST_DIR := temp_java_test
.PHONY: test_archive_java # Test C++ OR-Tools archive is OK.
test_archive_java: $(INSTALL_JAVA_NAME)$(ARCHIVE_EXT)
-$(DELREC) $(TEMP_JAVA_TEST_DIR)
-$(MKDIR) $(TEMP_JAVA_TEST_DIR)
ifeq ($(PLATFORM),WIN64)
$(UNZIP) $< -d $(TEMP_JAVA_TEST_DIR)
else
$(TAR) -xvf $< -C $(TEMP_JAVA_TEST_DIR)
endif
cd $(TEMP_JAVA_TEST_DIR)$S$(INSTALL_JAVA_NAME) \
&& $(MAKE) MAKEFLAGS= \
&& $(MAKE) MAKEFLAGS= test
########################
## Publish Java Pkg ##
########################
.PHONY: publish_java_runtime
publish_java_runtime: java_runtime
2021-04-19 15:05:13 +02:00
cd $(TEMP_JAVA_DIR)$S$(JAVA_ORTOOLS_NATIVE_PROJECT) && "$(MVN_BIN)" deploy
.PHONY: publish_java
publish_java: java
2021-03-29 15:50:39 +02:00
cd $(TEMP_JAVA_DIR)$S$(JAVA_ORTOOLS_PROJECT) && "$(MVN_BIN)" deploy
#######################
## EXAMPLE ARCHIVE ##
#######################
$(TEMP_JAVA_DIR)/ortools_examples: | $(TEMP_JAVA_DIR)
$(MKDIR) $(TEMP_JAVA_DIR)$Sortools_examples
$(TEMP_JAVA_DIR)/ortools_examples/examples: | $(TEMP_JAVA_DIR)/ortools_examples
$(MKDIR) $(TEMP_JAVA_DIR)$Sortools_examples$Sexamples
$(TEMP_JAVA_DIR)/ortools_examples/examples/java: | $(TEMP_JAVA_DIR)/ortools_examples/examples
$(MKDIR) $(TEMP_JAVA_DIR)$Sortools_examples$Sexamples$Sjava
define java-sample-archive =
2022-03-30 09:35:51 +02:00
$(TEMP_JAVA_DIR)/ortools_examples/examples/java/%/pom.xml: \
$(TEMP_JAVA_DIR)/$1/%/pom.xml \
ortools/$1/samples/%.java \
2022-03-30 09:35:51 +02:00
| $(TEMP_JAVA_DIR)/ortools_examples/examples/java
-$(MKDIR_P) $(TEMP_JAVA_DIR)$Sortools_examples$Sexamples$Sjava$S$$*$S$(JAVA_SRC_PATH)
$(COPY) $(SRC_DIR)$Sortools$S$1$Ssamples$S$$*.java \
$(TEMP_JAVA_DIR)$Sortools_examples$Sexamples$Sjava$S$$*$S$(JAVA_SRC_PATH)
$(COPY) $(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml \
$(TEMP_JAVA_DIR)$Sortools_examples$Sexamples$Sjava$S$$*
endef
$(foreach sample,$(JAVA_SAMPLES),$(eval $(call java-sample-archive,$(sample))))
define java-example-archive =
2022-03-30 09:35:51 +02:00
$(TEMP_JAVA_DIR)/ortools_examples/examples/java/%/pom.xml: \
$(TEMP_JAVA_DIR)/$1/%/pom.xml \
examples/$1/%.java \
2022-03-30 09:35:51 +02:00
| $(TEMP_JAVA_DIR)/ortools_examples/examples/java
-$(MKDIR_P) $(TEMP_JAVA_DIR)$Sortools_examples$Sexamples$Sjava$S$$*$S$(JAVA_SRC_PATH)
$(COPY) $(SRC_DIR)$Sexamples$S$1$S$$*.java \
$(TEMP_JAVA_DIR)$Sortools_examples$Sexamples$Sjava$S$$*$S$(JAVA_SRC_PATH)
$(COPY) $(TEMP_JAVA_DIR)$S$1$S$$*$Spom.xml \
$(TEMP_JAVA_DIR)$Sortools_examples$Sexamples$Sjava$S$$*
endef
$(foreach example,$(JAVA_EXAMPLES),$(eval $(call java-example-archive,$(example))))
SAMPLE_JAVA_FILES = \
$(addsuffix /pom.xml,$(addprefix $(TEMP_JAVA_DIR)/ortools_examples/examples/java/,$(basename $(notdir $(wildcard ortools/*/samples/*.java)))))
EXAMPLE_JAVA_FILES = \
$(addsuffix /pom.xml,$(addprefix $(TEMP_JAVA_DIR)/ortools_examples/examples/java/,$(basename $(notdir $(wildcard examples/contrib/*.java))))) \
$(addsuffix /pom.xml,$(addprefix $(TEMP_JAVA_DIR)/ortools_examples/examples/java/,$(basename $(notdir $(wildcard examples/java/*.java)))))
.PHONY: java_examples_archive # Build stand-alone Java examples archive file for redistribution.
java_examples_archive: \
$(SAMPLE_JAVA_FILES) \
$(EXAMPLE_JAVA_FILES) \
| $(TEMP_JAVA_DIR)/ortools_examples/examples/java
2020-10-02 17:47:54 +02:00
$(COPY) tools$SREADME.java.md $(TEMP_JAVA_DIR)$Sortools_examples$SREADME.md
2022-03-02 21:24:52 +01:00
$(COPY) LICENSE $(TEMP_JAVA_DIR)$Sortools_examples
ifeq ($(PLATFORM),WIN64)
cd $(TEMP_JAVA_DIR) \
&& ..\$(ZIP) \
-r ..\or-tools_java_examples_v$(OR_TOOLS_VERSION).zip \
ortools_examples
else
cd $(TEMP_JAVA_DIR) \
&& tar -c -v -z --no-same-owner \
-f ../or-tools_java_examples_v$(OR_TOOLS_VERSION).tar.gz \
ortools_examples
endif
-$(DELREC) $(TEMP_JAVA_DIR)$Sortools_examples
endif # HAS_JAVA=ON
################
## Cleaning ##
################
clean_java:
2020-09-28 14:41:09 +02:00
-$(DELREC) $(TEMP_JAVA_DIR)
-$(DELREC) $(INSTALL_JAVA_NAME)
-$(DELREC) or-tools_java_*
-$(DELREC) $(TEMP_JAVA_TEST_DIR)
2022-03-30 09:35:51 +02:00
-$(DEL) *.jar
2018-07-17 15:02:26 +02:00
#############
## DEBUG ##
#############
2018-02-23 14:55:24 +01:00
detect_java:
2018-03-06 14:34:17 +01:00
@echo Relevant info for the Java build:
2022-02-22 10:36:26 +01:00
@echo BUILD_JAVA = $(BUILD_JAVA)
@echo HAS_JAVA = $(HAS_JAVA)
2018-07-06 21:03:33 +02:00
@echo JAVA_HOME = $(JAVA_HOME)
2018-02-23 14:55:24 +01:00
@echo JAVAC_BIN = $(JAVAC_BIN)
@echo JAR_BIN = $(JAR_BIN)
2018-07-06 21:03:33 +02:00
@echo JAVA_BIN = $(JAVA_BIN)
2020-09-07 17:21:35 +02:00
@echo MVN_BIN = $(MVN_BIN)
@echo JAVA_ORTOOLS_PACKAGE = $(JAVA_ORTOOLS_PACKAGE)
@echo JAVA_ORTOOLS_NATIVE_PROJECT = $(JAVA_ORTOOLS_NATIVE_PROJECT)
@echo JAVA_ORTOOLS_PROJECT = $(JAVA_ORTOOLS_PROJECT)
2022-03-30 09:35:51 +02:00
@echo INSTALL_JAVA_NAME = $(INSTALL_JAVA_NAME)
ifeq ($(PLATFORM),WIN64)
2018-03-06 15:03:19 +01:00
@echo off & echo(
2018-03-06 14:34:17 +01:00
else
@echo
endif