diff --git a/.github/workflows/build_freebsd.yml b/.github/workflows/build_freebsd.yml index 0cd1518dd..6d5a2a7fe 100644 --- a/.github/workflows/build_freebsd.yml +++ b/.github/workflows/build_freebsd.yml @@ -42,8 +42,8 @@ jobs: shell: bash env: COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror" - PLAT32_FLAGS: "-fno-pie -fvisibility=hidden -fcf-protection=none -rdynamic -DCC_BUILD_ICON -I freebsd32/include -L freebsd32/lib" - PLAT64_FLAGS: "-fno-pie -fvisibility=hidden -fcf-protection=none -rdynamic -DCC_BUILD_ICON -I freebsd64/include -L freebsd64/lib" + PLAT32_FLAGS: "-fno-pie -fvisibility=hidden -fcf-protection=none -rdynamic -I freebsd32/include -L freebsd32/lib" + PLAT64_FLAGS: "-fno-pie -fvisibility=hidden -fcf-protection=none -rdynamic -I freebsd64/include -L freebsd64/lib" run: | LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\" diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index a2e0b5860..e2e8e7e28 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -42,7 +42,7 @@ jobs: id: compile env: COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror" - NIX32_FLAGS: "-no-pie -fno-pie -m32 -fvisibility=hidden -fcf-protection=none -rdynamic -DCC_BUILD_ICON -L ../lib -Wl,--unresolved-symbols=ignore-in-shared-libs" + NIX32_FLAGS: "-no-pie -fno-pie -m32 -fvisibility=hidden -fcf-protection=none -rdynamic -L ../lib -Wl,--unresolved-symbols=ignore-in-shared-libs" run: | LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\" @@ -105,7 +105,7 @@ jobs: id: compile env: COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror" - NIX64_FLAGS: "-no-pie -fno-pie -m64 -fvisibility=hidden -fcf-protection=none -rdynamic -DCC_BUILD_ICON -L ../lib -Wl,--unresolved-symbols=ignore-in-shared-libs" + NIX64_FLAGS: "-no-pie -fno-pie -m64 -fvisibility=hidden -fcf-protection=none -rdynamic -L ../lib -Wl,--unresolved-symbols=ignore-in-shared-libs" run: | LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\" diff --git a/.github/workflows/build_mac32.yml b/.github/workflows/build_mac32.yml index e4e063706..5283d2a0b 100644 --- a/.github/workflows/build_mac32.yml +++ b/.github/workflows/build_mac32.yml @@ -26,7 +26,7 @@ jobs: shell: bash id: compile env: - COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -fvisibility=hidden -rdynamic -DCC_BUILD_ICON" + COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -fvisibility=hidden -rdynamic" run: | LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\" diff --git a/.github/workflows/build_mac64.yml b/.github/workflows/build_mac64.yml index 1a805cea8..30c7e0cfd 100644 --- a/.github/workflows/build_mac64.yml +++ b/.github/workflows/build_mac64.yml @@ -24,8 +24,8 @@ jobs: id: compile env: COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn" - MAC_ARM64_FLAGS: "-fvisibility=hidden -rdynamic -DCC_BUILD_ICON -DCC_GFX_BACKEND=CC_GFX_BACKEND_GL2 -arch arm64" - MAC_INTEL64_FLAGS: "-fvisibility=hidden -rdynamic -DCC_BUILD_ICON -arch x86_64" + MAC_ARM64_FLAGS: "-fvisibility=hidden -rdynamic -DCC_GFX_BACKEND=CC_GFX_BACKEND_GL2 -arch arm64" + MAC_INTEL64_FLAGS: "-fvisibility=hidden -rdynamic -arch x86_64" run: | LATEST_FLAG=-DCC_COMMIT_SHA=\"$(git rev-parse --short "$GITHUB_SHA")\" cd src diff --git a/.github/workflows/build_netbsd.yml b/.github/workflows/build_netbsd.yml index 53992234f..feea8dc6d 100644 --- a/.github/workflows/build_netbsd.yml +++ b/.github/workflows/build_netbsd.yml @@ -36,7 +36,7 @@ jobs: shell: bash env: COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror" - PLAT64_FLAGS: "-fno-pie -fvisibility=hidden -fcf-protection=none -rdynamic -DCC_BUILD_ICON -I netbsd64/include -L netbsd64/lib -Wl,--unresolved-symbols=ignore-in-shared-libs" + PLAT64_FLAGS: "-fno-pie -fvisibility=hidden -fcf-protection=none -rdynamic -I netbsd64/include -L netbsd64/lib -Wl,--unresolved-symbols=ignore-in-shared-libs" run: | LATEST_FLAG=-DCC_COMMIT_SHA=\"${GITHUB_SHA::9}\" echo $LATEST_FLAG diff --git a/.github/workflows/build_rpi.yml b/.github/workflows/build_rpi.yml index fe9a5e75b..c9f0f2e6e 100644 --- a/.github/workflows/build_rpi.yml +++ b/.github/workflows/build_rpi.yml @@ -34,7 +34,7 @@ jobs: id: compile env: COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror" - RPI32_FLAGS: "-fvisibility=hidden -rdynamic -DCC_BUILD_ICON -DCC_BUILD_RPI -I rpi/include -L rpi/lib -Wl,--unresolved-symbols=ignore-in-shared-libs" + RPI32_FLAGS: "-fvisibility=hidden -rdynamic -DCC_BUILD_RPI -I rpi/include -L rpi/lib -Wl,--unresolved-symbols=ignore-in-shared-libs" run: | LATEST_FLAG=-DCC_COMMIT_SHA=\"$GITHUB_SHA\" @@ -85,7 +85,7 @@ jobs: id: compile env: COMMON_FLAGS: "-O1 -s -fno-stack-protector -fno-math-errno -Qn -Werror" - RPI64_FLAGS: "-fvisibility=hidden -rdynamic -DCC_BUILD_ICON -DCC_BUILD_RPI -I rpi/include -L rpi/lib -Wl,--unresolved-symbols=ignore-in-shared-libs" + RPI64_FLAGS: "-fvisibility=hidden -rdynamic -DCC_BUILD_RPI -I rpi/include -L rpi/lib -Wl,--unresolved-symbols=ignore-in-shared-libs" run: | LATEST_FLAG=-DCC_COMMIT_SHA=\"$GITHUB_SHA\" diff --git a/Makefile b/Makefile index 83f88b0ca..b0035cdad 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,9 @@ C_SOURCES = $(wildcard $(SOURCE_DIR)/*.c) OBJECTS = $(patsubst %.c, $(BUILD_DIR)/%.o, $(C_SOURCES)) BUILD_DIRS = $(BUILD_DIR) $(BUILD_DIR)/src +############################## +# Configurable flags and names +############################## # Flags passed to the C compiler CFLAGS = -pipe -fno-math-errno -Werror -Wno-error=missing-braces -Wno-error=strict-aliasing # Flags passed to the linker @@ -11,9 +14,20 @@ LDFLAGS = -g -rdynamic # Name of the main executable ENAME = ClassiCube # Name of the final target file -# (usually this is the executable, but e.g. is app bundle on macOS) +# (usually this is the executable, but e.g. is the app bundle on macOS) TARGET := $(ENAME) +# Enables dependency tracking (https://make.mad-scientist.net/papers/advanced-auto-dependency-generation/) +# This ensures that changing a .h file automatically results in the .c files using it being auto recompiled when next running make +# On older systems the required GCC options may not be supported - in which case just change TRACK_DEPENDENCIES to 0 +TRACK_DEPENDENCIES=1 +# link using C Compiler by default +LINK = $(CC) + + +################################################################# +# Determine shell command used to remove files (for "make clean") +################################################################# ifndef RM # No prefined RM variable, try to guess OS default ifeq ($(OS),Windows_NT) @@ -23,11 +37,10 @@ ifndef RM endif endif -# Enables dependency tracking (https://make.mad-scientist.net/papers/advanced-auto-dependency-generation/) -# This ensures that changing a .h file automatically results in the .c files using it being auto recompiled when next running make -# On older systems the required GCC options may not be supported - in which case just change TRACK_DEPENDENCIES to 0 -TRACK_DEPENDENCIES=1 +########################################################### +# If target platform isn't specified, default to current OS +########################################################### ifndef $(PLAT) ifeq ($(OS),Windows_NT) PLAT = mingw @@ -36,6 +49,10 @@ ifndef $(PLAT) endif endif + +######################################################### +# Setup environment appropriate for the specific platform +######################################################### ifeq ($(PLAT),web) CC = emcc OEXT = .html @@ -54,20 +71,17 @@ ifeq ($(PLAT),mingw) endif ifeq ($(PLAT),linux) - CFLAGS += -DCC_BUILD_ICON LIBS = -lX11 -lXi -lpthread -lGL -ldl BUILD_DIR = build/linux endif ifeq ($(PLAT),sunos) - CFLAGS += -DCC_BUILD_ICON LIBS = -lsocket -lX11 -lXi -lGL BUILD_DIR = build/solaris endif ifeq ($(PLAT),hp-ux) CC = gcc - CFLAGS = -DCC_BUILD_ICON LDFLAGS = LIBS = -lm -lX11 -lXi -lXext -L/opt/graphics/OpenGL/lib -lGL -lpthread BUILD_DIR = build/hpux @@ -75,7 +89,6 @@ endif ifeq ($(PLAT),darwin) OBJECTS += $(BUILD_DIR)/src/Window_cocoa.o - CFLAGS += -DCC_BUILD_ICON LIBS = LDFLAGS = -rdynamic -framework Cocoa -framework OpenGL -framework IOKit -lobjc BUILD_DIR = build/macos @@ -83,28 +96,28 @@ ifeq ($(PLAT),darwin) endif ifeq ($(PLAT),freebsd) - CFLAGS += -I /usr/local/include -DCC_BUILD_ICON + CFLAGS += -I /usr/local/include LDFLAGS = -L /usr/local/lib -rdynamic LIBS = -lexecinfo -lGL -lX11 -lXi -lpthread BUILD_DIR = build/freebsd endif ifeq ($(PLAT),openbsd) - CFLAGS += -I /usr/X11R6/include -I /usr/local/include -DCC_BUILD_ICON + CFLAGS += -I /usr/X11R6/include -I /usr/local/include LDFLAGS = -L /usr/X11R6/lib -L /usr/local/lib -rdynamic LIBS = -lexecinfo -lGL -lX11 -lXi -lpthread BUILD_DIR = build/openbsd endif ifeq ($(PLAT),netbsd) - CFLAGS += -I /usr/X11R7/include -I /usr/pkg/include -DCC_BUILD_ICON + CFLAGS += -I /usr/X11R7/include -I /usr/pkg/include LDFLAGS = -L /usr/X11R7/lib -L /usr/pkg/lib -rdynamic LIBS = -lexecinfo -lGL -lX11 -lXi -lpthread BUILD_DIR = build/netbsd endif ifeq ($(PLAT),dragonfly) - CFLAGS += -I /usr/local/include -DCC_BUILD_ICON + CFLAGS += -I /usr/local/include LDFLAGS = -L /usr/local/lib -rdynamic LIBS = -lexecinfo -lGL -lX11 -lXi -lpthread BUILD_DIR = build/flybsd @@ -176,11 +189,9 @@ else CFLAGS += -g endif -# link with CC by default -LINK ?= $(CC) - default: $(PLAT) +# Build for the specified platform web: $(MAKE) $(TARGET) PLAT=web linux: @@ -272,12 +283,19 @@ amiga_68k: amiga_ppc: $(MAKE) -f misc/amiga/Makefile_ppc +# Cleans up all build .o files clean: $(RM) $(OBJECTS) + +################################################# +# Source files and executable compilation section +################################################# +# Auto creates directories for build files (.o and .d files) $(BUILD_DIRS): mkdir -p $@ +# Main executable (typically just 'ClassiCube' or 'ClassiCube.exe') $(ENAME): $(BUILD_DIRS) $(OBJECTS) $(LINK) $(LDFLAGS) -o $@$(OEXT) $(OBJECTS) $(EXTRA_LIBS) $(LIBS) @@ -294,26 +312,27 @@ $(ENAME).app : $(ENAME) # === Compiling with dependency tracking === # NOTE: Tracking dependencies might not work on older systems - disable this if so ifeq ($(TRACK_DEPENDENCIES), 1) + DEPFLAGS = -MT $@ -MMD -MP -MF $(BUILD_DIR)/$*.d DEPFILES := $(patsubst %.o, %.d, $(OBJECTS)) $(DEPFILES): $(BUILD_DIR)/%.o : %.c $(BUILD_DIR)/%.d $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(DEPFLAGS) -c $< -o $@ +$(BUILD_DIR)/%.o : %.cpp $(BUILD_DIR)/%.d + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(DEPFLAGS) -c $< -o $@ +$(BUILD_DIR)/%.o : %.m $(BUILD_DIR)/%.d + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(DEPFLAGS) -c $< -o $@ include $(wildcard $(DEPFILES)) # === Compiling WITHOUT dependency tracking === else + $(BUILD_DIR)/%.o : %.c $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c $< -o $@ +$(BUILD_DIR)/%.o : %.cpp + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -c $< -o $@ endif - -# === Platform specific file compiling === -$(BUILD_DIR)/%.o: %.m $(BUILD_DIR)/%.d - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(DEPFLAGS) -c $< -o $@ - -$(BUILD_DIR)/%.o: %.cpp $(BUILD_DIR)/%.d - $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(DEPFLAGS) -c $< -o $@ # EXTRA_CFLAGS and EXTRA_LIBS are not defined in the makefile intentionally - # define them on the command line as a simple way of adding CFLAGS/LIBS diff --git a/readme.md b/readme.md index 026618b72..37a50af41 100644 --- a/readme.md +++ b/readme.md @@ -332,7 +332,7 @@ Run `make saturn`. You'll need [libyaul](https://github.com/yaul-org/libyaul) 1. Install `libexecinfo`, `curl` and `openal` packages if needed 2. Run either: - * `make opensd` or + * `make openbsd` or * `cc src/*.c -o ClassiCube -I /usr/X11R6/include -I /usr/local/include -L /usr/X11R6/lib -L /usr/local/lib -lm -lpthread -lX11 -lXi -lGL -lexecinfo` #### NetBSD diff --git a/src/Window_SDL2.c b/src/Window_SDL2.c index 51418c218..9f8d101c9 100644 --- a/src/Window_SDL2.c +++ b/src/Window_SDL2.c @@ -72,7 +72,6 @@ void Window_Init(void) { void Window_Free(void) { } -#ifdef CC_BUILD_ICON /* See misc/sdl/sdl_icon_gen.cs for how to generate this file */ #include "../misc/sdl/CCIcon_SDL.h" @@ -81,9 +80,6 @@ static void ApplyIcon(void) { 0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000); SDL_SetWindowIcon(win_handle, surface); } -#else -static void ApplyIcon(void) { } -#endif static void DoCreateWindow(int width, int height, int flags) { win_handle = SDL_CreateWindow(NULL, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, diff --git a/src/Window_SDL3.c b/src/Window_SDL3.c index f4a2c5e6d..351c72610 100644 --- a/src/Window_SDL3.c +++ b/src/Window_SDL3.c @@ -49,7 +49,6 @@ void Window_Init(void) { void Window_Free(void) { } -#ifdef CC_BUILD_ICON /* See misc/sdl/sdl_icon_gen.cs for how to generate this file */ #include "../misc/sdl/CCIcon_SDL.h" @@ -59,9 +58,6 @@ static void ApplyIcon(void) { SDL_SetWindowIcon(win_handle, surface); } -#else -static void ApplyIcon(void) { } -#endif static void DoCreateWindow(int width, int height, int flags) { SDL_PropertiesID props = SDL_CreateProperties(); diff --git a/src/Window_X11.c b/src/Window_X11.c index 4bf013fa1..6f9be2c10 100644 --- a/src/Window_X11.c +++ b/src/Window_X11.c @@ -335,7 +335,6 @@ void Window_Init(void) { void Window_Free(void) { } -#ifdef CC_BUILD_ICON /* See misc/x11/x11_icon_gen.cs for how to generate this file */ #include "../misc/x11/CCIcon_X11.h" @@ -346,9 +345,6 @@ static void ApplyIcon(Window win) { XChangeProperty(win_display, win, net_wm_icon, xa_cardinal, 32, PropModeReplace, (unsigned char*)CCIcon_Data, CCIcon_Size); } -#else -static void ApplyIcon(Window win) { } -#endif static XVisualInfo Select2DVisual(void) { XVisualInfo info = { 0 }; diff --git a/src/Window_cocoa.m b/src/Window_cocoa.m index 01645ebbe..3ce19870b 100644 --- a/src/Window_cocoa.m +++ b/src/Window_cocoa.m @@ -328,7 +328,6 @@ static void MakeContentView(void) { [winHandle setContentView:viewHandle]; } -#ifdef CC_BUILD_ICON // See misc/macOS/mac_icon_gen.cs for how to generate this file #include "../misc/macOS/CCIcon_mac.h" @@ -352,9 +351,6 @@ static void ApplyIcon(void) { [appHandle setApplicationIconImage:img]; //[img release]; } -#else -static void ApplyIcon(void) { } -#endif static pascal OSErr HandleQuitMessage(const AppleEvent* ev, AppleEvent* reply, long handlerRefcon) { Window_RequestClose();