From 3febf18e1932687ce3e66e2f6264b8757f2aad42 Mon Sep 17 00:00:00 2001 From: Chris Blume Date: Fri, 3 Nov 2023 06:48:24 -0400 Subject: [PATCH] Unify Make builds (#76) * Unify Make builds --- .github/workflows/build-and-test.yaml | 4 +- Projects/Clang X86-64 Make/Makefile | 78 --------------------- Projects/GCC X86 Make/Makefile | 79 ---------------------- Projects/GCC X86-64 Make/Makefile | 75 -------------------- Projects/{Clang X86 Make => Make}/Makefile | 50 ++++++++------ 5 files changed, 30 insertions(+), 256 deletions(-) delete mode 100644 Projects/Clang X86-64 Make/Makefile delete mode 100644 Projects/GCC X86 Make/Makefile delete mode 100644 Projects/GCC X86-64 Make/Makefile rename Projects/{Clang X86 Make => Make}/Makefile (55%) diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml index d68352c..8e4e1f7 100644 --- a/.github/workflows/build-and-test.yaml +++ b/.github/workflows/build-and-test.yaml @@ -61,8 +61,8 @@ jobs: - name: Build #env: # CXX: g++-10 - working-directory: ${{ github.workspace }}/Projects/${{ matrix.compiler }} ${{ matrix.platform }} Make + working-directory: ${{ github.workspace }}/Projects/Make run: make - name: Test - run: ${{ github.workspace }}/Projects/${{ matrix.compiler }}\ ${{ matrix.platform }}\ Make/maxGUIAutomatedTests + run: ${{ github.workspace }}/Projects/Make/maxGUIAutomatedTests diff --git a/Projects/Clang X86-64 Make/Makefile b/Projects/Clang X86-64 Make/Makefile deleted file mode 100644 index efb7ba8..0000000 --- a/Projects/Clang X86-64 Make/Makefile +++ /dev/null @@ -1,78 +0,0 @@ -PROGRAM_NAME = maxGUI -CXX_SRCS = \ - ../../Code/maxGUI/ButtonImplementation.cpp \ - ../../Code/maxGUI/Control.cpp \ - ../../Code/maxGUI/ControlImplementation.cpp \ - ../../Code/maxGUI/ControlWithText.cpp \ - ../../Code/maxGUI/ControlWithTextImplementation.cpp \ - ../../Code/maxGUI/EntryPoint.cpp \ - ../../Code/maxGUI/FormAllocatorConcept.cpp \ - ../../Code/maxGUI/FormConcept.cpp \ - ../../Code/maxGUI/FormContainer.cpp \ - ../../Code/maxGUI/MultilineTextBoxImplementation.cpp - #../../Code/maxGUI/CheckBoxImplementation.cpp \ - #../../Code/maxGUI/ControlWithList.cpp \ - #../../Code/maxGUI/DropDownBoxImplementation.cpp \ - #../../Code/maxGUI/Frame.cpp \ - #../../Code/maxGUI/Label.cpp \ - #../../Code/maxGUI/ListBoxImplementation.cpp \ - #../../Code/maxGUI/ProgressBar.cpp \ - #../../Code/maxGUI/RadioButtonImplementation.cpp \ - #../../Code/maxGUI/TextBoxImplementation.cpp -CXX_OBJS = $(CXX_SRCS:.cpp=.o) - -INCLUDE_PATHS = \ - ../../Code \ - ../../Dependencies/max/Code \ - /usr/include/qt/QtWidgets \ - /usr/include/qt \ - /usr/include/qt/QtCore \ - /usr/include/qt/QtGui \ - /usr/include/x86_64-linux-gnu/qt5/QtWidgets \ - /usr/include/x86_64-linux-gnu/qt5 \ - /usr/include/x86_64-linux-gnu/QtCore \ - /usr/include/x86_64-linux-gnu/QtGui - -INCLUDE_PATHS_FLAGS = $(foreach d, $(INCLUDE_PATHS), -I$d) - -LIBRARY_PATHS = \ - . -LIBRARY_PATHS_FLAGS = $(foreach d, $(LIBRARY_PATHS), -L$d) - -AUTOMATED_TEST_CXX_SRCS = \ - ../../Code/maxGUI/TestingEntryPoint.cpp -AUTOMATED_TEST_CXX_OBJS = $(AUTOMATED_TEST_CXX_SRCS:.cpp=.o) - -EXAMPLE1_CXX_SRCS = \ - ../../Code/Examples/1-SimpleExample/EntryPoint.cpp -EXAMPLE1_CXX_OBJS = $(EXAMPLE1_CXX_SRCS:.cpp=.o) - -CPPFLAGS += $(INCLUDE_PATHS_FLAGS) -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -std=c++20 -fPIC -LINKER_FLAGS += $(LIBRARY_PATHS_FLAGS) -lQt5Widgets -lQt5Gui -lQt5Core - - - - -all: lib$(PROGRAM_NAME).a maxGUIAutomatedTests example1 - -lib$(PROGRAM_NAME).a: $(PCH_OBJS) $(CXX_OBJS) - ar rcs lib$(PROGRAM_NAME).a $(CXX_OBJS) - -maxGUIAutomatedTests: $(AUTOMATED_TEST_CXX_OBJS) - clang++ -g $(AUTOMATED_TEST_CXX_OBJS) $(LINKER_FLAGS) -l$(PROGRAM_NAME) -o maxGUIAutomatedTests - -example1: $(EXAMPLE1_CXX_OBJS) - clang++ -g $(EXAMPLE1_CXX_OBJS) $(LINKER_FLAGS) -l$(PROGRAM_NAME) -o example1 - -.cpp.o: - clang++ -g $(CPPFLAGS) -c $< -o $@ - -clean: - @- $(RM) lib$(PROGRAM_NAME).a - @- $(RM) $(CXX_OBJS) - @- $(RM) maxAutomatedTests - @- $(RM) $(AUTOMATED_TEST_CXX_OBJS) - @- $(RM) example1 - @- $(RM) $(EXAMPLE1_CXX_OBJS) - -distclean: clean diff --git a/Projects/GCC X86 Make/Makefile b/Projects/GCC X86 Make/Makefile deleted file mode 100644 index e3446ca..0000000 --- a/Projects/GCC X86 Make/Makefile +++ /dev/null @@ -1,79 +0,0 @@ -PROGRAM_NAME = maxGUI -CXX_SRCS = \ - ../../Code/maxGUI/ButtonImplementation.cpp \ - ../../Code/maxGUI/Control.cpp \ - ../../Code/maxGUI/ControlImplementation.cpp \ - ../../Code/maxGUI/ControlWithText.cpp \ - ../../Code/maxGUI/ControlWithTextImplementation.cpp \ - ../../Code/maxGUI/EntryPoint.cpp \ - ../../Code/maxGUI/FormAllocatorConcept.cpp \ - ../../Code/maxGUI/FormConcept.cpp \ - ../../Code/maxGUI/FormContainer.cpp \ - ../../Code/maxGUI/MultilineTextBoxImplementation.cpp - #../../Code/maxGUI/CheckBoxImplementation.cpp \ - #../../Code/maxGUI/ControlWithList.cpp \ - #../../Code/maxGUI/DropDownBoxImplementation.cpp \ - #../../Code/maxGUI/Frame.cpp \ - #../../Code/maxGUI/Label.cpp \ - #../../Code/maxGUI/ListBoxImplementation.cpp \ - #../../Code/maxGUI/ProgressBar.cpp \ - #../../Code/maxGUI/RadioButtonImplementation.cpp \ - #../../Code/maxGUI/TextBoxImplementation.cpp -CXX_OBJS = $(CXX_SRCS:.cpp=.o) - -INCLUDE_PATHS = \ - ../../Code \ - ../../Dependencies/max/Code \ - /usr/include/qt/QtWidgets \ - /usr/include/qt \ - /usr/include/qt/QtCore \ - /usr/include/qt/QtGui \ - /usr/include/x86_64-linux-gnu/qt5/QtWidgets \ - /usr/include/x86_64-linux-gnu/qt5 \ - /usr/include/x86_64-linux-gnu/QtCore \ - /usr/include/x86_64-linux-gnu/QtGui - -INCLUDE_PATHS_FLAGS = $(foreach d, $(INCLUDE_PATHS), -I$d) - -LIBRARY_PATHS = \ - . -LIBRARY_PATHS_FLAGS = $(foreach d, $(LIBRARY_PATHS), -L$d) - -AUTOMATED_TEST_CXX_SRCS = \ - ../../Code/maxGUI/TestingEntryPoint.cpp -AUTOMATED_TEST_CXX_OBJS = $(AUTOMATED_TEST_CXX_SRCS:.cpp=.o) - -EXAMPLE1_CXX_SRCS = \ - ../../Code/Examples/1-SimpleExample/EntryPoint.cpp -EXAMPLE1_CXX_OBJS = $(EXAMPLE1_CXX_SRCS:.cpp=.o) - -# TODO: Ubuntu 20.04 (one of our test machines) has a version of GCC which recognizes c++2a, not c++20 -CPPFLAGS += $(INCLUDE_PATHS_FLAGS) -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -std=c++2a -fPIC -LINKER_FLAGS += $(LIBRARY_PATHS_FLAGS) -lQt5Widgets -lQt5Gui -lQt5Core - - - - -all: lib$(PROGRAM_NAME).a maxGUIAutomatedTests example1 - -lib$(PROGRAM_NAME).a: $(PCH_OBJS) $(CXX_OBJS) - ar rcs lib$(PROGRAM_NAME).a $(CXX_OBJS) - -maxGUIAutomatedTests: $(AUTOMATED_TEST_CXX_OBJS) - g++ -g $(AUTOMATED_TEST_CXX_OBJS) $(LINKER_FLAGS) -l$(PROGRAM_NAME) -o maxGUIAutomatedTests - -example1: $(EXAMPLE1_CXX_OBJS) - clang++ -g $(EXAMPLE1_CXX_OBJS) $(LINKER_FLAGS) -l$(PROGRAM_NAME) -o example1 - -.cpp.o: - g++ -g $(CPPFLAGS) -c $< -o $@ - -clean: - @- $(RM) lib$(PROGRAM_NAME).a - @- $(RM) $(CXX_OBJS) - @- $(RM) maxAutomatedTests - @- $(RM) $(AUTOMATED_TEST_CXX_OBJS) - @- $(RM) example1 - @- $(RM) $(EXAMPLE1_CXX_OBJS) - -distclean: clean diff --git a/Projects/GCC X86-64 Make/Makefile b/Projects/GCC X86-64 Make/Makefile deleted file mode 100644 index e2c68fa..0000000 --- a/Projects/GCC X86-64 Make/Makefile +++ /dev/null @@ -1,75 +0,0 @@ -PROGRAM_NAME = maxGUI -CXX_SRCS = \ - ../../Code/maxGUI/ButtonImplementation.cpp \ - ../../Code/maxGUI/Control.cpp \ - ../../Code/maxGUI/ControlImplementation.cpp \ - ../../Code/maxGUI/ControlWithText.cpp \ - ../../Code/maxGUI/ControlWithTextImplementation.cpp \ - ../../Code/maxGUI/EntryPoint.cpp \ - ../../Code/maxGUI/FormAllocatorConcept.cpp \ - ../../Code/maxGUI/FormConcept.cpp \ - ../../Code/maxGUI/FormContainer.cpp \ - ../../Code/maxGUI/MultilineTextBoxImplementation.cpp - #../../Code/maxGUI/CheckBoxImplementation.cpp \ - #../../Code/maxGUI/ControlWithList.cpp \ - #../../Code/maxGUI/DropDownBoxImplementation.cpp \ - #../../Code/maxGUI/Frame.cpp \ - #../../Code/maxGUI/Label.cpp \ - #../../Code/maxGUI/ListBoxImplementation.cpp \ - #../../Code/maxGUI/ProgressBar.cpp \ - #../../Code/maxGUI/RadioButtonImplementation.cpp \ - #../../Code/maxGUI/TextBoxImplementation.cpp -CXX_OBJS = $(CXX_SRCS:.cpp=.o) - -INCLUDE_PATHS = \ - ../../Code \ - ../../Dependencies/max/Code \ - /usr/include/qt/QtWidgets \ - /usr/include/qt \ - /usr/include/qt/QtCore \ - /usr/include/qt/QtGui \ - /usr/include/x86_64-linux-gnu/qt5/QtWidgets \ - /usr/include/x86_64-linux-gnu/qt5 \ - /usr/include/x86_64-linux-gnu/QtCore \ - /usr/include/x86_64-linux-gnu/QtGui - -INCLUDE_PATHS_FLAGS = $(foreach d, $(INCLUDE_PATHS), -I$d) - -LIBRARY_PATHS = \ - . -LIBRARY_PATHS_FLAGS = $(foreach d, $(LIBRARY_PATHS), -L$d) - -AUTOMATED_TEST_CXX_SRCS = \ - ../../Code/maxGUI/TestingEntryPoint.cpp -AUTOMATED_TEST_CXX_OBJS = $(AUTOMATED_TEST_CXX_SRCS:.cpp=.o) - -# TODO: Ubuntu 20.04 (one of our test machines) has a version of GCC which recognizes c++2a, not c++20 -CPPFLAGS += $(INCLUDE_PATHS_FLAGS) -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -std=c++2a -fPIC -LINKER_FLAGS += $(LIBRARY_PATHS_FLAGS) -lQt5Widgets -lQt5Gui -lQt5Core - - - - -all: lib$(PROGRAM_NAME).a maxGUIAutomatedTests - -lib$(PROGRAM_NAME).a: $(PCH_OBJS) $(CXX_OBJS) - ar rcs lib$(PROGRAM_NAME).a $(CXX_OBJS) - -maxGUIAutomatedTests: $(AUTOMATED_TEST_CXX_OBJS) - g++ -g $(AUTOMATED_TEST_CXX_OBJS) $(LINKER_FLAGS) -l$(PROGRAM_NAME) -o maxGUIAutomatedTests - -example1: $(EXAMPLE1_CXX_OBJS) - clang++ -g $(EXAMPLE1_CXX_OBJS) $(LINKER_FLAGS) -l$(PROGRAM_NAME) -o example1 - -.cpp.o: - g++ -g $(CPPFLAGS) -c $< -o $@ - -clean: - @- $(RM) lib$(PROGRAM_NAME).a - @- $(RM) $(CXX_OBJS) - @- $(RM) maxAutomatedTests - @- $(RM) $(AUTOMATED_TEST_CXX_OBJS) - @- $(RM) example1 - @- $(RM) $(EXAMPLE1_CXX_OBJS) - -distclean: clean diff --git a/Projects/Clang X86 Make/Makefile b/Projects/Make/Makefile similarity index 55% rename from Projects/Clang X86 Make/Makefile rename to Projects/Make/Makefile index 048539d..e7d2db1 100644 --- a/Projects/Clang X86 Make/Makefile +++ b/Projects/Make/Makefile @@ -1,4 +1,5 @@ -PROGRAM_NAME = maxGUI +LIBRARY = maxGUI + CXX_SRCS = \ ../../Code/maxGUI/ButtonImplementation.cpp \ ../../Code/maxGUI/Control.cpp \ @@ -19,7 +20,8 @@ CXX_SRCS = \ #../../Code/maxGUI/ProgressBar.cpp \ #../../Code/maxGUI/RadioButtonImplementation.cpp \ #../../Code/maxGUI/TextBoxImplementation.cpp -CXX_OBJS = $(CXX_SRCS:.cpp=.o) + +CXX_OBJS = $(patsubst ../../Code/%.cpp,Build/Objects/%.o,$(CXX_SRCS)) INCLUDE_PATHS = \ ../../Code \ @@ -32,7 +34,6 @@ INCLUDE_PATHS = \ /usr/include/x86_64-linux-gnu/qt5 \ /usr/include/x86_64-linux-gnu/QtCore \ /usr/include/x86_64-linux-gnu/QtGui - INCLUDE_PATHS_FLAGS = $(foreach d, $(INCLUDE_PATHS), -I$d) LIBRARY_PATHS = \ @@ -41,38 +42,43 @@ LIBRARY_PATHS_FLAGS = $(foreach d, $(LIBRARY_PATHS), -L$d) AUTOMATED_TEST_CXX_SRCS = \ ../../Code/maxGUI/TestingEntryPoint.cpp -AUTOMATED_TEST_CXX_OBJS = $(AUTOMATED_TEST_CXX_SRCS:.cpp=.o) +AUTOMATED_TEST_CXX_OBJS = $(patsubst ../../Code/%.cpp,Build/Objects/%.o,$(AUTOMATED_TEST_CXX_SRCS)) EXAMPLE1_CXX_SRCS = \ ../../Code/Examples/1-SimpleExample/EntryPoint.cpp -EXAMPLE1_CXX_OBJS = $(EXAMPLE1_CXX_SRCS:.cpp=.o) +EXAMPLE1_CXX_OBJS = $(patsubst ../../Code/%.cpp,Build/Objects/%.o,$(EXAMPLE1_CXX_SRCS)) -CPPFLAGS += $(INCLUDE_PATHS_FLAGS) -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -std=c++20 -fPIC +CPPFLAGS += $(INCLUDE_PATHS_FLAGS) -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -std=c++17 -fPIC LINKER_FLAGS += $(LIBRARY_PATHS_FLAGS) -lQt5Widgets -lQt5Gui -lQt5Core +all: lib$(LIBRARY).a maxGUIAutomatedTests example1 -all: lib$(PROGRAM_NAME).a maxGUIAutomatedTests example1 +lib$(LIBRARY).a: $(CXX_OBJS) + ar rcs lib$(LIBRARY).a $(CXX_OBJS) -lib$(PROGRAM_NAME).a: $(PCH_OBJS) $(CXX_OBJS) - ar rcs lib$(PROGRAM_NAME).a $(CXX_OBJS) +$(CXX_OBJS): $(CXX_SRCS) + mkdir -p $(dir $@) + $(CXX) -g $(CPPFLAGS) -c $(patsubst Build/Objects/%.o,../../Code/%.cpp,$@) -o $@ -maxGUIAutomatedTests: $(AUTOMATED_TEST_CXX_OBJS) - clang++ -g $(AUTOMATED_TEST_CXX_OBJS) $(LINKER_FLAGS) -l$(PROGRAM_NAME) -o maxGUIAutomatedTests +maxGUIAutomatedTests: lib$(LIBRARY).a $(AUTOMATED_TEST_CXX_OBJS) + $(CXX) -g $(AUTOMATED_TEST_CXX_OBJS) $(LINKER_FLAGS) -l$(LIBRARY) -o maxGUIAutomatedTests -example1: $(EXAMPLE1_CXX_OBJS) - clang++ -g $(EXAMPLE1_CXX_OBJS) $(LINKER_FLAGS) -l$(PROGRAM_NAME) -o example1 +$(AUTOMATED_TEST_CXX_OBJS): $(AUTOMATED_TEST_CXX_SRCS) + mkdir -p $(dir $@) + $(CXX) -g $(CPPFLAGS) -c $(patsubst Build/Objects/%.o,../../Code/%.cpp,$@) -o $@ -.cpp.o: - clang++ -g $(CPPFLAGS) -c $< -o $@ +example1: lib$(LIBRARY).a $(EXAMPLE1_CXX_OBJS) + $(CXX) -g $(EXAMPLE1_CXX_OBJS) $(LINKER_FLAGS) -l$(LIBRARY) -o example1 -clean: - @- $(RM) lib$(PROGRAM_NAME).a - @- $(RM) $(CXX_OBJS) - @- $(RM) maxGUIAutomatedTests - @- $(RM) $(AUTOMATED_TEST_CXX_OBJS) - @- $(RM) example1 - @- $(RM) $(EXAMPLE1_CXX_OBJS) +$(EXAMPLE1_CXX_OBJS): $(EXAMPLE1_CXX_SRCS) + mkdir -p $(dir $@) + $(CXX) -g $(CPPFLAGS) -c $(patsubst Build/Objects/%.o,../../Code/%.cpp,$@) -o $@ +.PHONY: clean distclean: clean +clean: + for file in lib$(LIBRARY).a $(CXX_OBJS) maxGUIAutomatedTests $(AUTOMATED_TEST_CXX_OBJS) example1 $(EXAMPLE1_CXX_OBJS) ; do \ + rm $${file} ; \ + done