Makefile supports multiple plantform
This commit is contained in:
parent
136e53fe8e
commit
262b5eefdc
@ -0,0 +1,7 @@
|
|||||||
|
# Phase: Maintenance (2026-01-26)
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
Fix build issues and maintain codebase stability.
|
||||||
|
|
||||||
|
## Tasks
|
||||||
|
- [x] task001: Fix Windows build failure in `ekp_c` (Make `cc` not found).
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
# Task 001: Fix Windows build failure
|
||||||
|
|
||||||
|
## Issue
|
||||||
|
User reports `make` fails on Windows because `cc` is not found.
|
||||||
|
Current Makefile relies on `uname` and assumes `cc` exists.
|
||||||
|
|
||||||
|
## Plan
|
||||||
|
1. Detect Windows via `OS` environment variable (standard on Windows).
|
||||||
|
2. On Windows, default CC to `gcc` if not set.
|
||||||
|
3. Remove reliance on `uname` for Windows detection.
|
||||||
|
4. Verify `pthread` linking.
|
||||||
|
|
||||||
|
## Status
|
||||||
|
- [x] Completed (2026-01-26)
|
||||||
|
|
||||||
|
## Validation
|
||||||
|
- Run `make` in `ekp_c/`.
|
||||||
|
- Verify `ekp.dll` is created.
|
||||||
|
- [x] Confirmed `make` builds `ekp.dll`.
|
||||||
|
- [x] Confirmed `make test` passes (loads module in Emacs).
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
# Changes Log - Phase Maintenance 2026-01-26
|
||||||
|
|
||||||
|
## 2026-01-26
|
||||||
|
- **Fix**: Update `ekp_c/Makefile` to support Windows build.
|
||||||
|
- Detect `Windows_NT` and use `gcc` instead of `cc`.
|
||||||
|
- Set default `EMACS_ROOT` and `EMACS` path for the current environment.
|
||||||
|
- Add `EMACS_ROOT` include path to `CFLAGS`.
|
||||||
|
- Fix `test` target to use configured `$(EMACS)` executable.
|
||||||
|
- Task: `task001`
|
||||||
@ -4,10 +4,24 @@
|
|||||||
# Uses pthread for multi-threading, optimizes for native CPU.
|
# Uses pthread for multi-threading, optimizes for native CPU.
|
||||||
|
|
||||||
# Detect OS
|
# Detect OS
|
||||||
UNAME := $(shell uname)
|
ifeq ($(OS),Windows_NT)
|
||||||
|
UNAME := Windows
|
||||||
|
else
|
||||||
|
UNAME := $(shell uname 2>/dev/null || echo Unknown)
|
||||||
|
endif
|
||||||
|
|
||||||
# Compiler settings
|
# Compiler settings
|
||||||
CC := cc
|
# Default to gcc on Windows if cc is not found
|
||||||
|
ifeq ($(UNAME), Windows)
|
||||||
|
CC = gcc
|
||||||
|
# Default Emacs root for this environment (can be overridden)
|
||||||
|
EMACS_ROOT ?= C:/Users/26289/Apps/emacs-30.2/emacs-30.2
|
||||||
|
EMACS ?= $(EMACS_ROOT)/bin/emacs.exe
|
||||||
|
else
|
||||||
|
CC ?= cc
|
||||||
|
EMACS ?= emacs
|
||||||
|
endif
|
||||||
|
|
||||||
CFLAGS := -std=c11 -Wall -Wextra -Wpedantic -O3 -fPIC
|
CFLAGS := -std=c11 -Wall -Wextra -Wpedantic -O3 -fPIC
|
||||||
CFLAGS += -march=native -flto
|
CFLAGS += -march=native -flto
|
||||||
CFLAGS += -D_POSIX_C_SOURCE=200809L
|
CFLAGS += -D_POSIX_C_SOURCE=200809L
|
||||||
@ -32,10 +46,15 @@ else ifeq ($(UNAME), Linux)
|
|||||||
# Linux
|
# Linux
|
||||||
MODULE_EXT := so
|
MODULE_EXT := so
|
||||||
LDFLAGS := -shared -lpthread -lm
|
LDFLAGS := -shared -lpthread -lm
|
||||||
else
|
else ifeq ($(UNAME), Windows)
|
||||||
# Windows (MinGW)
|
# Windows (MinGW)
|
||||||
MODULE_EXT := dll
|
MODULE_EXT := dll
|
||||||
LDFLAGS := -shared -lpthread
|
LDFLAGS := -shared -lpthread
|
||||||
|
CFLAGS += -I$(EMACS_ROOT)/include
|
||||||
|
else
|
||||||
|
# Fallback / Unknown
|
||||||
|
MODULE_EXT := so
|
||||||
|
LDFLAGS := -shared -lpthread
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# Source files
|
# Source files
|
||||||
@ -70,7 +89,7 @@ install: $(MODULE)
|
|||||||
|
|
||||||
# Test with Emacs
|
# Test with Emacs
|
||||||
test: $(MODULE)
|
test: $(MODULE)
|
||||||
emacs -Q --batch \
|
$(EMACS) -Q --batch \
|
||||||
-L . \
|
-L . \
|
||||||
--eval '(module-load (expand-file-name "./$(MODULE)"))' \
|
--eval '(module-load (expand-file-name "./$(MODULE)"))' \
|
||||||
--eval '(message "ekp-c version: %s" (ekp-c-version))' \
|
--eval '(message "ekp-c version: %s" (ekp-c-version))' \
|
||||||
@ -86,6 +105,7 @@ info:
|
|||||||
@echo "LDFLAGS: $(LDFLAGS)"
|
@echo "LDFLAGS: $(LDFLAGS)"
|
||||||
@echo "MODULE: $(MODULE)"
|
@echo "MODULE: $(MODULE)"
|
||||||
@echo "UNAME: $(UNAME)"
|
@echo "UNAME: $(UNAME)"
|
||||||
|
@echo "EMACS: $(EMACS)"
|
||||||
ifdef EMACS_INCLUDE
|
ifdef EMACS_INCLUDE
|
||||||
@echo "EMACS_INCLUDE: $(EMACS_INCLUDE)"
|
@echo "EMACS_INCLUDE: $(EMACS_INCLUDE)"
|
||||||
endif
|
endif
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user